1
+ import { fetchPermitConditionDiff , getPermitConditionDiff , IPermitConditionDiffState } from "./permitConditionDiffSlice" ;
2
+ import { configureStore } from "@reduxjs/toolkit" ;
3
+ import CustomAxios from "../customAxios" ;
4
+ import { ENVIRONMENT } from "@mds/common/constants/environment" ;
5
+ import { MINE } from "@mds/common/constants/API" ;
6
+ import { createRequestHeader } from "../utils/RequestHeaders" ;
7
+ import { IPermitConditionChangeType , IPermitConditionComparison } from "@mds/common/interfaces/permits" ;
8
+
9
+ jest . mock ( "../customAxios" ) ;
10
+ jest . mock ( "../utils/RequestHeaders" ) ;
11
+
12
+ describe ( "permitConditionDiffSlice" , ( ) => {
13
+ const mockStore = configureStore ( {
14
+ reducer : {
15
+ permitConditionDiff : ( state = { diffs : { } , isLoading : false } , action ) => state
16
+ }
17
+ } ) ;
18
+
19
+ const mockAxios = {
20
+ get : jest . fn ( )
21
+ } ;
22
+
23
+ const mockParams = {
24
+ mineGuid : "test-mine-guid" ,
25
+ permitGuid : "test-permit-guid" ,
26
+ amendmentGuid : "test-amendment-guid"
27
+ } ;
28
+
29
+ const mockResponse : { data : { comparison : IPermitConditionComparison [ ] } } = {
30
+ data : {
31
+ comparison : [ {
32
+ previous_condition_guid : "test-previous-condition-guid" ,
33
+ text_similarity : 0.5 ,
34
+ structure_similarity : 0.5 ,
35
+ combined_score : 0.5 ,
36
+ change_type : IPermitConditionChangeType . ADDED
37
+ } ]
38
+ }
39
+ } ;
40
+ beforeEach ( ( ) => {
41
+ ( CustomAxios as jest . Mock ) . mockReturnValue ( mockAxios ) ;
42
+ ( createRequestHeader as jest . Mock ) . mockReturnValue ( { headers : { } } ) ;
43
+ mockAxios . get . mockResolvedValue ( mockResponse ) ;
44
+ } ) ;
45
+
46
+ afterEach ( ( ) => {
47
+ jest . clearAllMocks ( ) ;
48
+ } ) ;
49
+
50
+ describe ( "fetchPermitConditionDiff" , ( ) => {
51
+ it ( "should make API call with correct parameters" , async ( ) => {
52
+ await mockStore . dispatch ( fetchPermitConditionDiff ( mockParams ) ) ;
53
+
54
+ expect ( mockAxios . get ) . toHaveBeenCalledWith (
55
+ `${ ENVIRONMENT . apiUrl } ${ MINE } /${ mockParams . mineGuid } /permits/${ mockParams . permitGuid } /amendments/${ mockParams . amendmentGuid } /diff` ,
56
+ { headers : { } }
57
+ ) ;
58
+ } ) ;
59
+
60
+ it ( "should handle successful API response" , async ( ) => {
61
+ const result = await mockStore . dispatch ( fetchPermitConditionDiff ( mockParams ) ) ;
62
+
63
+ expect ( result . payload ) . toEqual ( {
64
+ key : mockParams . amendmentGuid ,
65
+ data : mockResponse . data . comparison
66
+ } ) ;
67
+ } ) ;
68
+
69
+ it ( "should handle API error" , async ( ) => {
70
+ const error = new Error ( "API Error" ) ;
71
+ mockAxios . get . mockRejectedValue ( error ) ;
72
+
73
+ const res = await mockStore . dispatch ( fetchPermitConditionDiff ( mockParams ) ) ;
74
+ expect ( res . error ?. message ) . toBe ( "API Error" ) ;
75
+ } ) ;
76
+ } ) ;
77
+
78
+ describe ( "getPermitConditionDiff selector" , ( ) => {
79
+ it ( "should return diff data for given amendmentGuid" , ( ) => {
80
+ const state = {
81
+ permitConditionDiff : {
82
+ diffs : {
83
+ "test-amendment-guid" : mockResponse . data . comparison
84
+ } ,
85
+ isLoading : false
86
+ }
87
+ } ;
88
+
89
+ const result = getPermitConditionDiff ( state , "test-amendment-guid" ) ;
90
+ expect ( result ) . toEqual ( mockResponse . data . comparison ) ;
91
+ } ) ;
92
+
93
+ it ( "should return undefined for non-existent amendmentGuid" , ( ) => {
94
+ const state = {
95
+ permitConditionDiff : {
96
+ diffs : { } ,
97
+ isLoading : false
98
+ }
99
+ } ;
100
+
101
+ const result = getPermitConditionDiff ( state , "non-existent-guid" ) ;
102
+ expect ( result ) . toBeUndefined ( ) ;
103
+ } ) ;
104
+ } ) ;
105
+ } ) ;
0 commit comments