Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.

Commit 1992ae9

Browse files
author
Henrique Faria
committed
Add tests for EasyPermissions.requestPermissions()
1 parent 55c8ddf commit 1992ae9

File tree

3 files changed

+114
-7
lines changed

3 files changed

+114
-7
lines changed

easypermissions/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ dependencies {
3636
testImplementation 'junit:junit:4.12'
3737
testImplementation 'com.google.truth:truth:0.42'
3838
testImplementation 'org.robolectric:robolectric:3.8'
39+
testImplementation 'org.mockito:mockito-core:2.18.0'
3940
}
4041

4142
// Needed in order to process Robolectric tests when running JaCoCo

easypermissions/src/test/java/pub/devrel/easypermissions/EasyPermissionsTest.java

Lines changed: 91 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,33 @@
22

33
import android.Manifest;
44
import android.app.Application;
5+
import android.app.Fragment;
56

67
import org.junit.Before;
78
import org.junit.Test;
89
import org.junit.runner.RunWith;
10+
import org.mockito.ArgumentCaptor;
11+
import org.mockito.Captor;
12+
import org.mockito.Mockito;
13+
import org.mockito.MockitoAnnotations;
14+
import org.robolectric.Robolectric;
915
import org.robolectric.RobolectricTestRunner;
1016
import org.robolectric.RuntimeEnvironment;
1117
import org.robolectric.annotation.Config;
1218
import org.robolectric.shadows.ShadowApplication;
1319

20+
import java.util.ArrayList;
21+
22+
import pub.devrel.easypermissions.testhelper.TestActivity;
23+
1424
import static com.google.common.truth.Truth.assertThat;
25+
import static junit.framework.Assert.fail;
26+
import static org.mockito.ArgumentMatchers.any;
27+
import static org.mockito.ArgumentMatchers.anyInt;
28+
import static org.mockito.Mockito.never;
29+
import static org.mockito.Mockito.times;
30+
import static org.mockito.Mockito.verify;
31+
import static org.mockito.Mockito.when;
1532

1633
/**
1734
* Basic Robolectric tests for {@link pub.devrel.easypermissions.EasyPermissions}.
@@ -20,33 +37,100 @@
2037
@Config(sdk = 23)
2138
public class EasyPermissionsTest {
2239

40+
private static final int REQUEST_CODE = 10;
41+
private static final String RATIONALE = "some rationale";
2342
private Application app;
24-
private String[] perms;
43+
private String[] allPerms;
44+
private String[] onePerm;
45+
private TestActivity spyActivity;
46+
@Captor private ArgumentCaptor<Integer> integerCaptor;
47+
@Captor private ArgumentCaptor<ArrayList<String>> listCaptor;
2548

2649
@Before
2750
public void setUp() {
51+
MockitoAnnotations.initMocks(this);
52+
2853
app = RuntimeEnvironment.application;
29-
perms = new String[]{
54+
spyActivity = Mockito.spy(Robolectric.buildActivity(TestActivity.class).get());
55+
allPerms = new String[]{
3056
Manifest.permission.READ_SMS,
3157
Manifest.permission.ACCESS_FINE_LOCATION
3258
};
59+
onePerm = new String[]{
60+
Manifest.permission.READ_SMS,
61+
};
3362
}
3463

3564
@Test
3665
public void shouldNotHavePermissions_whenNoPermissionsGranted() {
37-
assertThat(EasyPermissions.hasPermissions(app, perms)).isFalse();
66+
assertThat(EasyPermissions.hasPermissions(app, allPerms)).isFalse();
3867
}
3968

40-
4169
@Test
4270
public void shouldNotHavePermissions_whenNotAllPermissionsGranted() {
43-
ShadowApplication.getInstance().grantPermissions(perms[0]);
44-
assertThat(EasyPermissions.hasPermissions(app, perms)).isFalse();
71+
ShadowApplication.getInstance().grantPermissions(onePerm);
72+
assertThat(EasyPermissions.hasPermissions(app, allPerms)).isFalse();
4573
}
4674

4775
@Test
4876
public void shouldHavePermissions_whenAllPermissionsGranted() {
77+
ShadowApplication.getInstance().grantPermissions(allPerms);
78+
assertThat(EasyPermissions.hasPermissions(app, allPerms)).isTrue();
79+
}
80+
81+
@Test
82+
public void shouldThrowException_whenHasPermissionsWithNullContext() {
83+
try {
84+
EasyPermissions.hasPermissions(null, allPerms);
85+
fail("IllegalStateException expected because of null context.");
86+
} catch (IllegalArgumentException e) {
87+
assertThat(e).hasMessageThat()
88+
.isEqualTo("Can't check permissions for null context");
89+
}
90+
}
91+
92+
@Test
93+
public void shouldCallbackOnPermissionGranted_whenRequestAlreadyGrantedPermission() {
94+
grantPermissions(allPerms);
95+
96+
EasyPermissions.requestPermissions(spyActivity, RATIONALE, REQUEST_CODE, allPerms);
97+
98+
verify(spyActivity, times(1))
99+
.onPermissionsGranted(integerCaptor.capture(), listCaptor.capture());
100+
verify(spyActivity, never()).requestPermissions(any(String[].class), anyInt());
101+
assertThat(integerCaptor.getValue()).isEqualTo(REQUEST_CODE);
102+
assertThat(listCaptor.getValue()).containsAllIn(allPerms);
103+
}
104+
105+
@Test
106+
public void shouldRequestPermissions_whenMissingPermissionsAndShouldNotShowRationale() {
107+
grantPermissions(onePerm);
108+
showRationale(onePerm, false);
109+
110+
EasyPermissions.requestPermissions(spyActivity, RATIONALE, REQUEST_CODE, allPerms);
111+
112+
verify(spyActivity, times(1)).requestPermissions(allPerms, REQUEST_CODE);
113+
}
114+
115+
@Test
116+
public void shouldRequestPermissions_whenMissingPermissionsAndShouldShowRationale() {
117+
grantPermissions(onePerm);
118+
showRationale(onePerm, true);
119+
120+
EasyPermissions.requestPermissions(spyActivity, RATIONALE, REQUEST_CODE, allPerms);
121+
122+
Fragment dialog = spyActivity.getFragmentManager()
123+
.findFragmentByTag(RationaleDialogFragment.TAG);
124+
assertThat(dialog).isInstanceOf(RationaleDialogFragment.class);
125+
}
126+
127+
private void grantPermissions(String[] perms) {
49128
ShadowApplication.getInstance().grantPermissions(perms);
50-
assertThat(EasyPermissions.hasPermissions(app, perms)).isTrue();
129+
}
130+
131+
private void showRationale(String[] perms, boolean shouldShow) {
132+
for (String perm : perms) {
133+
when(spyActivity.shouldShowRequestPermissionRationale(perm)).thenReturn(shouldShow);
134+
}
51135
}
52136
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package pub.devrel.easypermissions.testhelper;
2+
3+
import android.app.Activity;
4+
import android.support.annotation.NonNull;
5+
6+
import java.util.List;
7+
8+
import pub.devrel.easypermissions.EasyPermissions;
9+
10+
public class TestActivity extends Activity implements EasyPermissions.PermissionCallbacks {
11+
12+
13+
@Override
14+
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
15+
16+
}
17+
18+
@Override
19+
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
20+
21+
}
22+
}

0 commit comments

Comments
 (0)