@@ -57,6 +57,9 @@ const BEFORE_SMS_TRIGGER = {
5757 options : { } ,
5858} ;
5959
60+ const USER_CREATED_EVENT = "google.firebase.auth.user.v2.created" ;
61+ const USER_DELETED_EVENT = "google.firebase.auth.user.v2.deleted" ;
62+
6063const opts : identity . BlockingOptions = {
6164 accessToken : true ,
6265 refreshToken : false ,
@@ -65,6 +68,14 @@ const opts: identity.BlockingOptions = {
6568} ;
6669
6770describe ( "identity" , ( ) => {
71+ beforeEach ( ( ) => {
72+ process . env . GCLOUD_PROJECT = "aProject" ;
73+ } ) ;
74+
75+ afterEach ( ( ) => {
76+ delete process . env . GCLOUD_PROJECT ;
77+ } ) ;
78+
6879 describe ( "beforeUserCreated" , ( ) => {
6980 it ( "should accept a handler" , ( ) => {
7081 const fn = identity . beforeUserCreated ( ( ) => Promise . resolve ( ) ) ;
@@ -467,4 +478,158 @@ describe("identity", () => {
467478 } ) ;
468479 } ) ;
469480 } ) ;
481+
482+ describe ( "onUserCreated" , ( ) => {
483+ it ( "should create a minimal trigger/endpoint" , ( ) => {
484+ const result = identity . onUserCreated ( ( ) => Promise . resolve ( ) ) ;
485+
486+
487+ expect ( result . __endpoint ) . to . deep . equal ( {
488+ ...MINIMAL_V2_ENDPOINT ,
489+ platform : "gcfv2" ,
490+ labels : { } ,
491+ eventTrigger : {
492+ eventType : USER_CREATED_EVENT ,
493+ retry : false ,
494+ eventFilters : { } ,
495+ } ,
496+ } ) ;
497+ } ) ;
498+
499+ it ( "should create a complex trigger/endpoint with tenantId" , ( ) => {
500+ const result = identity . onUserCreated (
501+ { ...opts , tenantId : "tid" , retry : true } ,
502+ ( ) => Promise . resolve ( )
503+ ) ;
504+
505+ expect ( result . __endpoint ) . to . deep . equal ( {
506+ ...MINIMAL_V2_ENDPOINT ,
507+ platform : "gcfv2" ,
508+ minInstances : 1 ,
509+ region : [ REGION ] ,
510+ labels : { } ,
511+ eventTrigger : {
512+ eventType : USER_CREATED_EVENT ,
513+ retry : true ,
514+ eventFilters : {
515+ tenantId : "tid" ,
516+ } ,
517+ } ,
518+ } ) ;
519+ } ) ;
520+ } ) ;
521+
522+ describe ( "onUserDeleted" , ( ) => {
523+ it ( "should create a minimal trigger/endpoint" , ( ) => {
524+ const result = identity . onUserDeleted ( ( ) => Promise . resolve ( ) ) ;
525+
526+
527+ expect ( result . __endpoint ) . to . deep . equal ( {
528+ ...MINIMAL_V2_ENDPOINT ,
529+ platform : "gcfv2" ,
530+ labels : { } ,
531+ eventTrigger : {
532+ eventType : USER_DELETED_EVENT ,
533+ retry : false ,
534+ eventFilters : { } ,
535+ } ,
536+ } ) ;
537+ } ) ;
538+
539+ it ( "should create a complex trigger/endpoint with tenantId" , ( ) => {
540+ const result = identity . onUserDeleted (
541+ { ...opts , tenantId : "tid" , retry : true } ,
542+ ( ) => Promise . resolve ( )
543+ ) ;
544+
545+ expect ( result . __endpoint ) . to . deep . equal ( {
546+ ...MINIMAL_V2_ENDPOINT ,
547+ platform : "gcfv2" ,
548+ minInstances : 1 ,
549+ region : [ REGION ] ,
550+ labels : { } ,
551+ eventTrigger : {
552+ eventType : USER_DELETED_EVENT ,
553+ retry : true ,
554+ eventFilters : {
555+ tenantId : "tid" ,
556+ } ,
557+ } ,
558+ } ) ;
559+ } ) ;
560+ } ) ;
561+
562+ describe ( "onOperation" , ( ) => {
563+ it ( "should unwrap data.value if present" , async ( ) => {
564+ const handler = ( event : identity . AuthEvent < identity . User > ) => {
565+ return event . data . uid ;
566+ } ;
567+ const func = identity . onUserCreated ( handler ) ;
568+
569+ const event = {
570+ specversion : "1.0" ,
571+ id : "event-id" ,
572+ source : "firebase-auth" ,
573+ type : "google.firebase.auth.user.v2.created" ,
574+ time : "2023-10-31T00:00:00Z" ,
575+ data : {
576+ value : {
577+ uid : "test-uid" ,
578+ } ,
579+ } ,
580+ } ;
581+
582+ const result = await func ( event as any ) ;
583+ expect ( result ) . to . equal ( "test-uid" ) ;
584+ } ) ;
585+
586+ it ( "should unwrap data.oldValue if present" , async ( ) => {
587+ const handler = ( event : identity . AuthEvent < identity . User > ) => {
588+ return event . data . uid ;
589+ } ;
590+ const func = identity . onUserDeleted ( handler ) ;
591+
592+ const event = {
593+ specversion : "1.0" ,
594+ id : "event-id" ,
595+ source : "firebase-auth" ,
596+ type : "google.firebase.auth.user.v2.deleted" ,
597+ time : "2023-10-31T00:00:00Z" ,
598+ data : {
599+ oldValue : {
600+ uid : "deleted-uid" ,
601+ 602+ } ,
603+ } ,
604+ } ;
605+
606+ const result = await func ( event as any ) ;
607+ expect ( result ) . to . equal ( "deleted-uid" ) ;
608+ } ) ;
609+
610+ it ( "should normalize user data (e.g. createTime -> creationTime)" , async ( ) => {
611+ const handler = ( event : identity . AuthEvent < identity . User > ) => {
612+ return event . data . metadata . creationTime ;
613+ } ;
614+ const func = identity . onUserCreated ( handler ) ;
615+
616+ const event = {
617+ specversion : "1.0" ,
618+ id : "event-id" ,
619+ source : "firebase-auth" ,
620+ type : "google.firebase.auth.user.v2.created" ,
621+ time : "2023-10-31T00:00:00Z" ,
622+ data : {
623+ uid : "test-uid" ,
624+ metadata : {
625+ createTime : "2023-10-31T00:00:00Z" ,
626+ lastSignInTime : "2023-10-31T01:00:00Z" ,
627+ } ,
628+ } ,
629+ } ;
630+
631+ const result = await func ( event as any ) ;
632+ expect ( result ) . to . equal ( "Tue, 31 Oct 2023 00:00:00 GMT" ) ;
633+ } ) ;
634+ } ) ;
470635} ) ;
0 commit comments