Skip to content

Commit 9c357eb

Browse files
authored
Merge pull request #67 from firebase/hkj-create-user
Implementing the CreateUserAsync() API
2 parents 01c44ff + 4d6a2cf commit 9c357eb

File tree

7 files changed

+702
-171
lines changed

7 files changed

+702
-171
lines changed

CHANGELOG.md

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

3-
-
3+
- [added] Implemented the `CreateUserAsync()` and `UserRecordArgs` APIs.
44

55
# v1.6.0
66

FirebaseAdmin/FirebaseAdmin.IntegrationTests/FirebaseAuthTest.cs

Lines changed: 113 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)