|
49 | 49 | import com.google.firebase.auth.UserRecord.CreateRequest;
|
50 | 50 | import com.google.firebase.auth.UserRecord.UpdateRequest;
|
51 | 51 | import com.google.firebase.auth.hash.Scrypt;
|
| 52 | +import com.google.firebase.internal.Nullable; |
52 | 53 | import com.google.firebase.testing.IntegrationTestUtils;
|
53 | 54 | import java.io.IOException;
|
54 | 55 | import java.net.URLDecoder;
|
@@ -140,37 +141,98 @@ public void testDeleteNonExistingUser() throws Exception {
|
140 | 141 | @Test
|
141 | 142 | public void testCreateUserWithParams() throws Exception {
|
142 | 143 | RandomUser randomUser = RandomUser.create();
|
143 |
| - String phone = randomPhoneNumber(); |
144 |
| - CreateRequest user = new CreateRequest() |
145 |
| - .setUid(randomUser.uid) |
146 |
| - .setEmail(randomUser.email) |
147 |
| - .setPhoneNumber(phone) |
148 |
| - .setDisplayName("Random User") |
149 |
| - .setPhotoUrl("https://example.com/photo.png") |
150 |
| - .setEmailVerified(true) |
151 |
| - .setPassword("password"); |
152 |
| - |
153 |
| - UserRecord userRecord = auth.createUserAsync(user).get(); |
| 144 | + String randomPhoneNumber = randomPhoneNumber(); |
154 | 145 | try {
|
155 |
| - assertEquals(randomUser.uid, userRecord.getUid()); |
156 |
| - assertEquals("Random User", userRecord.getDisplayName()); |
157 |
| - assertEquals(randomUser.email, userRecord.getEmail()); |
158 |
| - assertEquals(phone, userRecord.getPhoneNumber()); |
159 |
| - assertEquals("https://example.com/photo.png", userRecord.getPhotoUrl()); |
160 |
| - assertTrue(userRecord.isEmailVerified()); |
161 |
| - assertFalse(userRecord.isDisabled()); |
162 |
| - |
163 |
| - assertEquals(2, userRecord.getProviderData().length); |
| 146 | + UserRecord user = createUser(randomUser.uid, randomPhoneNumber, randomUser.email); |
| 147 | + assertEquals(randomUser.uid, user.getUid()); |
| 148 | + assertEquals("Random User", user.getDisplayName()); |
| 149 | + assertEquals(randomUser.email, user.getEmail()); |
| 150 | + assertEquals(randomPhoneNumber, user.getPhoneNumber()); |
| 151 | + assertEquals("https://example.com/photo.png", user.getPhotoUrl()); |
| 152 | + assertTrue(user.isEmailVerified()); |
| 153 | + assertFalse(user.isDisabled()); |
| 154 | + |
| 155 | + assertEquals(2, user.getProviderData().length); |
164 | 156 | List<String> providers = new ArrayList<>();
|
165 |
| - for (UserInfo provider : userRecord.getProviderData()) { |
| 157 | + for (UserInfo provider : user.getProviderData()) { |
166 | 158 | providers.add(provider.getProviderId());
|
167 | 159 | }
|
168 | 160 | assertTrue(providers.contains("password"));
|
169 | 161 | assertTrue(providers.contains("phone"));
|
170 | 162 |
|
171 |
| - checkRecreate(randomUser.uid); |
| 163 | + checkRecreate(user.getUid()); |
172 | 164 | } finally {
|
173 |
| - auth.deleteUserAsync(userRecord.getUid()).get(); |
| 165 | + auth.deleteUserAsync(randomUser.uid).get(); |
| 166 | + } |
| 167 | + } |
| 168 | + |
| 169 | + @Test |
| 170 | + public void testLookupUserByPhone() throws Exception { |
| 171 | + RandomUser randomUser1 = RandomUser.create(); |
| 172 | + String phoneNumber1 = null; |
| 173 | + RandomUser randomUser2 = RandomUser.create(); |
| 174 | + String randomPhoneNumber2 = randomPhoneNumber(); |
| 175 | + RandomUser randomUser3 = RandomUser.create(); |
| 176 | + String randomPhoneNumber3 = randomPhoneNumber(); |
| 177 | + try { |
| 178 | + UserRecord user1 = createUser( |
| 179 | + randomUser1.uid, /* phoneNumber= */ null, randomUser1.email); |
| 180 | + UserRecord user2 = createUser( |
| 181 | + randomUser2.uid, randomPhoneNumber2, randomUser2.email); |
| 182 | + UserImportResult user3 = importUser( |
| 183 | + randomUser3.uid, randomPhoneNumber3, randomUser3.email, "google.com"); |
| 184 | + |
| 185 | + UserRecord lookedUpRecord = auth.getUserByPhoneNumberAsync(randomPhoneNumber2).get(); |
| 186 | + assertEquals(lookedUpRecord.getUid(), randomUser2.uid); |
| 187 | + |
| 188 | + lookedUpRecord = auth.getUserByPhoneNumberAsync(randomPhoneNumber3).get(); |
| 189 | + assertEquals(lookedUpRecord.getUid(), randomUser3.uid); |
| 190 | + } finally { |
| 191 | + auth.deleteUserAsync(randomUser1.uid).get(); |
| 192 | + auth.deleteUserAsync(randomUser2.uid).get(); |
| 193 | + auth.deleteUserAsync(randomUser3.uid).get(); |
| 194 | + } |
| 195 | + } |
| 196 | + |
| 197 | + @Test |
| 198 | + public void testLookupUserByFederatedId() throws Exception { |
| 199 | + RandomUser randomUser1 = RandomUser.create(); |
| 200 | + String phoneNumber1 = null; |
| 201 | + RandomUser randomUser2 = RandomUser.create(); |
| 202 | + String randomPhoneNumber2 = randomPhoneNumber(); |
| 203 | + RandomUser randomUser3 = RandomUser.create(); |
| 204 | + String randomPhoneNumber3 = randomPhoneNumber(); |
| 205 | + try { |
| 206 | + UserRecord user1 = createUser( |
| 207 | + randomUser1.uid, /* phoneNumber= */ null, randomUser1.email); |
| 208 | + UserRecord user2 = createUser( |
| 209 | + randomUser2.uid, randomPhoneNumber2, randomUser2.email); |
| 210 | + UserImportResult user3 = importUser( |
| 211 | + randomUser3.uid, randomPhoneNumber3, randomUser3.email, "google.com"); |
| 212 | + |
| 213 | + UserRecord lookedUpRecord = auth.getUserByFederatedIdAsync( |
| 214 | + randomUser3.uid + "_google.com", "google.com").get(); |
| 215 | + assertEquals(lookedUpRecord.getUid(), randomUser3.uid); |
| 216 | + assertEquals(2, lookedUpRecord.getProviderData().length); |
| 217 | + List<String> providers = new ArrayList<>(); |
| 218 | + for (UserInfo provider : lookedUpRecord.getProviderData()) { |
| 219 | + providers.add(provider.getProviderId()); |
| 220 | + } |
| 221 | + assertTrue(providers.contains("phone")); |
| 222 | + assertTrue(providers.contains("google.com")); |
| 223 | + |
| 224 | + try { |
| 225 | + // Verify that lookup by federated identifier does not accept "phone". |
| 226 | + lookedUpRecord = auth.getUserByFederatedIdAsync( |
| 227 | + randomPhoneNumber3, "phone").get(); |
| 228 | + fail("No error thrown for non-federated provider"); |
| 229 | + } catch (IllegalArgumentException ignored) { |
| 230 | + // expected |
| 231 | + } |
| 232 | + } finally { |
| 233 | + auth.deleteUserAsync(randomUser1.uid).get(); |
| 234 | + auth.deleteUserAsync(randomUser2.uid).get(); |
| 235 | + auth.deleteUserAsync(randomUser3.uid).get(); |
174 | 236 | }
|
175 | 237 | }
|
176 | 238 |
|
@@ -590,6 +652,52 @@ public void testGenerateSignInWithEmailLink() throws Exception {
|
590 | 652 | }
|
591 | 653 | }
|
592 | 654 |
|
| 655 | + private UserRecord createUser( |
| 656 | + String uid, |
| 657 | + @Nullable String phoneNumber, |
| 658 | + @Nullable String email) throws Exception { |
| 659 | + RandomUser randomUser = RandomUser.create(); |
| 660 | + CreateRequest user = new CreateRequest() |
| 661 | + .setUid(uid) |
| 662 | + .setDisplayName("Random User") |
| 663 | + .setPhotoUrl("https://example.com/photo.png") |
| 664 | + .setPassword("password"); |
| 665 | + if (phoneNumber != null) { |
| 666 | + user.setPhoneNumber(phoneNumber); |
| 667 | + } |
| 668 | + if (email != null) { |
| 669 | + user.setEmail(email); |
| 670 | + user.setEmailVerified(true); |
| 671 | + } |
| 672 | + return auth.createUserAsync(user).get(); |
| 673 | + } |
| 674 | + |
| 675 | + private UserImportResult importUser( |
| 676 | + String uid, |
| 677 | + @Nullable String phoneNumber, |
| 678 | + @Nullable String email, |
| 679 | + String providerId) throws Exception { |
| 680 | + ImportUserRecord.Builder builder = ImportUserRecord.builder() |
| 681 | + .setUid(uid) |
| 682 | + .setDisabled(false) |
| 683 | + .setUserMetadata( |
| 684 | + new UserMetadata(/* creationTimestamp= */ 20L, /* lastSignInTimestamp= */ 20L)) |
| 685 | + .addUserProvider( |
| 686 | + UserProvider.builder() |
| 687 | + .setProviderId(providerId) |
| 688 | + .setUid(uid + "_" + providerId) |
| 689 | + .build()); |
| 690 | + if (phoneNumber != null) { |
| 691 | + builder.setPhoneNumber(phoneNumber); |
| 692 | + } |
| 693 | + if (email != null) { |
| 694 | + builder.setEmail(email); |
| 695 | + builder.setEmailVerified(true); |
| 696 | + } |
| 697 | + ImportUserRecord user = builder.build(); |
| 698 | + return auth.importUsersAsync(ImmutableList.of(user)).get(); |
| 699 | + } |
| 700 | + |
593 | 701 | private Map<String, String> parseLinkParameters(String link) throws Exception {
|
594 | 702 | Map<String, String> result = new HashMap<>();
|
595 | 703 | int queryBegin = link.indexOf('?');
|
|
0 commit comments