@@ -15,6 +15,9 @@ import {
1515
1616import type { GenerateLinkProperties , User } from '../src/lib/types'
1717
18+ const INVALID_EMAIL = 'xx:;[email protected] ' 19+ const INVALID_USER_ID = 'invalid-uuid'
20+
1821describe ( 'GoTrueAdminApi' , ( ) => {
1922 describe ( 'User creation' , ( ) => {
2023 test ( 'createUser() should create a new user' , async ( ) => {
@@ -78,6 +81,17 @@ describe('GoTrueAdminApi', () => {
7881 expect ( data . user ?. app_metadata ) . toHaveProperty ( 'provider' )
7982 expect ( data . user ?. app_metadata ) . toHaveProperty ( 'providers' )
8083 } )
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+ } )
8195 } )
8296
8397 describe ( 'User fetch' , ( ) => {
@@ -136,6 +150,13 @@ describe('GoTrueAdminApi', () => {
136150 expect ( foundUser ) . not . toBeUndefined ( )
137151 expect ( foundUser . user ?. email ) . toEqual ( email )
138152 } )
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+ } )
139160 } )
140161
141162 describe ( 'User updates' , ( ) => {
@@ -260,6 +281,13 @@ describe('GoTrueAdminApi', () => {
260281 expect ( emails . length ) . toBeGreaterThan ( 0 )
261282 expect ( emails ) . not . toContain ( email )
262283 } )
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+ } )
263291 } )
264292
265293 describe ( 'User registration' , ( ) => {
@@ -362,6 +390,27 @@ describe('GoTrueAdminApi', () => {
362390 expect ( data . user ) . toHaveProperty ( 'invited_at' )
363391 expect ( data . user ?. invited_at ) . toBeDefined ( )
364392 } )
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+ } )
365414 } )
366415
367416 describe ( 'User authentication' , ( ) => {
@@ -425,4 +474,87 @@ describe('GoTrueAdminApi', () => {
425474 } )
426475 } )
427476 } )
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+ } )
428560} )
0 commit comments