@@ -2,16 +2,16 @@ import { DeepPartial } from '@terra-ui-packages/core-utils';
2
2
import { asMockedFn } from '@terra-ui-packages/test-utils' ;
3
3
import { act } from '@testing-library/react' ;
4
4
import { loadTerraUser } from 'src/auth/auth' ;
5
- import { Ajax } from 'src/libs/ajax' ;
6
- import { GroupRole } from 'src/libs/ajax/Groups ' ;
7
- import { SamUserTermsOfServiceDetails } from 'src/libs/ajax/TermsOfService' ;
8
- import { SamUserCombinedStateResponse , SamUserResponse } from 'src/libs/ajax/User' ;
9
- import { userStore } from 'src/libs/state' ;
5
+ import { Groups , GroupsContract } from 'src/libs/ajax/Groups ' ;
6
+ import { Metrics , MetricsContract } from 'src/libs/ajax/Metrics ' ;
7
+ import { SamUserTermsOfServiceDetails , TermsOfService , TermsOfServiceContract } from 'src/libs/ajax/TermsOfService' ;
8
+ import { SamUserResponse , User , UserContract } from 'src/libs/ajax/User' ;
9
+ import { oidcStore , TerraUserState , userStore } from 'src/libs/state' ;
10
10
11
- jest . mock ( 'src/libs/ajax' ) ;
12
-
13
- type AjaxExports = typeof import ( 'src/libs/ajax' ) ;
14
- type AjaxContract = ReturnType < AjaxExports [ 'Ajax' ] > ;
11
+ jest . mock ( 'src/libs/ajax/TermsOfService ' ) ;
12
+ jest . mock ( 'src/libs/ajax/User' ) ;
13
+ jest . mock ( 'src/libs/ajax/Groups ' ) ;
14
+ jest . mock ( 'src/libs/ajax/Metrics' ) ;
15
15
16
16
jest . mock ( 'react-notifications-component' , ( ) => {
17
17
return {
@@ -22,6 +22,12 @@ jest.mock('react-notifications-component', () => {
22
22
} ;
23
23
} ) ;
24
24
25
+ jest . spyOn ( oidcStore , 'get' ) . mockImplementation (
26
+ jest . fn ( ) . mockReturnValue ( {
27
+ userManager : { getUser : jest . fn ( ) } ,
28
+ } )
29
+ ) ;
30
+
25
31
const samUserDate = new Date ( '1970-01-01' ) ;
26
32
27
33
const mockSamUserResponse : SamUserResponse = {
@@ -86,43 +92,50 @@ const mockOrchestrationNihStatusResponse = {
86
92
linkExpireTime : 1234 ,
87
93
} ;
88
94
89
- const mockCurrentUserGroupMembership = {
90
- groupEmail : 'testGroupEmail' ,
91
- groupName : 'testGroupName' ,
92
- role : 'member' as GroupRole ,
93
- } ;
94
-
95
95
// TODO centralize Ajax mock setup so it can be reused across tests
96
96
describe ( 'a request to load a terra user' , ( ) => {
97
- // reset userStore state before each test
97
+ // Arrange (shared between tests for the success case)
98
+ const getUserAllowancesFunction = jest . fn ( ) . mockResolvedValue ( testSamUserAllowances ) ;
99
+ const getUserAttributesFunction = jest . fn ( ) . mockResolvedValue ( { marketingConsent : false } ) ;
100
+ const getUserTermsOfServiceDetailsFunction = jest . fn ( ) . mockResolvedValue ( mockSamUserTermsOfServiceDetails ) ;
101
+ const getEnterpriseFeaturesFunction = jest . fn ( ) . mockResolvedValue ( [ ] ) ;
102
+ const getSamUserResponseFunction = jest . fn ( ) . mockResolvedValue ( mockSamUserResponse ) ;
103
+ const getNihStatusFunction = jest . fn ( ) . mockResolvedValue ( mockOrchestrationNihStatusResponse ) ;
104
+ const getFenceStatusFunction = jest . fn ( ) . mockResolvedValue ( { } ) ;
105
+ const getSamUserCombinedStateMock = jest . fn ( ) . mockResolvedValue ( mockSamUserCombinedState ) ;
106
+
98
107
beforeEach ( ( ) => {
99
- userStore . reset ;
108
+ userStore . reset ( ) ;
109
+ } ) ;
110
+
111
+ // reset userStore state before each test
112
+ beforeAll ( ( ) => {
113
+ asMockedFn ( Metrics ) . mockReturnValue ( {
114
+ captureEvent : jest . fn ( ) ,
115
+ } as Partial < MetricsContract > as MetricsContract ) ;
116
+ asMockedFn ( User ) . mockReturnValue ( {
117
+ getSamUserCombinedState : getSamUserCombinedStateMock ,
118
+ getUserAllowances : getUserAllowancesFunction ,
119
+ getUserAttributes : getUserAttributesFunction ,
120
+ getUserTermsOfServiceDetails : getUserTermsOfServiceDetailsFunction ,
121
+ getEnterpriseFeatures : getEnterpriseFeaturesFunction ,
122
+ getSamUserResponse : getSamUserResponseFunction ,
123
+ getNihStatus : getNihStatusFunction ,
124
+ getFenceStatus : getFenceStatusFunction ,
125
+ profile : {
126
+ get : jest . fn ( ) . mockReturnValue ( mockTerraUserProfile ) ,
127
+ } ,
128
+ } as DeepPartial < UserContract > as UserContract ) ;
129
+
130
+ asMockedFn ( Groups ) . mockReturnValue ( {
131
+ list : jest . fn ( ) ,
132
+ } as Partial < GroupsContract > as GroupsContract ) ;
133
+
134
+ asMockedFn ( TermsOfService ) . mockReturnValue ( {
135
+ getUserTermsOfServiceDetails : jest . fn ( ) . mockReturnValue ( { } ) ,
136
+ } as Partial < TermsOfServiceContract > as TermsOfServiceContract ) ;
100
137
} ) ;
101
138
describe ( 'when successful' , ( ) => {
102
- // Arrange (shared between tests for the success case)
103
- const getSamUserCombinedStateMock = jest . fn ( ) . mockResolvedValue ( mockSamUserCombinedState ) ;
104
- const getNihStatusMock = jest . fn ( ) . mockResolvedValue ( mockOrchestrationNihStatusResponse ) ;
105
- const getFenceStatusMock = jest . fn ( ) . mockResolvedValue ( { } ) ;
106
-
107
- asMockedFn ( Ajax ) . mockImplementation (
108
- ( ) =>
109
- ( {
110
- User : {
111
- getSamUserCombinedState : getSamUserCombinedStateMock ,
112
- getNihStatus : getNihStatusMock ,
113
- getFenceStatus : getFenceStatusMock ,
114
- profile : {
115
- get : jest . fn ( ) . mockReturnValue ( mockTerraUserProfile ) ,
116
- } ,
117
- } ,
118
- TermsOfService : {
119
- getUserTermsOfServiceDetails : jest . fn ( ) . mockReturnValue ( { } ) ,
120
- } ,
121
- Groups : {
122
- list : jest . fn ( ) . mockReturnValue ( [ mockCurrentUserGroupMembership ] ) ,
123
- } ,
124
- } as DeepPartial < AjaxContract > as AjaxContract )
125
- ) ;
126
139
it ( 'should include a samUserResponse' , async ( ) => {
127
140
// Act
128
141
await act ( ( ) => loadTerraUser ( ) ) ;
@@ -144,20 +157,20 @@ describe('a request to load a terra user', () => {
144
157
// mock a failure to get samUserResponse
145
158
const getSamUserCombinedStateMockFailure = jest . fn ( ) . mockRejectedValue ( new Error ( 'unknown' ) ) ;
146
159
147
- asMockedFn ( Ajax ) . mockImplementation (
148
- ( ) =>
149
- ( {
150
- User : {
151
- getSamUserCombinedState : getSamUserCombinedStateMockFailure ,
152
- profile : {
153
- get : jest . fn ( ) . mockReturnValue ( mockTerraUserProfile ) ,
154
- } ,
155
- } ,
156
- TermsOfService : {
157
- getUserTermsOfServiceDetails : jest . fn ( ) . mockReturnValue ( { } ) ,
158
- } ,
159
- } as DeepPartial < AjaxContract > as AjaxContract )
160
- ) ;
160
+ asMockedFn ( User ) . mockReturnValue ( {
161
+ getUserAllowances : getUserAllowancesFunction ,
162
+ getUserAttributes : getUserAttributesFunction ,
163
+ getUserTermsOfServiceDetails : getUserTermsOfServiceDetailsFunction ,
164
+ getEnterpriseFeatures : getEnterpriseFeaturesFunction ,
165
+ getSamUserResponse : getSamUserResponseFunction ,
166
+ getSamUserCombinedState : getSamUserCombinedStateMockFailure ,
167
+
168
+ profile : {
169
+ get : jest . fn ( ) . mockReturnValue ( mockTerraUserProfile ) ,
170
+ } ,
171
+ getNihStatus : getNihStatusFunction ,
172
+ } as DeepPartial < UserContract > as UserContract ) ;
173
+
161
174
// Act, Assert
162
175
// this expect.assertions is here to prevent the test from passing if the error is not thrown
163
176
expect . assertions ( 1 ) ;
0 commit comments