Skip to content

Commit 023b69d

Browse files
authored
Remove custom test runner, update robolectric (#841)
1 parent e16784d commit 023b69d

19 files changed

+112
-117
lines changed

auth/build.gradle

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,7 @@ dependencies {
6060
testCompile 'junit:junit:4.12'
6161
//noinspection GradleDynamicVersion
6262
testCompile 'org.mockito:mockito-core:2.8.+'
63-
testCompile 'org.robolectric:robolectric:3.2.2'
64-
// See https://github.com/robolectric/robolectric/issues/1932#issuecomment-219796474
65-
testCompile 'org.khronos:opengl-api:gl1.1-android-2.1_r1'
63+
testCompile 'org.robolectric:robolectric:3.4'
6664
testCompile 'com.facebook.android:facebook-android-sdk:4.23.0'
6765
}
6866

auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -244,13 +244,15 @@ public void onComplete(@NonNull Task<Void> task) {
244244
// This executes even if the name change fails, since
245245
// the account creation succeeded and we want to save
246246
// the credential to SmartLock (if enabled).
247+
IdpResponse response = new IdpResponse.Builder(
248+
new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
249+
.setName(name)
250+
.setPhotoUri(mUser.getPhotoUri())
251+
.build())
252+
.build();
253+
247254
mActivity.saveCredentialsOrFinish(
248-
mSaveSmartLock, user, password,
249-
new IdpResponse.Builder(new User.Builder(
250-
EmailAuthProvider.PROVIDER_ID, email)
251-
.setName(name)
252-
.setPhotoUri(mUser.getPhotoUri())
253-
.build()).build());
255+
mSaveSmartLock, user, password, response);
254256
}
255257
});
256258
}

auth/src/test/java/com/firebase/ui/auth/AuthUITest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import com.firebase.ui.auth.AuthUI.IdpConfig;
1818
import com.firebase.ui.auth.AuthUI.SignInIntentBuilder;
19-
import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner;
2019
import com.firebase.ui.auth.testhelpers.TestConstants;
2120
import com.firebase.ui.auth.testhelpers.TestHelper;
2221
import com.firebase.ui.auth.ui.ExtraConstants;
@@ -26,14 +25,15 @@
2625
import org.junit.Before;
2726
import org.junit.Test;
2827
import org.junit.runner.RunWith;
28+
import org.robolectric.RobolectricTestRunner;
2929
import org.robolectric.RuntimeEnvironment;
3030
import org.robolectric.annotation.Config;
3131

3232
import java.util.Arrays;
3333

3434
import static junit.framework.Assert.assertEquals;
3535

36-
@RunWith(CustomRobolectricGradleTestRunner.class)
36+
@RunWith(RobolectricTestRunner.class)
3737
@Config(constants = BuildConfig.class, sdk = 25)
3838
public class AuthUITest {
3939
private FirebaseApp mFirebaseApp;

auth/src/test/java/com/firebase/ui/auth/testhelpers/AuthHelperShadow.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,16 @@
1818
public class AuthHelperShadow {
1919

2020
public static final FirebaseAuth sFirebaseAuth;
21-
public static final FirebaseUser sFirebaseUser;
2221
public static final CredentialsApi sCredentialsApi;
2322
public static final SaveSmartLock sSaveSmartLock;
2423
public static final PhoneAuthProvider sPhoneAuthProvider;
2524

25+
private static FirebaseUser sFirebaseUser;
26+
2627
static {
2728
// CredentialsApi
2829
sCredentialsApi = Mockito.mock(CredentialsApi.class);
2930

30-
// FirebaseUser
31-
sFirebaseUser = Mockito.mock(FirebaseUser.class);
32-
when(sFirebaseUser.getEmail()).thenReturn(TestConstants.EMAIL);
33-
when(sFirebaseUser.getDisplayName()).thenReturn(TestConstants.NAME);
34-
when(sFirebaseUser.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI);
35-
3631
// FirebaseAuth
3732
sFirebaseAuth = Mockito.mock(FirebaseAuth.class);
3833
when(sFirebaseAuth.getCurrentUser()).thenReturn(sFirebaseUser);
@@ -58,6 +53,10 @@ public static CredentialsApi getCredentialsApi() {
5853

5954
@Implementation
6055
public static FirebaseUser getCurrentUser() {
56+
if (sFirebaseUser == null) {
57+
sFirebaseUser = TestHelper.getMockFirebaseUser();
58+
}
59+
6160
return sFirebaseUser;
6261
}
6362

auth/src/test/java/com/firebase/ui/auth/testhelpers/CustomRobolectricGradleTestRunner.java

Lines changed: 0 additions & 43 deletions
This file was deleted.

auth/src/test/java/com/firebase/ui/auth/testhelpers/FakeAuthResult.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,21 @@
2121
public final class FakeAuthResult implements AuthResult {
2222
public static final AuthResult INSTANCE = new FakeAuthResult();
2323

24-
private FakeAuthResult() {
25-
// Singleton
26-
}
24+
private FirebaseUser mUser;
25+
26+
// Singleton
27+
private FakeAuthResult() {}
2728

2829
@Override
2930
public FirebaseUser getUser() {
30-
return AuthHelperShadow.getCurrentUser();
31+
// TODO(samstern): This method should just call AuthHelperShadow.getCurrentUser(),
32+
// but it fails
33+
34+
if (mUser == null) {
35+
mUser = TestHelper.getMockFirebaseUser();
36+
}
37+
38+
return mUser;
3139
}
3240

3341
@Override

auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,19 @@
3030
import java.util.List;
3131

3232
import static junit.framework.Assert.assertEquals;
33+
import static junit.framework.Assert.assertNotNull;
3334
import static junit.framework.Assert.assertNull;
35+
import static org.mockito.Mockito.mock;
3436
import static org.mockito.Mockito.verify;
37+
import static org.mockito.Mockito.when;
3538

3639
public class TestHelper {
3740
private static final String APPLICATION_ID = "testAppId";
3841
private static final String API_KEY = "fakeKey";
3942
private static final String FIREBASE_APP_NAME = "firebaseAppName";
4043

44+
private static FirebaseUser sFirebaseUser;
45+
4146
public static FirebaseApp initializeApp(Context context) {
4247
try {
4348
return FirebaseApp.initializeApp(
@@ -52,6 +57,15 @@ public static FirebaseApp initializeApp(Context context) {
5257
}
5358
}
5459

60+
public static FirebaseUser getMockFirebaseUser() {
61+
FirebaseUser user = mock(FirebaseUser.class);
62+
when(user.getEmail()).thenReturn(TestConstants.EMAIL);
63+
when(user.getDisplayName()).thenReturn(TestConstants.NAME);
64+
when(user.getPhotoUrl()).thenReturn(TestConstants.PHOTO_URI);
65+
66+
return user;
67+
}
68+
5569
public static FlowParameters getFlowParameters(List<String> providerIds) {
5670
List<IdpConfig> idpConfigs = new ArrayList<>();
5771
for (String providerId : providerIds) {
@@ -86,6 +100,7 @@ public static void verifySmartLockSave(String providerId, String email,
86100
idpResponseCaptor.capture());
87101

88102
// Check email and password
103+
assertNotNull(userCaptor.getValue());
89104
assertEquals(email, userCaptor.getValue().getEmail());
90105
assertEquals(password, passwordCaptor.getValue());
91106

auth/src/test/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivityTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
import com.firebase.ui.auth.R;
2222
import com.firebase.ui.auth.testhelpers.AuthHelperShadow;
2323
import com.firebase.ui.auth.testhelpers.AutoCompleteTask;
24-
import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner;
2524
import com.firebase.ui.auth.testhelpers.TestConstants;
2625
import com.firebase.ui.auth.testhelpers.TestHelper;
2726

2827
import org.junit.Before;
2928
import org.junit.Test;
3029
import org.junit.runner.RunWith;
3130
import org.robolectric.Robolectric;
31+
import org.robolectric.RobolectricTestRunner;
3232
import org.robolectric.RuntimeEnvironment;
3333
import org.robolectric.annotation.Config;
3434

@@ -37,7 +37,7 @@
3737
import static org.mockito.Mockito.verify;
3838
import static org.mockito.Mockito.when;
3939

40-
@RunWith(CustomRobolectricGradleTestRunner.class)
40+
@RunWith(RobolectricTestRunner.class)
4141
@Config(constants = BuildConfig.class, sdk = 25)
4242
public class RecoverPasswordActivityTest {
4343

@@ -51,7 +51,7 @@ private RecoverPasswordActivity createActivity() {
5151
RuntimeEnvironment.application,
5252
TestHelper.getFlowParameters(Collections.<String>emptyList()),
5353
TestConstants.EMAIL);
54-
return Robolectric.buildActivity(RecoverPasswordActivity.class).withIntent(startIntent)
54+
return Robolectric.buildActivity(RecoverPasswordActivity.class, startIntent)
5555
.create().visible().get();
5656
}
5757

auth/src/test/java/com/firebase/ui/auth/ui/email/RegisterEmailActivityTest.java

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package com.firebase.ui.auth.ui.email;
1616

1717
import android.content.Intent;
18-
import android.os.Bundle;
1918
import android.support.design.widget.TextInputLayout;
2019
import android.widget.Button;
2120
import android.widget.EditText;
@@ -26,7 +25,6 @@
2625
import com.firebase.ui.auth.User;
2726
import com.firebase.ui.auth.testhelpers.AuthHelperShadow;
2827
import com.firebase.ui.auth.testhelpers.AutoCompleteTask;
29-
import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner;
3028
import com.firebase.ui.auth.testhelpers.FakeAuthResult;
3129
import com.firebase.ui.auth.testhelpers.TestConstants;
3230
import com.firebase.ui.auth.testhelpers.TestHelper;
@@ -36,7 +34,9 @@
3634
import org.junit.Before;
3735
import org.junit.Test;
3836
import org.junit.runner.RunWith;
37+
import org.mockito.ArgumentCaptor;
3938
import org.robolectric.Robolectric;
39+
import org.robolectric.RobolectricTestRunner;
4040
import org.robolectric.RuntimeEnvironment;
4141
import org.robolectric.annotation.Config;
4242

@@ -45,20 +45,20 @@
4545
import static org.junit.Assert.assertEquals;
4646
import static org.mockito.ArgumentMatchers.any;
4747
import static org.mockito.Mockito.reset;
48+
import static org.mockito.Mockito.verify;
4849
import static org.mockito.Mockito.when;
4950

50-
51-
@RunWith(CustomRobolectricGradleTestRunner.class)
51+
@RunWith(RobolectricTestRunner.class)
5252
@Config(constants = BuildConfig.class, sdk = 25)
5353
public class RegisterEmailActivityTest {
5454

5555
private RegisterEmailActivity createActivity() {
5656
Intent startIntent = RegisterEmailActivity.createIntent(
5757
RuntimeEnvironment.application,
5858
TestHelper.getFlowParameters(Collections.singletonList(AuthUI.EMAIL_PROVIDER)));
59-
return Robolectric.buildActivity(RegisterEmailActivity.class)
60-
.withIntent(startIntent)
61-
.create(new Bundle())
59+
60+
return Robolectric.buildActivity(RegisterEmailActivity.class, startIntent)
61+
.create()
6262
.start()
6363
.visible()
6464
.get();
@@ -115,23 +115,39 @@ public void testSignUpButton_successfulRegistrationShouldContinueToSaveCredentia
115115
.setPhotoUri(TestConstants.PHOTO_URI)
116116
.build());
117117

118+
EditText email = (EditText) registerEmailActivity.findViewById(R.id.email);
118119
EditText name = (EditText) registerEmailActivity.findViewById(R.id.name);
119120
EditText password = (EditText) registerEmailActivity.findViewById(R.id.password);
121+
122+
email.setText(TestConstants.EMAIL);
120123
name.setText(TestConstants.NAME);
121124
password.setText(TestConstants.PASSWORD);
122125

123-
when(AuthHelperShadow.sFirebaseUser.updateProfile(any(UserProfileChangeRequest.class)))
124-
.thenReturn(new AutoCompleteTask<Void>(null, true, null));
125-
126+
// Mock user creation requests
126127
when(AuthHelperShadow.sFirebaseAuth
127-
.createUserWithEmailAndPassword(
128-
TestConstants.EMAIL,
129-
TestConstants.PASSWORD))
128+
.createUserWithEmailAndPassword(TestConstants.EMAIL, TestConstants.PASSWORD))
130129
.thenReturn(new AutoCompleteTask<>(FakeAuthResult.INSTANCE, true, null));
131130

131+
// Mock change profle requests
132+
when(FakeAuthResult.INSTANCE.getUser()
133+
.updateProfile(any(UserProfileChangeRequest.class)))
134+
.thenReturn(new AutoCompleteTask<Void>(null, true, null));
135+
132136
Button button = (Button) registerEmailActivity.findViewById(R.id.button_create);
133137
button.performClick();
134138

139+
// Verify create user request
140+
verify(AuthHelperShadow.sFirebaseAuth).createUserWithEmailAndPassword(
141+
TestConstants.EMAIL,
142+
TestConstants.PASSWORD);
143+
144+
// After create user request, should try to update profile with name
145+
ArgumentCaptor<UserProfileChangeRequest> changeRequestCaptor =
146+
ArgumentCaptor.forClass(UserProfileChangeRequest.class);
147+
verify(FakeAuthResult.INSTANCE.getUser()).updateProfile(changeRequestCaptor.capture());
148+
assertEquals(changeRequestCaptor.getValue().getDisplayName(), TestConstants.NAME);
149+
150+
// Finally, the new credential should be saved to SmartLock
135151
TestHelper.verifySmartLockSave(
136152
EmailAuthProvider.PROVIDER_ID,
137153
TestConstants.EMAIL,

auth/src/test/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPromptTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
import android.widget.Button;
2020
import android.widget.EditText;
2121

22+
import com.firebase.ui.auth.AuthUI;
2223
import com.firebase.ui.auth.BuildConfig;
2324
import com.firebase.ui.auth.IdpResponse;
2425
import com.firebase.ui.auth.R;
2526
import com.firebase.ui.auth.User;
2627
import com.firebase.ui.auth.testhelpers.AuthHelperShadow;
2728
import com.firebase.ui.auth.testhelpers.AutoCompleteTask;
28-
import com.firebase.ui.auth.testhelpers.CustomRobolectricGradleTestRunner;
2929
import com.firebase.ui.auth.testhelpers.FakeAuthResult;
3030
import com.firebase.ui.auth.testhelpers.TestConstants;
3131
import com.firebase.ui.auth.testhelpers.TestHelper;
@@ -36,6 +36,7 @@
3636
import org.junit.Test;
3737
import org.junit.runner.RunWith;
3838
import org.robolectric.Robolectric;
39+
import org.robolectric.RobolectricTestRunner;
3940
import org.robolectric.RuntimeEnvironment;
4041
import org.robolectric.Shadows;
4142
import org.robolectric.annotation.Config;
@@ -50,7 +51,7 @@
5051
import static org.mockito.Mockito.verify;
5152
import static org.mockito.Mockito.when;
5253

53-
@RunWith(CustomRobolectricGradleTestRunner.class)
54+
@RunWith(RobolectricTestRunner.class)
5455
@Config(constants = BuildConfig.class, sdk = 25)
5556
public class WelcomeBackPasswordPromptTest {
5657
@Before
@@ -61,14 +62,13 @@ public void setUp() {
6162
private WelcomeBackPasswordPrompt createActivity() {
6263
Intent startIntent = WelcomeBackPasswordPrompt.createIntent(
6364
RuntimeEnvironment.application,
64-
TestHelper.getFlowParameters(Collections.<String>emptyList()),
65+
TestHelper.getFlowParameters(Collections.singletonList(AuthUI.EMAIL_PROVIDER)),
6566
new IdpResponse.Builder(
6667
new User.Builder(EmailAuthProvider.PROVIDER_ID, TestConstants.EMAIL)
6768
.build())
6869
.build());
6970
return Robolectric
70-
.buildActivity(WelcomeBackPasswordPrompt.class)
71-
.withIntent(startIntent)
71+
.buildActivity(WelcomeBackPasswordPrompt.class, startIntent)
7272
.create()
7373
.visible()
7474
.get();

0 commit comments

Comments
 (0)