1
1
const { NIL : SYSTEM_USER } = require ( 'uuid' ) ;
2
2
3
3
const { resetModel, trxBuilder } = require ( '../../common/helper' ) ;
4
+ const utils = require ( '../../../src/db/models/utils' ) ;
4
5
const IdentityProvider = require ( '../../../src/db/models/tables/identityProvider' ) ;
5
6
const User = require ( '../../../src/db/models/tables/user' ) ;
6
7
@@ -23,10 +24,12 @@ jest.mock('../../../src/db/models/tables/user', () => ({
23
24
24
25
first : jest . fn ( ) ,
25
26
findById : jest . fn ( ) ,
27
+ insert : jest . fn ( ) ,
26
28
insertAndFetch : jest . fn ( ) ,
27
29
modify : jest . fn ( ) ,
28
30
patchAndFetchById : jest . fn ( ) ,
29
31
query : jest . fn ( ) ,
32
+ returning : jest . fn ( ) ,
30
33
select : jest . fn ( ) ,
31
34
throwIfNotFound : jest . fn ( ) ,
32
35
where : jest . fn ( ) ,
@@ -106,20 +109,21 @@ describe('createUser', () => {
106
109
} ) ;
107
110
108
111
it ( 'Creates an idp if no matching idp exists in database' , async ( ) => {
112
+ User . first . mockResolvedValue ( undefined ) ;
109
113
readIdpSpy . mockResolvedValue ( false ) ;
110
114
111
115
await service . createUser ( user ) ;
112
116
113
117
expect ( readIdpSpy ) . toHaveBeenCalledTimes ( 1 ) ;
114
- expect ( readIdpSpy ) . toHaveBeenCalledWith ( 'idir' ) ;
118
+ expect ( readIdpSpy ) . toHaveBeenCalledWith ( 'idir' , userTrx ) ;
115
119
expect ( createIdpSpy ) . toHaveBeenCalledTimes ( 1 ) ;
116
- expect ( createIdpSpy ) . toHaveBeenCalledWith ( 'idir' , expect . anything ( ) ) ;
120
+ expect ( createIdpSpy ) . toHaveBeenCalledWith ( 'idir' , userTrx ) ;
117
121
118
122
expect ( User . startTransaction ) . toHaveBeenCalledTimes ( 1 ) ;
119
- expect ( User . query ) . toHaveBeenCalledTimes ( 1 ) ;
123
+ expect ( User . query ) . toHaveBeenCalledTimes ( 2 ) ;
120
124
expect ( User . query ) . toHaveBeenCalledWith ( expect . anything ( ) ) ;
121
- expect ( User . insertAndFetch ) . toHaveBeenCalledTimes ( 1 ) ;
122
- expect ( User . insertAndFetch ) . toBeCalledWith (
125
+ expect ( User . insert ) . toHaveBeenCalledTimes ( 1 ) ;
126
+ expect ( User . insert ) . toBeCalledWith (
123
127
expect . objectContaining ( {
124
128
...user ,
125
129
userId : expect . any ( String )
@@ -129,18 +133,19 @@ describe('createUser', () => {
129
133
} ) ;
130
134
131
135
it ( 'Skips creating an idp if matching idp already exists in database' , async ( ) => {
136
+ User . first . mockResolvedValue ( false ) ;
132
137
readIdpSpy . mockReturnValue ( true ) ;
138
+
133
139
await service . createUser ( user ) ;
134
140
135
141
expect ( readIdpSpy ) . toHaveBeenCalledTimes ( 1 ) ;
136
- expect ( readIdpSpy ) . toHaveBeenCalledWith ( 'idir' ) ;
137
142
expect ( createIdpSpy ) . toHaveBeenCalledTimes ( 0 ) ;
138
143
139
144
expect ( User . startTransaction ) . toHaveBeenCalledTimes ( 1 ) ;
140
- expect ( User . query ) . toHaveBeenCalledTimes ( 1 ) ;
145
+ expect ( User . query ) . toHaveBeenCalledTimes ( 2 ) ;
141
146
expect ( User . query ) . toHaveBeenCalledWith ( expect . anything ( ) ) ;
142
- expect ( User . insertAndFetch ) . toHaveBeenCalledTimes ( 1 ) ;
143
- expect ( User . insertAndFetch ) . toBeCalledWith (
147
+ expect ( User . insert ) . toHaveBeenCalledTimes ( 1 ) ;
148
+ expect ( User . insert ) . toBeCalledWith (
144
149
expect . objectContaining ( {
145
150
...user ,
146
151
userId : expect . any ( String )
@@ -159,13 +164,7 @@ describe('createUser', () => {
159
164
expect ( User . startTransaction ) . toHaveBeenCalledTimes ( 1 ) ;
160
165
expect ( User . query ) . toHaveBeenCalledTimes ( 1 ) ;
161
166
expect ( User . query ) . toHaveBeenCalledWith ( expect . anything ( ) ) ;
162
- expect ( User . insertAndFetch ) . toHaveBeenCalledTimes ( 1 ) ;
163
- expect ( User . insertAndFetch ) . toBeCalledWith (
164
- expect . objectContaining ( {
165
- ...systemUser ,
166
- userId : expect . any ( String )
167
- } )
168
- ) ;
167
+ expect ( User . insert ) . toHaveBeenCalledTimes ( 0 ) ;
169
168
expect ( userTrx . commit ) . toHaveBeenCalledTimes ( 1 ) ;
170
169
} ) ;
171
170
} ) ;
@@ -202,64 +201,75 @@ describe('listIdps', () => {
202
201
203
202
describe ( 'login' , ( ) => {
204
203
const createUserSpy = jest . spyOn ( service , 'createUser' ) ;
205
- const updateUserSpy = jest . spyOn ( service , 'updateUser' ) ;
206
204
const tokenToUserSpy = jest . spyOn ( service , '_tokenToUser' ) ;
205
+ const trxWrapperSpy = jest . spyOn ( utils , 'trxWrapper' ) ;
206
+ const updateUserSpy = jest . spyOn ( service , 'updateUser' ) ;
207
207
208
208
beforeEach ( ( ) => {
209
- tokenToUserSpy . mockReset ( ) ;
210
209
createUserSpy . mockReset ( ) ;
210
+ tokenToUserSpy . mockReset ( ) ;
211
+ trxWrapperSpy . mockReset ( ) ;
211
212
updateUserSpy . mockReset ( ) ;
212
213
213
214
service . _tokenToUser = jest . fn ( ) . mockReturnValue ( user ) ;
214
215
} ) ;
215
216
216
217
afterAll ( ( ) => {
217
- tokenToUserSpy . mockRestore ( ) ;
218
218
createUserSpy . mockRestore ( ) ;
219
+ tokenToUserSpy . mockRestore ( ) ;
220
+ trxWrapperSpy . mockReset ( ) ;
219
221
updateUserSpy . mockRestore ( ) ;
220
222
} ) ;
221
223
222
224
it ( 'Adds a new user record' , async ( ) => {
223
225
User . first . mockResolvedValue ( undefined ) ;
226
+ createUserSpy . mockResolvedValue ( user ) ;
227
+ trxWrapperSpy . mockImplementation ( callback => callback ( { } ) ) ;
228
+
224
229
await service . login ( token ) ;
225
230
226
231
expect ( User . query ) . toHaveBeenCalledTimes ( 1 ) ;
227
- expect ( User . query ) . toHaveBeenCalledWith ( ) ;
232
+ expect ( User . query ) . toHaveBeenCalledWith ( expect . any ( Object ) ) ;
228
233
expect ( User . where ) . toHaveBeenCalledTimes ( 1 ) ;
229
- expect ( User . where ) . toHaveBeenCalledWith ( ' identityId' , user . identityId ) ;
234
+ expect ( User . where ) . toHaveBeenCalledWith ( { identityId : user . identityId , idp : user . idp } ) ;
230
235
expect ( User . first ) . toHaveBeenCalledTimes ( 1 ) ;
231
236
expect ( User . first ) . toHaveBeenCalledWith ( ) ;
232
237
233
238
expect ( createUserSpy ) . toHaveBeenCalledTimes ( 1 ) ;
234
- expect ( createUserSpy ) . toHaveBeenCalledWith ( user ) ;
239
+ expect ( createUserSpy ) . toHaveBeenCalledWith ( user , expect . any ( Object ) ) ;
235
240
expect ( updateUserSpy ) . toHaveBeenCalledTimes ( 0 ) ;
236
241
} ) ;
237
242
238
243
it ( 'Updates an existing user record' , async ( ) => {
244
+ trxWrapperSpy . mockImplementation ( callback => callback ( { } ) ) ;
239
245
User . first . mockResolvedValue ( { ...user , userId : 'a96f2809-d6f4-4cef-a02a-3f72edff06d7' } ) ;
246
+
240
247
await service . login ( token ) ;
241
248
242
249
expect ( User . query ) . toHaveBeenCalledTimes ( 1 ) ;
243
- expect ( User . query ) . toHaveBeenCalledWith ( ) ;
250
+ expect ( User . query ) . toHaveBeenCalledWith ( expect . any ( Object ) ) ;
244
251
expect ( User . where ) . toHaveBeenCalledTimes ( 1 ) ;
245
- expect ( User . where ) . toHaveBeenCalledWith ( ' identityId' , user . identityId ) ;
252
+ expect ( User . where ) . toHaveBeenCalledWith ( { identityId : user . identityId , idp : user . idp } ) ;
246
253
expect ( User . first ) . toHaveBeenCalledTimes ( 1 ) ;
247
254
expect ( User . first ) . toHaveBeenCalledWith ( ) ;
248
255
249
256
expect ( createUserSpy ) . toHaveBeenCalledTimes ( 0 ) ;
250
257
expect ( updateUserSpy ) . toHaveBeenCalledTimes ( 1 ) ;
251
- expect ( updateUserSpy ) . toHaveBeenCalledWith ( 'a96f2809-d6f4-4cef-a02a-3f72edff06d7' , expect . objectContaining ( user ) ) ;
258
+ expect ( updateUserSpy ) . toHaveBeenCalledWith ( 'a96f2809-d6f4-4cef-a02a-3f72edff06d7' , expect . objectContaining ( user ) , expect . any ( Object ) ) ;
252
259
} ) ;
253
260
} ) ;
254
261
255
262
describe ( 'readIdp' , ( ) => {
256
- it ( 'Query identityProvider by code' , ( ) => {
257
- service . readIdp ( 'idir' ) ;
263
+ it ( 'Query identityProvider by code' , async ( ) => {
264
+ await service . readIdp ( 'idir' ) ;
258
265
266
+ expect ( IdentityProvider . startTransaction ) . toHaveBeenCalledTimes ( 1 ) ;
267
+ expect ( IdentityProvider . startTransaction ) . toHaveBeenCalledWith ( ) ;
259
268
expect ( IdentityProvider . query ) . toHaveBeenCalledTimes ( 1 ) ;
260
- expect ( IdentityProvider . query ) . toHaveBeenCalledWith ( ) ;
269
+ expect ( IdentityProvider . query ) . toHaveBeenCalledWith ( identityProviderTrx ) ;
261
270
expect ( IdentityProvider . findById ) . toHaveBeenCalledTimes ( 1 ) ;
262
271
expect ( IdentityProvider . findById ) . toHaveBeenCalledWith ( 'idir' ) ;
272
+ expect ( identityProviderTrx . commit ) . toHaveBeenCalledTimes ( 1 ) ;
263
273
} ) ;
264
274
} ) ;
265
275
0 commit comments