@@ -24,7 +24,7 @@ const mockTeamsCollection = {
2424const mockDbInstance = {
2525 connect : jest . fn ( ) ,
2626 getClient : jest . fn ( ( ) => mockClient ) ,
27- getCollection : jest . fn ( ( name : string ) => {
27+ getCollection : jest . fn ( ( name ) => {
2828 if ( name === 'users' ) return mockUsersCollection ;
2929 if ( name === 'teams' ) return mockTeamsCollection ;
3030 return null ;
@@ -78,12 +78,14 @@ describe('Teams Create Handler', () => {
7878 email : 'leader@test.com' ,
7979 confirmed_team : false ,
8080 team_info : null ,
81+ registration_status : 'registered' ,
8182 } ;
8283
8384 const mockMemberUser = {
8485 email : 'member1@test.com' ,
8586 confirmed_team : false ,
8687 team_info : null ,
88+ registration_status : 'registered' ,
8789 } ;
8890
8991 it ( 'should successfully create team and send invitations' , async ( ) => {
@@ -381,4 +383,101 @@ describe('Teams Create Handler', () => {
381383 expect . objectContaining ( { session : mockSession } )
382384 ) ;
383385 } ) ;
386+
387+ it ( 'should return 400 when leader has unregistered status' , async ( ) => {
388+ const unregisteredLeader = {
389+ ...mockLeaderUser ,
390+ registration_status : 'unregistered' ,
391+ } ;
392+ mockUsersCollection . findOne . mockResolvedValue ( unregisteredLeader ) ;
393+
394+ const mockEvent = createEvent ( mockEventData , '/teams/create' , 'POST' ) ;
395+ const result = await main ( mockEvent , mockContext ) ;
396+
397+ expect ( result . statusCode ) . toBe ( 400 ) ;
398+ const body = JSON . parse ( result . body ) ;
399+ expect ( body . message ) . toBe (
400+ "User must be in 'registered', 'confirmation', or 'coming' state to create a team. Current state: unregistered"
401+ ) ;
402+ } ) ;
403+
404+ it ( 'should return 400 when leader has rejected status' , async ( ) => {
405+ const rejectedLeader = {
406+ ...mockLeaderUser ,
407+ registration_status : 'rejected' ,
408+ } ;
409+ mockUsersCollection . findOne . mockResolvedValue ( rejectedLeader ) ;
410+
411+ const mockEvent = createEvent ( mockEventData , '/teams/create' , 'POST' ) ;
412+ const result = await main ( mockEvent , mockContext ) ;
413+
414+ expect ( result . statusCode ) . toBe ( 400 ) ;
415+ const body = JSON . parse ( result . body ) ;
416+ expect ( body . message ) . toBe (
417+ "User must be in 'registered', 'confirmation', or 'coming' state to create a team. Current state: rejected"
418+ ) ;
419+ } ) ;
420+
421+ it ( 'should return 400 when some members have invalid registration status' , async ( ) => {
422+ const unregisteredMember = {
423+ ...mockMemberUser ,
424+ email : 'member1@test.com' ,
425+ registration_status : 'unregistered' ,
426+ } ;
427+
428+ const waitlistMember = {
429+ ...mockMemberUser ,
430+ email : 'member2@test.com' ,
431+ registration_status : 'waitlist' ,
432+ } ;
433+
434+ mockUsersCollection . findOne
435+ . mockResolvedValueOnce ( mockLeaderUser ) // Auth user lookup
436+ . mockResolvedValueOnce ( unregisteredMember ) // member1@test .com lookup
437+ . mockResolvedValueOnce ( waitlistMember ) ; // member2@test .com lookup
438+
439+ const mockEvent = createEvent ( mockEventData , '/teams/create' , 'POST' ) ;
440+ const result = await main ( mockEvent , mockContext ) ;
441+
442+ expect ( result . statusCode ) . toBe ( 400 ) ;
443+ const body = JSON . parse ( result . body ) ;
444+ expect ( body . message ) . toBe ( 'Some users have invalid registration status for team creation' ) ;
445+ expect ( body . invalid_status_users ) . toEqual ( [
446+ { email : 'member1@test.com' , status : 'unregistered' } ,
447+ { email : 'member2@test.com' , status : 'waitlist' } ,
448+ ] ) ;
449+ expect ( body . required_status ) . toEqual ( [ 'registered' , 'confirmation' , 'coming' ] ) ;
450+ } ) ;
451+
452+ it ( 'should successfully create team when all users have valid registration statuses' , async ( ) => {
453+ const confirmationLeader = {
454+ ...mockLeaderUser ,
455+ registration_status : 'confirmation' ,
456+ } ;
457+
458+ const comingMember = {
459+ ...mockMemberUser ,
460+ email : 'member1@test.com' ,
461+ registration_status : 'coming' ,
462+ } ;
463+
464+ const registeredMember = {
465+ ...mockMemberUser ,
466+ email : 'member2@test.com' ,
467+ registration_status : 'registered' ,
468+ } ;
469+
470+ mockUsersCollection . findOne
471+ . mockResolvedValueOnce ( confirmationLeader ) // Auth user lookup
472+ . mockResolvedValueOnce ( comingMember ) // member1@test .com lookup
473+ . mockResolvedValueOnce ( registeredMember ) ; // member2@test .com lookup
474+
475+ const mockEvent = createEvent ( mockEventData , '/teams/create' , 'POST' ) ;
476+ const result = await main ( mockEvent , mockContext ) ;
477+
478+ expect ( result . statusCode ) . toBe ( 200 ) ;
479+ const body = JSON . parse ( result . body ) ;
480+ expect ( body . message ) . toBe ( 'Team created successfully' ) ;
481+ expect ( body . team_id ) . toBeDefined ( ) ;
482+ } ) ;
384483} ) ;
0 commit comments