@@ -122,22 +122,101 @@ await Assert.ThrowsAsync<FirebaseException>(
122122 async ( ) => await FirebaseAuth . DefaultInstance . SetCustomUserClaimsAsync ( "mock-uid" , customClaims ) ) ;
123123 }
124124
125+ [ Fact ]
126+ public async Task CreateUserWithParams ( )
127+ {
128+ var randomUser = RandomUser . Create ( ) ;
129+ var args = new UserRecordArgs ( )
130+ {
131+ Uid = randomUser . Uid ,
132+ Email = randomUser . Email ,
133+ PhoneNumber = randomUser . PhoneNumber ,
134+ DisplayName = "Random User" ,
135+ PhotoUrl = "https://example.com/photo.png" ,
136+ EmailVerified = true ,
137+ Password = "password" ,
138+ } ;
139+
140+ var user = await FirebaseAuth . DefaultInstance . CreateUserAsync ( args ) ;
141+
142+ try
143+ {
144+ Assert . Equal ( randomUser . Uid , user . Uid ) ;
145+ Assert . Equal ( randomUser . Email , user . Email ) ;
146+ Assert . Equal ( randomUser . PhoneNumber , user . PhoneNumber ) ;
147+ Assert . Equal ( args . DisplayName , user . DisplayName ) ;
148+ Assert . Equal ( args . PhotoUrl , user . PhotoUrl ) ;
149+ Assert . True ( user . EmailVerified ) ;
150+ Assert . False ( user . Disabled ) ;
151+
152+ // Cannot recreate the same user.
153+ await Assert . ThrowsAsync < FirebaseException > (
154+ async ( ) => await FirebaseAuth . DefaultInstance . CreateUserAsync ( args ) ) ;
155+ }
156+ finally
157+ {
158+ await FirebaseAuth . DefaultInstance . DeleteUserAsync ( user . Uid ) ;
159+ }
160+ }
161+
125162 [ Fact ]
126163 public async Task UserLifecycle ( )
127164 {
128- var rand = new Random ( ) ;
129- var uid = $ "user{ rand . Next ( ) } ";
130- var customToken = await FirebaseAuth . DefaultInstance . CreateCustomTokenAsync ( uid ) ;
131- var idToken = await SignInWithCustomTokenAsync ( customToken ) ;
165+ // Create user
166+ var user = await FirebaseAuth . DefaultInstance . CreateUserAsync ( new UserRecordArgs ( ) ) ;
167+ var uid = user . Uid ;
168+ Assert . Null ( user . Email ) ;
169+ Assert . Null ( user . PhoneNumber ) ;
170+ Assert . Null ( user . DisplayName ) ;
171+ Assert . Null ( user . PhotoUrl ) ;
172+ Assert . False ( user . EmailVerified ) ;
173+ Assert . False ( user . Disabled ) ;
174+ Assert . NotNull ( user . UserMetaData . CreationTimestamp ) ;
175+ Assert . Null ( user . UserMetaData . LastSignInTimestamp ) ;
176+ Assert . Empty ( user . ProviderData ) ;
177+ Assert . Empty ( user . CustomClaims ) ;
132178
133- var user = await FirebaseAuth . DefaultInstance . GetUserAsync ( uid ) ;
179+ // Get user by ID
180+ user = await FirebaseAuth . DefaultInstance . GetUserAsync ( uid ) ;
134181 Assert . Equal ( uid , user . Uid ) ;
182+ Assert . Null ( user . Email ) ;
183+ Assert . Null ( user . PhoneNumber ) ;
184+ Assert . Null ( user . DisplayName ) ;
185+ Assert . Null ( user . PhotoUrl ) ;
186+ Assert . False ( user . EmailVerified ) ;
187+ Assert . False ( user . Disabled ) ;
188+ Assert . NotNull ( user . UserMetaData . CreationTimestamp ) ;
189+ Assert . Null ( user . UserMetaData . LastSignInTimestamp ) ;
190+ Assert . Empty ( user . ProviderData ) ;
191+ Assert . Empty ( user . CustomClaims ) ;
135192
193+ // Delete user
136194 await FirebaseAuth . DefaultInstance . DeleteUserAsync ( uid ) ;
137195 await Assert . ThrowsAsync < FirebaseException > (
138196 async ( ) => await FirebaseAuth . DefaultInstance . GetUserAsync ( uid ) ) ;
139197 }
140198
199+ [ Fact ]
200+ public async Task GetUserNonExistingUid ( )
201+ {
202+ await Assert . ThrowsAsync < FirebaseException > (
203+ async ( ) => await FirebaseAuth . DefaultInstance . GetUserAsync ( "non.existing" ) ) ;
204+ }
205+
206+ [ Fact ]
207+ public async Task GetUserNonExistingEmail ( )
208+ {
209+ await Assert . ThrowsAsync < FirebaseException > (
210+ async ( ) => await FirebaseAuth . DefaultInstance . GetUserByEmailAsync ( "[email protected] " ) ) ; 211+ }
212+
213+ [ Fact ]
214+ public async Task DeleteUserNonExistingUid ( )
215+ {
216+ await Assert . ThrowsAsync < FirebaseException > (
217+ async ( ) => await FirebaseAuth . DefaultInstance . DeleteUserAsync ( "non.existing" ) ) ;
218+ }
219+
141220 private static async Task < string > SignInWithCustomTokenAsync ( string customToken )
142221 {
143222 var rb = new Google . Apis . Requests . RequestBuilder ( )
@@ -179,4 +258,33 @@ internal class SignInResponse
179258 [ Newtonsoft . Json . JsonProperty ( "idToken" ) ]
180259 public string IdToken { get ; set ; }
181260 }
261+
262+ internal class RandomUser
263+ {
264+ internal string Uid { get ; private set ; }
265+
266+ internal string Email { get ; private set ; }
267+
268+ internal string PhoneNumber { get ; private set ; }
269+
270+ internal static RandomUser Create ( )
271+ {
272+ var uid = Guid . NewGuid ( ) . ToString ( ) . Replace ( "-" , string . Empty ) ;
273+ var email = $ "test{ uid . Substring ( 0 , 12 ) } @example.{ uid . Substring ( 12 ) } .com";
274+
275+ var phone = "+1" ;
276+ var rand = new Random ( ) ;
277+ for ( int i = 0 ; i < 10 ; i ++ )
278+ {
279+ phone += rand . Next ( 10 ) ;
280+ }
281+
282+ return new RandomUser ( )
283+ {
284+ Uid = uid ,
285+ Email = email ,
286+ PhoneNumber = phone ,
287+ } ;
288+ }
289+ }
182290}
0 commit comments