@@ -15,6 +15,9 @@ import {
15
15
16
16
import type { GenerateLinkProperties , User } from '../src/lib/types'
17
17
18
+ const INVALID_EMAIL = 'xx:;[email protected] '
19
+ const INVALID_USER_ID = 'invalid-uuid'
20
+
18
21
describe ( 'GoTrueAdminApi' , ( ) => {
19
22
describe ( 'User creation' , ( ) => {
20
23
test ( 'createUser() should create a new user' , async ( ) => {
@@ -78,6 +81,17 @@ describe('GoTrueAdminApi', () => {
78
81
expect ( data . user ?. app_metadata ) . toHaveProperty ( 'provider' )
79
82
expect ( data . user ?. app_metadata ) . toHaveProperty ( 'providers' )
80
83
} )
84
+
85
+ test ( 'createUser() returns AuthError when email is invalid' , async ( ) => {
86
+ const { error, data } = await serviceRoleApiClient . createUser ( {
87
+ email : INVALID_EMAIL ,
88
+ password : 'password123' ,
89
+ } )
90
+
91
+ expect ( error ) . not . toBeNull ( )
92
+ expect ( error ?. message ) . toMatch ( 'Unable to validate email address: invalid format' )
93
+ expect ( data . user ) . toBeNull ( )
94
+ } )
81
95
} )
82
96
83
97
describe ( 'User fetch' , ( ) => {
@@ -136,6 +150,13 @@ describe('GoTrueAdminApi', () => {
136
150
expect ( foundUser ) . not . toBeUndefined ( )
137
151
expect ( foundUser . user ?. email ) . toEqual ( email )
138
152
} )
153
+
154
+ test ( 'getUserById() returns AuthError when user id is invalid' , async ( ) => {
155
+ const { error, data } = await serviceRoleApiClient . getUserById ( INVALID_USER_ID )
156
+
157
+ expect ( error ) . not . toBeNull ( )
158
+ expect ( data . user ) . toBeNull ( )
159
+ } )
139
160
} )
140
161
141
162
describe ( 'User updates' , ( ) => {
@@ -260,6 +281,13 @@ describe('GoTrueAdminApi', () => {
260
281
expect ( emails . length ) . toBeGreaterThan ( 0 )
261
282
expect ( emails ) . not . toContain ( email )
262
283
} )
284
+
285
+ test ( 'deleteUser() returns AuthError when user id is invalid' , async ( ) => {
286
+ const { error, data } = await serviceRoleApiClient . deleteUser ( INVALID_USER_ID )
287
+
288
+ expect ( error ) . not . toBeNull ( )
289
+ expect ( data . user ) . toBeNull ( )
290
+ } )
263
291
} )
264
292
265
293
describe ( 'User registration' , ( ) => {
@@ -362,6 +390,27 @@ describe('GoTrueAdminApi', () => {
362
390
expect ( data . user ) . toHaveProperty ( 'invited_at' )
363
391
expect ( data . user ?. invited_at ) . toBeDefined ( )
364
392
} )
393
+
394
+ test ( 'inviteUserByEmail() returns AuthError when email is invalid' , async ( ) => {
395
+ const { error, data } = await serviceRoleApiClient . inviteUserByEmail ( INVALID_EMAIL )
396
+
397
+ expect ( error ) . not . toBeNull ( )
398
+ expect ( error ?. message ) . toMatch ( 'Unable to validate email address: invalid format' )
399
+ expect ( data . user ) . toBeNull ( )
400
+ } )
401
+
402
+ test ( 'generateLink() returns AuthError when email is invalid' , async ( ) => {
403
+ const { error, data } = await serviceRoleApiClient . generateLink ( {
404
+ type : 'signup' ,
405
+ email : INVALID_EMAIL ,
406
+ password : 'password123' ,
407
+ } )
408
+
409
+ expect ( error ) . not . toBeNull ( )
410
+ expect ( error ?. message ) . toMatch ( 'Unable to validate email address: invalid format' )
411
+ expect ( data . user ) . toBeNull ( )
412
+ expect ( data . properties ) . toBeNull ( )
413
+ } )
365
414
} )
366
415
367
416
describe ( 'User authentication' , ( ) => {
@@ -425,4 +474,87 @@ describe('GoTrueAdminApi', () => {
425
474
} )
426
475
} )
427
476
} )
477
+
478
+ describe ( 'List Users' , ( ) => {
479
+ test ( 'listUsers() returns AuthError when page is invalid' , async ( ) => {
480
+ const { error, data } = await serviceRoleApiClient . listUsers ( {
481
+ page : - 1 ,
482
+ perPage : 10
483
+ } )
484
+
485
+ expect ( error ) . not . toBeNull ( )
486
+ expect ( data . users ) . toEqual ( [ ] )
487
+ } )
488
+ } )
489
+
490
+ describe ( 'Update User' , ( ) => {
491
+ test ( 'updateUserById() returns AuthError when user id is invalid' , async ( ) => {
492
+ const { error, data } = await serviceRoleApiClient . updateUserById ( INVALID_USER_ID , {
493
+
494
+ } )
495
+
496
+ expect ( error ) . not . toBeNull ( )
497
+ expect ( data . user ) . toBeNull ( )
498
+ } )
499
+ } )
500
+
501
+ describe ( 'MFA Admin' , ( ) => {
502
+ test ( 'mfa factor management: add, list and delete' , async ( ) => {
503
+ const { email, password } = mockUserCredentials ( )
504
+
505
+ const { error : signUpError , data : signUpData } = await authClientWithSession . signUp ( {
506
+ email,
507
+ password,
508
+ } )
509
+ expect ( signUpError ) . toBeNull ( )
510
+ expect ( signUpData . session ) . not . toBeNull ( )
511
+
512
+ const uid = signUpData . user ?. id || ''
513
+ expect ( uid ) . toBeTruthy ( )
514
+
515
+ const { error : enrollError } = await authClientWithSession . mfa . enroll ( {
516
+ factorType : 'totp'
517
+ } )
518
+ expect ( enrollError ) . toBeNull ( )
519
+
520
+ const { data, error } = await serviceRoleApiClient . mfa . listFactors ( { userId : uid } )
521
+
522
+ expect ( error ) . toBeNull ( )
523
+ expect ( data ) . not . toBeNull ( )
524
+ expect ( Array . isArray ( data ?. factors ) ) . toBe ( true )
525
+ expect ( data ?. factors . length ) . toBeGreaterThan ( 0 )
526
+
527
+ const factorId = data ?. factors [ 0 ] . id
528
+ expect ( factorId ) . toBeDefined ( )
529
+ const { data : deletedData , error : deletedError } = await serviceRoleApiClient . mfa . deleteFactor ( {
530
+ userId : uid ,
531
+ id : factorId !
532
+ } )
533
+ expect ( deletedError ) . toBeNull ( )
534
+ expect ( deletedData ) . not . toBeNull ( )
535
+ const deletedId = ( deletedData as any ) ?. data ?. id
536
+ console . log ( 'deletedId:' , deletedId )
537
+ expect ( deletedId ) . toEqual ( factorId )
538
+
539
+ const { data : latestData , error : latestError } = await serviceRoleApiClient . mfa . listFactors ( { userId : uid } )
540
+ expect ( latestError ) . toBeNull ( )
541
+ expect ( latestData ) . not . toBeNull ( )
542
+ expect ( Array . isArray ( latestData ?. factors ) ) . toBe ( true )
543
+ expect ( latestData ?. factors . length ) . toEqual ( 0 )
544
+ } )
545
+
546
+
547
+ test ( 'mfa.listFactors returns AuthError for invalid user' , async ( ) => {
548
+ const { data, error } = await serviceRoleApiClient . mfa . listFactors ( { userId : INVALID_USER_ID } )
549
+ expect ( data ) . toBeNull ( )
550
+ expect ( error ) . not . toBeNull ( )
551
+ } )
552
+
553
+ test ( 'mfa.deleteFactors returns AuthError for invalid user' , async ( ) => {
554
+ const { data, error } = await serviceRoleApiClient . mfa . deleteFactor ( { userId : INVALID_USER_ID , id : '1' } )
555
+ expect ( data ) . toBeNull ( )
556
+ expect ( error ) . not . toBeNull ( )
557
+ } )
558
+
559
+ } )
428
560
} )
0 commit comments