Skip to content

Commit e1e49e3

Browse files
authored
Refactor shared code into UserTestUtils. (#432)
1 parent de6b982 commit e1e49e3

File tree

3 files changed

+238
-231
lines changed

3 files changed

+238
-231
lines changed

src/test/java/com/google/firebase/auth/FirebaseAuthIT.java

Lines changed: 49 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
import com.google.firebase.FirebaseOptions;
4848
import com.google.firebase.ImplFirebaseTrampolines;
4949
import com.google.firebase.auth.ProviderConfigTestUtils.TemporaryProviderConfig;
50+
import com.google.firebase.auth.UserTestUtils.RandomUser;
51+
import com.google.firebase.auth.UserTestUtils.TemporaryUser;
5052
import com.google.firebase.auth.hash.Scrypt;
5153
import com.google.firebase.internal.Nullable;
5254
import com.google.firebase.testing.IntegrationTestUtils;
@@ -56,8 +58,6 @@
5658
import java.util.HashMap;
5759
import java.util.List;
5860
import java.util.Map;
59-
import java.util.Random;
60-
import java.util.UUID;
6161
import java.util.concurrent.ExecutionException;
6262
import java.util.concurrent.Semaphore;
6363
import java.util.concurrent.TimeUnit;
@@ -85,7 +85,7 @@ public class FirebaseAuthIT {
8585
private static final FirebaseAuth auth = FirebaseAuth.getInstance(
8686
IntegrationTestUtils.ensureDefaultApp());
8787

88-
@Rule public final TemporaryUser temporaryUser = new TemporaryUser();
88+
@Rule public final TemporaryUser temporaryUser = new TemporaryUser(auth);
8989
@Rule public final TemporaryProviderConfig temporaryProviderConfig =
9090
new TemporaryProviderConfig(auth);
9191

@@ -139,22 +139,21 @@ public void testDeleteNonExistingUser() throws Exception {
139139

140140
@Test
141141
public void testCreateUserWithParams() throws Exception {
142-
RandomUser randomUser = RandomUser.create();
143-
String phone = randomPhoneNumber();
142+
RandomUser randomUser = UserTestUtils.generateRandomUserInfo();
144143
UserRecord.CreateRequest user = new UserRecord.CreateRequest()
145-
.setUid(randomUser.uid)
146-
.setEmail(randomUser.email)
147-
.setPhoneNumber(phone)
144+
.setUid(randomUser.getUid())
145+
.setEmail(randomUser.getEmail())
146+
.setPhoneNumber(randomUser.getPhoneNumber())
148147
.setDisplayName("Random User")
149148
.setPhotoUrl("https://example.com/photo.png")
150149
.setEmailVerified(true)
151150
.setPassword("password");
152151

153152
UserRecord userRecord = temporaryUser.create(user);
154-
assertEquals(randomUser.uid, userRecord.getUid());
153+
assertEquals(randomUser.getUid(), userRecord.getUid());
155154
assertEquals("Random User", userRecord.getDisplayName());
156-
assertEquals(randomUser.email, userRecord.getEmail());
157-
assertEquals(phone, userRecord.getPhoneNumber());
155+
assertEquals(randomUser.getEmail(), userRecord.getEmail());
156+
assertEquals(randomUser.getPhoneNumber(), userRecord.getPhoneNumber());
158157
assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl());
159158
assertTrue(userRecord.isEmailVerified());
160159
assertFalse(userRecord.isDisabled());
@@ -167,7 +166,7 @@ public void testCreateUserWithParams() throws Exception {
167166
assertTrue(providers.contains("password"));
168167
assertTrue(providers.contains("phone"));
169168

170-
checkRecreateUser(randomUser.uid);
169+
checkRecreateUser(randomUser.getUid());
171170
}
172171

173172
@Test
@@ -192,21 +191,20 @@ public void testUserLifecycle() throws Exception {
192191
assertTrue(userRecord.getCustomClaims().isEmpty());
193192

194193
// Update user
195-
RandomUser randomUser = RandomUser.create();
196-
String phone = randomPhoneNumber();
194+
RandomUser randomUser = UserTestUtils.generateRandomUserInfo();
197195
UserRecord.UpdateRequest request = userRecord.updateRequest()
198196
.setDisplayName("Updated Name")
199-
.setEmail(randomUser.email)
200-
.setPhoneNumber(phone)
197+
.setEmail(randomUser.getEmail())
198+
.setPhoneNumber(randomUser.getPhoneNumber())
201199
.setPhotoUrl("https://example.com/photo.png")
202200
.setEmailVerified(true)
203201
.setPassword("secret");
204202
userRecord = auth.updateUserAsync(request).get();
205203
assertEquals(uid, userRecord.getUid());
206204
assertNull(userRecord.getTenantId());
207205
assertEquals("Updated Name", userRecord.getDisplayName());
208-
assertEquals(randomUser.email, userRecord.getEmail());
209-
assertEquals(phone, userRecord.getPhoneNumber());
206+
assertEquals(randomUser.getEmail(), userRecord.getEmail());
207+
assertEquals(randomUser.getPhoneNumber(), userRecord.getPhoneNumber());
210208
assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl());
211209
assertTrue(userRecord.isEmailVerified());
212210
assertFalse(userRecord.isDisabled());
@@ -227,7 +225,7 @@ public void testUserLifecycle() throws Exception {
227225
assertEquals(uid, userRecord.getUid());
228226
assertNull(userRecord.getTenantId());
229227
assertNull(userRecord.getDisplayName());
230-
assertEquals(randomUser.email, userRecord.getEmail());
228+
assertEquals(randomUser.getEmail(), userRecord.getEmail());
231229
assertNull(userRecord.getPhoneNumber());
232230
assertNull(userRecord.getPhotoUrl());
233231
assertTrue(userRecord.isEmailVerified());
@@ -237,7 +235,7 @@ public void testUserLifecycle() throws Exception {
237235

238236
// Delete user
239237
auth.deleteUserAsync(userRecord.getUid()).get();
240-
assertUserDoesNotExist(auth, userRecord.getUid());
238+
UserTestUtils.assertUserDoesNotExist(auth, userRecord.getUid());
241239
}
242240

243241
@Test
@@ -454,29 +452,29 @@ public void testCustomTokenWithClaims() throws Exception {
454452

455453
@Test
456454
public void testImportUsers() throws Exception {
457-
RandomUser randomUser = RandomUser.create();
455+
RandomUser randomUser = UserTestUtils.generateRandomUserInfo();
458456
ImportUserRecord user = ImportUserRecord.builder()
459-
.setUid(randomUser.uid)
460-
.setEmail(randomUser.email)
457+
.setUid(randomUser.getUid())
458+
.setEmail(randomUser.getEmail())
461459
.build();
462460

463461
UserImportResult result = auth.importUsersAsync(ImmutableList.of(user)).get();
464-
temporaryUser.registerUid(randomUser.uid);
462+
temporaryUser.registerUid(randomUser.getUid());
465463
assertEquals(1, result.getSuccessCount());
466464
assertEquals(0, result.getFailureCount());
467465

468-
UserRecord savedUser = auth.getUserAsync(randomUser.uid).get();
469-
assertEquals(randomUser.email, savedUser.getEmail());
466+
UserRecord savedUser = auth.getUserAsync(randomUser.getUid()).get();
467+
assertEquals(randomUser.getEmail(), savedUser.getEmail());
470468
}
471469

472470
@Test
473471
public void testImportUsersWithPassword() throws Exception {
474-
RandomUser randomUser = RandomUser.create();
472+
RandomUser randomUser = UserTestUtils.generateRandomUserInfo();
475473
final byte[] passwordHash = BaseEncoding.base64().decode(
476474
"V358E8LdWJXAO7muq0CufVpEOXaj8aFiC7T/rcaGieN04q/ZPJ08WhJEHGjj9lz/2TT+/86N5VjVoc5DdBhBiw==");
477475
ImportUserRecord user = ImportUserRecord.builder()
478-
.setUid(randomUser.uid)
479-
.setEmail(randomUser.email)
476+
.setUid(randomUser.getUid())
477+
.setEmail(randomUser.getEmail())
480478
.setPasswordHash(passwordHash)
481479
.setPasswordSalt("NaCl".getBytes())
482480
.build();
@@ -492,46 +490,46 @@ public void testImportUsersWithPassword() throws Exception {
492490
.setRounds(8)
493491
.setMemoryCost(14)
494492
.build())).get();
495-
temporaryUser.registerUid(randomUser.uid);
493+
temporaryUser.registerUid(randomUser.getUid());
496494
assertEquals(1, result.getSuccessCount());
497495
assertEquals(0, result.getFailureCount());
498496

499-
UserRecord savedUser = auth.getUserAsync(randomUser.uid).get();
500-
assertEquals(randomUser.email, savedUser.getEmail());
501-
String idToken = signInWithPassword(randomUser.email, "password");
497+
UserRecord savedUser = auth.getUserAsync(randomUser.getUid()).get();
498+
assertEquals(randomUser.getEmail(), savedUser.getEmail());
499+
String idToken = signInWithPassword(randomUser.getEmail(), "password");
502500
assertFalse(Strings.isNullOrEmpty(idToken));
503501
}
504502

505503
@Test
506504
public void testGeneratePasswordResetLink() throws Exception {
507-
RandomUser user = RandomUser.create();
505+
RandomUser user = UserTestUtils.generateRandomUserInfo();
508506
temporaryUser.create(new UserRecord.CreateRequest()
509-
.setUid(user.uid)
510-
.setEmail(user.email)
507+
.setUid(user.getUid())
508+
.setEmail(user.getEmail())
511509
.setEmailVerified(false)
512510
.setPassword("password"));
513-
String link = auth.generatePasswordResetLink(user.email, ActionCodeSettings.builder()
511+
String link = auth.generatePasswordResetLink(user.getEmail(), ActionCodeSettings.builder()
514512
.setUrl(ACTION_LINK_CONTINUE_URL)
515513
.setHandleCodeInApp(false)
516514
.build());
517515
Map<String, String> linkParams = parseLinkParameters(link);
518516
assertEquals(ACTION_LINK_CONTINUE_URL, linkParams.get("continueUrl"));
519-
String email = resetPassword(user.email, "password", "newpassword",
517+
String email = resetPassword(user.getEmail(), "password", "newpassword",
520518
linkParams.get("oobCode"));
521-
assertEquals(user.email, email);
519+
assertEquals(user.getEmail(), email);
522520
// Password reset also verifies the user's email
523-
assertTrue(auth.getUser(user.uid).isEmailVerified());
521+
assertTrue(auth.getUser(user.getUid()).isEmailVerified());
524522
}
525523

526524
@Test
527525
public void testGenerateEmailVerificationResetLink() throws Exception {
528-
RandomUser user = RandomUser.create();
526+
RandomUser user = UserTestUtils.generateRandomUserInfo();
529527
temporaryUser.create(new UserRecord.CreateRequest()
530-
.setUid(user.uid)
531-
.setEmail(user.email)
528+
.setUid(user.getUid())
529+
.setEmail(user.getEmail())
532530
.setEmailVerified(false)
533531
.setPassword("password"));
534-
String link = auth.generateEmailVerificationLink(user.email, ActionCodeSettings.builder()
532+
String link = auth.generateEmailVerificationLink(user.getEmail(), ActionCodeSettings.builder()
535533
.setUrl(ACTION_LINK_CONTINUE_URL)
536534
.setHandleCodeInApp(false)
537535
.build());
@@ -544,21 +542,21 @@ public void testGenerateEmailVerificationResetLink() throws Exception {
544542

545543
@Test
546544
public void testGenerateSignInWithEmailLink() throws Exception {
547-
RandomUser user = RandomUser.create();
545+
RandomUser user = UserTestUtils.generateRandomUserInfo();
548546
temporaryUser.create(new UserRecord.CreateRequest()
549-
.setUid(user.uid)
550-
.setEmail(user.email)
547+
.setUid(user.getUid())
548+
.setEmail(user.getEmail())
551549
.setEmailVerified(false)
552550
.setPassword("password"));
553-
String link = auth.generateSignInWithEmailLink(user.email, ActionCodeSettings.builder()
551+
String link = auth.generateSignInWithEmailLink(user.getEmail(), ActionCodeSettings.builder()
554552
.setUrl(ACTION_LINK_CONTINUE_URL)
555553
.setHandleCodeInApp(false)
556554
.build());
557555
Map<String, String> linkParams = parseLinkParameters(link);
558556
assertEquals(ACTION_LINK_CONTINUE_URL, linkParams.get("continueUrl"));
559-
String idToken = signInWithEmailLink(user.email, linkParams.get("oobCode"));
557+
String idToken = signInWithEmailLink(user.getEmail(), linkParams.get("oobCode"));
560558
assertFalse(Strings.isNullOrEmpty(idToken));
561-
assertTrue(auth.getUser(user.uid).isEmailVerified());
559+
assertTrue(auth.getUser(user.getUid()).isEmailVerified());
562560
}
563561

564562
@Test
@@ -812,15 +810,6 @@ private Map<String, String> parseLinkParameters(String link) throws Exception {
812810
return result;
813811
}
814812

815-
private String randomPhoneNumber() {
816-
Random random = new Random();
817-
StringBuilder builder = new StringBuilder("+1");
818-
for (int i = 0; i < 10; i++) {
819-
builder.append(random.nextInt(10));
820-
}
821-
return builder.toString();
822-
}
823-
824813
private String signInWithCustomToken(String customToken) throws IOException {
825814
return signInWithCustomToken(customToken, null);
826815
}
@@ -910,23 +899,6 @@ private void checkRecreateUser(String uid) throws Exception {
910899
}
911900
}
912901

913-
private static class RandomUser {
914-
private final String uid;
915-
private final String email;
916-
917-
private RandomUser(String uid, String email) {
918-
this.uid = uid;
919-
this.email = email;
920-
}
921-
922-
static RandomUser create() {
923-
final String uid = UUID.randomUUID().toString().replaceAll("-", "");
924-
final String email = ("test" + uid.substring(0, 12) + "@example."
925-
+ uid.substring(12) + ".com").toLowerCase();
926-
return new RandomUser(uid, email);
927-
}
928-
}
929-
930902
private boolean checkOidcProviderConfig(List<String> providerIds, OidcProviderConfig config) {
931903
if (providerIds.contains(config.getProviderId())) {
932904
assertEquals("CLIENT_ID", config.getClientId());
@@ -947,48 +919,5 @@ private boolean checkSamlProviderConfig(List<String> providerIds, SamlProviderCo
947919
}
948920
return false;
949921
}
950-
951-
private static void assertUserDoesNotExist(AbstractFirebaseAuth firebaseAuth, String uid)
952-
throws Exception {
953-
try {
954-
firebaseAuth.getUserAsync(uid).get();
955-
fail("No error thrown for getting a user which was expected to be absent.");
956-
} catch (ExecutionException e) {
957-
assertTrue(e.getCause() instanceof FirebaseAuthException);
958-
assertEquals(FirebaseUserManager.USER_NOT_FOUND_ERROR,
959-
((FirebaseAuthException) e.getCause()).getErrorCode());
960-
}
961-
}
962-
963-
/**
964-
* Creates temporary Firebase user accounts for testing, and deletes them at the end of each
965-
* test case.
966-
*/
967-
private static final class TemporaryUser extends ExternalResource {
968-
969-
private final List<String> users = new ArrayList<>();
970-
971-
public UserRecord create(UserRecord.CreateRequest request) throws FirebaseAuthException {
972-
UserRecord user = auth.createUser(request);
973-
registerUid(user.getUid());
974-
return user;
975-
}
976-
977-
public synchronized void registerUid(String uid) {
978-
users.add(uid);
979-
}
980-
981-
@Override
982-
protected synchronized void after() {
983-
for (String uid : users) {
984-
try {
985-
auth.deleteUser(uid);
986-
} catch (Exception ignore) {
987-
// Ignore
988-
}
989-
}
990-
991-
users.clear();
992-
}
993-
}
994922
}
923+

0 commit comments

Comments
 (0)