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

Commit 5c45bf6

Browse files
authored
Add tests for requestPermissions (#227)
2 parents 55c8ddf + c8b35e6 commit 5c45bf6

File tree

6 files changed

+438
-11
lines changed

6 files changed

+438
-11
lines changed

easypermissions/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ 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.robolectric:shadows-supportv4:3.8'
40+
testImplementation 'org.mockito:mockito-core:2.18.0'
3941
}
4042

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

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

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,29 @@
22

33
import android.Manifest;
44

5+
import org.junit.Before;
56
import org.junit.Test;
67
import org.junit.runner.RunWith;
8+
import org.mockito.ArgumentCaptor;
9+
import org.mockito.Captor;
10+
import org.mockito.Mockito;
11+
import org.mockito.MockitoAnnotations;
12+
import org.robolectric.Robolectric;
713
import org.robolectric.RobolectricTestRunner;
814
import org.robolectric.RuntimeEnvironment;
915
import org.robolectric.annotation.Config;
16+
import org.robolectric.shadows.ShadowApplication;
17+
import org.robolectric.shadows.support.v4.SupportFragmentController;
18+
19+
import java.util.ArrayList;
20+
21+
import pub.devrel.easypermissions.testhelper.TestActivity;
22+
import pub.devrel.easypermissions.testhelper.TestFragment;
23+
import pub.devrel.easypermissions.testhelper.TestSupportFragment;
1024

1125
import static com.google.common.truth.Truth.assertThat;
26+
import static org.mockito.Mockito.times;
27+
import static org.mockito.Mockito.verify;
1228

1329
/**
1430
* Low-API (SDK = 19) tests for {@link pub.devrel.easypermissions.EasyPermissions}.
@@ -17,10 +33,71 @@
1733
@Config(sdk = 19)
1834
public class EasyPermissionsLowApiTest {
1935

36+
private static final int REQUEST_CODE = 5;
37+
private static final String RATIONALE = "RATIONALE";
38+
private static final String[] ALL_PERMS = new String[]{
39+
Manifest.permission.READ_SMS, Manifest.permission.ACCESS_FINE_LOCATION};
40+
41+
private TestActivity spyActivity;
42+
private TestFragment spyFragment;
43+
private TestSupportFragment spySupportFragment;
44+
@Captor
45+
private ArgumentCaptor<Integer> integerCaptor;
46+
@Captor
47+
private ArgumentCaptor<ArrayList<String>> listCaptor;
48+
49+
@Before
50+
public void setUp() {
51+
MockitoAnnotations.initMocks(this);
52+
setUpActivityAndFragment();
53+
}
54+
2055
@Test
2156
public void shouldHavePermission_whenHasPermissionsBeforeMarshmallow() {
22-
// On low-API devices, we should always get 'true' when we call 'hasPermissions'
2357
assertThat(EasyPermissions.hasPermissions(RuntimeEnvironment.application,
2458
Manifest.permission.ACCESS_COARSE_LOCATION)).isTrue();
2559
}
60+
61+
@Test
62+
public void shouldCallbackOnPermissionGranted_whenRequestFromActivity() {
63+
EasyPermissions.requestPermissions(spyActivity, RATIONALE, REQUEST_CODE, ALL_PERMS);
64+
65+
verify(spyActivity, times(1))
66+
.onPermissionsGranted(integerCaptor.capture(), listCaptor.capture());
67+
assertThat(integerCaptor.getValue()).isEqualTo(REQUEST_CODE);
68+
assertThat(listCaptor.getValue()).containsAllIn(ALL_PERMS);
69+
}
70+
71+
@Test
72+
public void shouldCallbackOnPermissionGranted_whenRequestFromFragment() {
73+
EasyPermissions.requestPermissions(spyFragment, RATIONALE, REQUEST_CODE, ALL_PERMS);
74+
75+
verify(spyFragment, times(1))
76+
.onPermissionsGranted(integerCaptor.capture(), listCaptor.capture());
77+
assertThat(integerCaptor.getValue()).isEqualTo(REQUEST_CODE);
78+
assertThat(listCaptor.getValue()).containsAllIn(ALL_PERMS);
79+
}
80+
81+
@Test
82+
public void shouldCallbackOnPermissionGranted_whenRequestFromSupportedFragment() {
83+
EasyPermissions.requestPermissions(spySupportFragment, RATIONALE, REQUEST_CODE, ALL_PERMS);
84+
85+
verify(spySupportFragment, times(1))
86+
.onPermissionsGranted(integerCaptor.capture(), listCaptor.capture());
87+
assertThat(integerCaptor.getValue()).isEqualTo(REQUEST_CODE);
88+
assertThat(listCaptor.getValue()).containsAllIn(ALL_PERMS);
89+
}
90+
91+
private void setUpActivityAndFragment() {
92+
TestActivity activity = Robolectric.buildActivity(TestActivity.class)
93+
.create().start().resume().get();
94+
TestFragment fragment = Robolectric.buildFragment(TestFragment.class)
95+
.create().start().resume().get();
96+
TestSupportFragment supportFragment = SupportFragmentController.of(new TestSupportFragment())
97+
.create().start().resume().get();
98+
99+
spyActivity = Mockito.spy(activity);
100+
spyFragment = Mockito.spy(fragment);
101+
spySupportFragment = Mockito.spy(supportFragment);
102+
}
26103
}

0 commit comments

Comments
 (0)