@@ -501,6 +501,19 @@ public async Task CreateUserShortPassword()
501
501
Assert . Null ( handler . Request ) ;
502
502
}
503
503
504
+ [ Fact ]
505
+ public async Task CreateUserIncorrectResponse ( )
506
+ {
507
+ var handler = new MockMessageHandler ( )
508
+ {
509
+ Response = "{}" ,
510
+ } ;
511
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
512
+
513
+ var args = new UserRecordArgs ( ) ;
514
+ await Assert . ThrowsAsync < FirebaseException > ( async ( ) => await userManager . CreateUserAsync ( args ) ) ;
515
+ }
516
+
504
517
[ Fact ]
505
518
public async Task UpdateUser ( )
506
519
{
@@ -513,13 +526,114 @@ public async Task UpdateUser()
513
526
{ "package" , "gold" } ,
514
527
} ;
515
528
529
+ await userManager . UpdateUserAsync ( new UserRecordArgs ( )
530
+ {
531
+ CustomClaims = customClaims ,
532
+ Disabled = true ,
533
+ DisplayName = "Test User" ,
534
+
535
+ EmailVerified = true ,
536
+ Password = "secret" ,
537
+ PhoneNumber = "+1234567890" ,
538
+ PhotoUrl = "https://example.com/user.png" ,
539
+ Uid = "user1" ,
540
+ } ) ;
541
+
542
+ var request = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( handler . Request ) ;
543
+ Assert . Equal ( "user1" , request [ "localId" ] ) ;
544
+ Assert . True ( ( bool ) request [ "disableUser" ] ) ;
545
+ Assert . Equal ( "Test User" , request [ "displayName" ] ) ;
546
+ Assert . Equal ( "[email protected] " , request [ "email" ] ) ;
547
+ Assert . True ( ( bool ) request [ "emailVerified" ] ) ;
548
+ Assert . Equal ( "secret" , request [ "password" ] ) ;
549
+ Assert . Equal ( "+1234567890" , request [ "phoneNumber" ] ) ;
550
+ Assert . Equal ( "https://example.com/user.png" , request [ "photoUrl" ] ) ;
551
+
552
+ var claims = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( ( string ) request [ "customAttributes" ] ) ;
553
+ Assert . True ( ( bool ) claims [ "admin" ] ) ;
554
+ Assert . Equal ( 4L , claims [ "level" ] ) ;
555
+ Assert . Equal ( "gold" , claims [ "package" ] ) ;
556
+ }
557
+
558
+ [ Fact ]
559
+ public async Task UpdateUserPartial ( )
560
+ {
561
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
562
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
563
+
564
+ await userManager . UpdateUserAsync ( new UserRecordArgs ( )
565
+ {
566
+ EmailVerified = true ,
567
+ Uid = "user1" ,
568
+ } ) ;
569
+
570
+ var request = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( handler . Request ) ;
571
+ Assert . Equal ( 2 , request . Count ) ;
572
+ Assert . Equal ( "user1" , request [ "localId" ] ) ;
573
+ Assert . True ( ( bool ) request [ "emailVerified" ] ) ;
574
+ }
575
+
576
+ [ Fact ]
577
+ public async Task UpdateUserRemoveAttributes ( )
578
+ {
579
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
580
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
581
+
582
+ await userManager . UpdateUserAsync ( new UserRecordArgs ( )
583
+ {
584
+ DisplayName = null ,
585
+ PhotoUrl = null ,
586
+ Uid = "user1" ,
587
+ } ) ;
588
+
589
+ var request = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( handler . Request ) ;
590
+ Assert . Equal ( 2 , request . Count ) ;
591
+ Assert . Equal ( "user1" , request [ "localId" ] ) ;
592
+ Assert . Equal (
593
+ new JArray ( ) { "DISPLAY_NAME" , "PHOTO_URL" } ,
594
+ request [ "deleteAttribute" ] ) ;
595
+ }
596
+
597
+ [ Fact ]
598
+ public async Task UpdateUserRemoveProviders ( )
599
+ {
600
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
601
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
602
+
603
+ await userManager . UpdateUserAsync ( new UserRecordArgs ( )
604
+ {
605
+ PhoneNumber = null ,
606
+ Uid = "user1" ,
607
+ } ) ;
608
+
609
+ var request = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( handler . Request ) ;
610
+ Assert . Equal ( 2 , request . Count ) ;
611
+ Assert . Equal ( "user1" , request [ "localId" ] ) ;
612
+ Assert . Equal (
613
+ new JArray ( ) { "phone" } ,
614
+ request [ "deleteProvider" ] ) ;
615
+ }
616
+
617
+ [ Fact ]
618
+ public async Task UpdateUserSetCustomClaims ( )
619
+ {
620
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
621
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
622
+ var customClaims = new Dictionary < string , object > ( )
623
+ {
624
+ { "admin" , true } ,
625
+ { "level" , 4 } ,
626
+ { "package" , "gold" } ,
627
+ } ;
628
+
516
629
await userManager . UpdateUserAsync ( new UserRecordArgs ( )
517
630
{
518
631
Uid = "user1" ,
519
632
CustomClaims = customClaims ,
520
633
} ) ;
521
634
522
635
var request = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( handler . Request ) ;
636
+ Assert . Equal ( 2 , request . Count ) ;
523
637
Assert . Equal ( "user1" , request [ "localId" ] ) ;
524
638
var claims = NewtonsoftJsonSerializer . Instance . Deserialize < JObject > ( ( string ) request [ "customAttributes" ] ) ;
525
639
Assert . True ( ( bool ) claims [ "admin" ] ) ;
@@ -605,34 +719,155 @@ public void UpdateUserNoUid()
605
719
{
606
720
var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
607
721
var userManager = this . CreateFirebaseUserManager ( handler ) ;
608
- var customClaims = new Dictionary < string , object > ( )
722
+
723
+ var args = new UserRecordArgs ( )
609
724
{
610
- { "key" , "value" } ,
725
+ EmailVerified = true ,
611
726
} ;
727
+ Assert . ThrowsAsync < ArgumentException > ( async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
728
+ }
729
+
730
+ [ Fact ]
731
+ public void UpdateUserInvalidUid ( )
732
+ {
733
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
734
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
612
735
613
736
var args = new UserRecordArgs ( )
614
737
{
615
- CustomClaims = customClaims ,
738
+ EmailVerified = true ,
739
+ Uid = new string ( 'a' , 129 ) ,
616
740
} ;
617
741
Assert . ThrowsAsync < ArgumentException > ( async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
618
742
}
619
743
620
744
[ Fact ]
621
- public void UpdateUserInvalidUid ( )
745
+ public async Task UpdateUserEmptyUid ( )
622
746
{
623
747
var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
624
748
var userManager = this . CreateFirebaseUserManager ( handler ) ;
625
- var customClaims = new Dictionary < string , object > ( )
749
+ var args = new UserRecordArgs ( )
626
750
{
627
- { "key" , "value" } ,
751
+ Uid = string . Empty ,
628
752
} ;
629
753
754
+ await Assert . ThrowsAsync < ArgumentException > ( async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
755
+ Assert . Null ( handler . Request ) ;
756
+ }
757
+
758
+ [ Fact ]
759
+ public async Task UpdateUserEmptyEmail ( )
760
+ {
761
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
762
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
630
763
var args = new UserRecordArgs ( )
631
764
{
632
- Uid = new string ( 'a' , 129 ) ,
633
- CustomClaims = customClaims ,
765
+ Email = string . Empty ,
766
+ Uid = "user1" ,
634
767
} ;
635
- Assert . ThrowsAsync < ArgumentException > ( async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
768
+
769
+ await Assert . ThrowsAsync < ArgumentException > (
770
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
771
+ Assert . Null ( handler . Request ) ;
772
+ }
773
+
774
+ [ Fact ]
775
+ public async Task UpdateUserInvalidEmail ( )
776
+ {
777
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
778
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
779
+ var args = new UserRecordArgs ( )
780
+ {
781
+ Email = "not-an-email" ,
782
+ Uid = "user1" ,
783
+ } ;
784
+
785
+ await Assert . ThrowsAsync < ArgumentException > (
786
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
787
+ Assert . Null ( handler . Request ) ;
788
+ }
789
+
790
+ [ Fact ]
791
+ public async Task UpdateUserEmptyPhoneNumber ( )
792
+ {
793
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
794
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
795
+ var args = new UserRecordArgs ( )
796
+ {
797
+ PhoneNumber = string . Empty ,
798
+ Uid = "user1" ,
799
+ } ;
800
+
801
+ await Assert . ThrowsAsync < ArgumentException > (
802
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
803
+ Assert . Null ( handler . Request ) ;
804
+ }
805
+
806
+ [ Fact ]
807
+ public async Task UpdateUserInvalidPhoneNumber ( )
808
+ {
809
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
810
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
811
+ var args = new UserRecordArgs ( )
812
+ {
813
+ PhoneNumber = "1234567890" ,
814
+ Uid = "user1" ,
815
+ } ;
816
+
817
+ var exception = await Assert . ThrowsAsync < ArgumentException > (
818
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
819
+ Assert . Equal (
820
+ "Phone number must be a valid, E.164 compliant identifier starting with a '+' sign." ,
821
+ exception . Message ) ;
822
+ Assert . Null ( handler . Request ) ;
823
+ }
824
+
825
+ [ Fact ]
826
+ public async Task UpdateUserEmptyPhotoUrl ( )
827
+ {
828
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
829
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
830
+ var args = new UserRecordArgs ( )
831
+ {
832
+ PhotoUrl = string . Empty ,
833
+ Uid = "user1" ,
834
+ } ;
835
+
836
+ await Assert . ThrowsAsync < ArgumentException > (
837
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
838
+ Assert . Null ( handler . Request ) ;
839
+ }
840
+
841
+ [ Fact ]
842
+ public async Task UpdateUserInvalidPhotoUrl ( )
843
+ {
844
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
845
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
846
+ var args = new UserRecordArgs ( )
847
+ {
848
+ PhotoUrl = "not a url" ,
849
+ Uid = "user1" ,
850
+ } ;
851
+
852
+ var exception = await Assert . ThrowsAsync < ArgumentException > (
853
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
854
+ Assert . Null ( handler . Request ) ;
855
+ }
856
+
857
+ [ Fact ]
858
+ public async Task UpdateUserShortPassword ( )
859
+ {
860
+ var handler = new MockMessageHandler ( ) { Response = CreateUserResponse } ;
861
+ var userManager = this . CreateFirebaseUserManager ( handler ) ;
862
+ var args = new UserRecordArgs ( )
863
+ {
864
+ Password = "only5" ,
865
+ Uid = "user1" ,
866
+ } ;
867
+
868
+ var exception = await Assert . ThrowsAsync < ArgumentException > (
869
+ async ( ) => await userManager . UpdateUserAsync ( args ) ) ;
870
+ Assert . Null ( handler . Request ) ;
636
871
}
637
872
638
873
[ Fact ]
0 commit comments