Skip to content

Commit a7ee4bb

Browse files
authored
Merge pull request #70 from firebase/hkj-update-user
Implemented the UpdateUserAsync() API
2 parents 9c357eb + 28129b3 commit a7ee4bb

File tree

6 files changed

+515
-59
lines changed

6 files changed

+515
-59
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Unreleased
22

3+
- [added] Implemented the `UpdateUserAsync()` API.
34
- [added] Implemented the `CreateUserAsync()` and `UserRecordArgs` APIs.
45

56
# v1.6.0

FirebaseAdmin/FirebaseAdmin.IntegrationTests/FirebaseAuthTest.cs

Lines changed: 97 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public async Task SetCustomUserClaimsWithWrongUid()
119119
var customClaims = new Dictionary<string, object>();
120120

121121
await Assert.ThrowsAsync<FirebaseException>(
122-
async () => await FirebaseAuth.DefaultInstance.SetCustomUserClaimsAsync("mock-uid", customClaims));
122+
async () => await FirebaseAuth.DefaultInstance.SetCustomUserClaimsAsync("non.existing", customClaims));
123123
}
124124

125125
[Fact]
@@ -165,35 +165,91 @@ public async Task UserLifecycle()
165165
// Create user
166166
var user = await FirebaseAuth.DefaultInstance.CreateUserAsync(new UserRecordArgs());
167167
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);
178-
179-
// Get user by ID
180-
user = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
181-
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);
192-
193-
// Delete user
194-
await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
195-
await Assert.ThrowsAsync<FirebaseException>(
196-
async () => await FirebaseAuth.DefaultInstance.GetUserAsync(uid));
168+
try
169+
{
170+
Assert.Null(user.Email);
171+
Assert.Null(user.PhoneNumber);
172+
Assert.Null(user.DisplayName);
173+
Assert.Null(user.PhotoUrl);
174+
Assert.False(user.EmailVerified);
175+
Assert.False(user.Disabled);
176+
Assert.NotNull(user.UserMetaData.CreationTimestamp);
177+
Assert.Null(user.UserMetaData.LastSignInTimestamp);
178+
Assert.Empty(user.ProviderData);
179+
Assert.Empty(user.CustomClaims);
180+
181+
// Get user by ID
182+
user = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
183+
Assert.Equal(uid, user.Uid);
184+
Assert.Null(user.Email);
185+
Assert.Null(user.PhoneNumber);
186+
Assert.Null(user.DisplayName);
187+
Assert.Null(user.PhotoUrl);
188+
Assert.False(user.EmailVerified);
189+
Assert.False(user.Disabled);
190+
Assert.NotNull(user.UserMetaData.CreationTimestamp);
191+
Assert.Null(user.UserMetaData.LastSignInTimestamp);
192+
Assert.Empty(user.ProviderData);
193+
Assert.Empty(user.CustomClaims);
194+
195+
// Update user
196+
var randomUser = RandomUser.Create();
197+
var updateArgs = new UserRecordArgs()
198+
{
199+
Uid = uid,
200+
DisplayName = "Updated Name",
201+
Email = randomUser.Email,
202+
PhoneNumber = randomUser.PhoneNumber,
203+
PhotoUrl = "https://example.com/photo.png",
204+
EmailVerified = true,
205+
Password = "secret",
206+
};
207+
user = await FirebaseAuth.DefaultInstance.UpdateUserAsync(updateArgs);
208+
Assert.Equal(uid, user.Uid);
209+
Assert.Equal(randomUser.Email, user.Email);
210+
Assert.Equal(randomUser.PhoneNumber, user.PhoneNumber);
211+
Assert.Equal("Updated Name", user.DisplayName);
212+
Assert.Equal("https://example.com/photo.png", user.PhotoUrl);
213+
Assert.True(user.EmailVerified);
214+
Assert.False(user.Disabled);
215+
Assert.NotNull(user.UserMetaData.CreationTimestamp);
216+
Assert.Null(user.UserMetaData.LastSignInTimestamp);
217+
Assert.Equal(2, user.ProviderData.Length);
218+
Assert.Empty(user.CustomClaims);
219+
220+
// Get user by email
221+
user = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(randomUser.Email);
222+
Assert.Equal(uid, user.Uid);
223+
224+
// Disable user and remove properties
225+
var disableArgs = new UserRecordArgs()
226+
{
227+
Uid = uid,
228+
Disabled = true,
229+
DisplayName = null,
230+
PhoneNumber = null,
231+
PhotoUrl = null,
232+
};
233+
user = await FirebaseAuth.DefaultInstance.UpdateUserAsync(disableArgs);
234+
Assert.Equal(uid, user.Uid);
235+
Assert.Equal(randomUser.Email, user.Email);
236+
Assert.Null(user.PhoneNumber);
237+
Assert.Null(user.DisplayName);
238+
Assert.Null(user.PhotoUrl);
239+
Assert.True(user.EmailVerified);
240+
Assert.True(user.Disabled);
241+
Assert.NotNull(user.UserMetaData.CreationTimestamp);
242+
Assert.Null(user.UserMetaData.LastSignInTimestamp);
243+
Assert.Single(user.ProviderData);
244+
Assert.Empty(user.CustomClaims);
245+
}
246+
finally
247+
{
248+
// Delete user
249+
await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
250+
await Assert.ThrowsAsync<FirebaseException>(
251+
async () => await FirebaseAuth.DefaultInstance.GetUserAsync(uid));
252+
}
197253
}
198254

199255
[Fact]
@@ -210,6 +266,17 @@ await Assert.ThrowsAsync<FirebaseException>(
210266
async () => await FirebaseAuth.DefaultInstance.GetUserByEmailAsync("[email protected]"));
211267
}
212268

269+
[Fact]
270+
public async Task UpdateUserNonExistingUid()
271+
{
272+
var args = new UserRecordArgs()
273+
{
274+
Uid = "non.existing",
275+
};
276+
await Assert.ThrowsAsync<FirebaseException>(
277+
async () => await FirebaseAuth.DefaultInstance.UpdateUserAsync(args));
278+
}
279+
213280
[Fact]
214281
public async Task DeleteUserNonExistingUid()
215282
{

0 commit comments

Comments
 (0)