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

Commit 6f3866e

Browse files
committed
tests: update onboarding permissions behavior tests
1 parent bb6a09a commit 6f3866e

File tree

4 files changed

+67
-9
lines changed

4 files changed

+67
-9
lines changed

.idea/androidTestResultsUserPreferences.xml

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityPermissionsBehaviorTest.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,6 @@ class OnboardingActivityPermissionsBehaviorTest {
9898
device.getObjectWithText("DENY").clickAndWaitForWindowUpdate(device)
9999
}
100100

101-
// verify AndroidIDE is visible
102-
assertThat(device.currentPackageName).isEqualTo(BuildInfo.PACKAGE_NAME)
103-
104101
grantButton = device.getObjectWithText(permissionDesc)
105102
.parent!!
106103
.parent!!

app/src/androidTest/java/com/itsaky/androidide/activities/OnboardingActivityStatesTest.kt

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,17 @@
1717

1818
package com.itsaky.androidide.activities
1919

20+
import android.Manifest
21+
import android.content.Context
22+
import android.content.Intent
23+
import android.net.Uri
24+
import android.provider.Settings
2025
import androidx.test.ext.junit.runners.AndroidJUnit4
2126
import androidx.test.platform.app.InstrumentationRegistry
27+
import androidx.test.rule.GrantPermissionRule
28+
import androidx.test.runner.permission.PermissionRequester
2229
import androidx.test.uiautomator.UiDevice
30+
import androidx.test.uiautomator.Until
2331
import com.adevinta.android.barista.assertion.BaristaCheckedAssertions.assertChecked
2432
import com.adevinta.android.barista.assertion.BaristaCheckedAssertions.assertUnchecked
2533
import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertDisabled
@@ -32,7 +40,10 @@ import com.adevinta.android.barista.rule.BaristaRule
3240
import com.google.common.truth.Truth.assertThat
3341
import com.itsaky.androidide.R
3442
import com.itsaky.androidide.preferences.internal.statOptIn
43+
import com.itsaky.androidide.testing.android.LAUNCH_TIMEOUT
44+
import com.itsaky.androidide.testing.android.getApplicationContext
3545
import com.itsaky.androidide.testing.android.stringRes
46+
import com.itsaky.androidide.utils.isAtLeastT
3647
import org.junit.FixMethodOrder
3748
import org.junit.Rule
3849
import org.junit.Test
@@ -52,6 +63,10 @@ class OnboardingActivityStatesTest {
5263
@Rule
5364
val baristaActivityRule = BaristaRule.create(OnboardingActivity::class.java)
5465

66+
@JvmField
67+
@Rule
68+
val grantPermissionsRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
69+
5570
@Test
5671
fun A_testOnboarding_welcomeScreen() {
5772
baristaActivityRule.launchActivity()
@@ -64,6 +79,8 @@ class OnboardingActivityStatesTest {
6479

6580
@Test
6681
fun B_testOnboarding_statConsentScreen() {
82+
tryGrantPermissions()
83+
6784
baristaActivityRule.launchActivity()
6885

6986
clickOn(R.id.next)
@@ -97,10 +114,12 @@ class OnboardingActivityStatesTest {
97114
@Test
98115
fun F_testOnboarding_toolsSetup() {
99116

117+
tryGrantPermissions()
118+
100119
baristaActivityRule.launchActivity()
101120

102-
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
103-
device.grantAndroidIDEPermissions()
121+
clickOn(R.id.next)
122+
clickOn(R.id.next)
104123

105124
assertDisplayed(stringRes(R.string.title_install_tools))
106125
assertDisplayed(stringRes(R.string.subtitle_install_tools))
@@ -139,4 +158,25 @@ class OnboardingActivityStatesTest {
139158
assertEnabled(R.id.sdk_version_layout)
140159
assertEnabled(R.id.jdk_version_layout)
141160
}
161+
162+
private fun tryGrantPermissions() {
163+
if (isAtLeastT()) {
164+
PermissionRequester().apply {
165+
addPermissions(Manifest.permission.POST_NOTIFICATIONS)
166+
requestPermissions()
167+
}
168+
}
169+
170+
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
171+
val context = getApplicationContext<Context>()
172+
173+
device.performActionAndWait({
174+
val intent = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
175+
Uri.parse("package:${context.packageName}"))
176+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
177+
context.startActivity(intent)
178+
}, Until.newWindow(), LAUNCH_TIMEOUT)
179+
180+
device.handlePermissionInSettings(true)
181+
}
142182
}

app/src/androidTest/java/com/itsaky/androidide/activities/onboardingUtils.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ fun UiDevice.nextButton(): UiObject2 {
7272
fun UiDevice.handlePermissionInSettings(
7373
allowPermission: Boolean = true,
7474
) {
75-
assertThat(currentPackageName).isAnyOf("com.android.settings", "com.android.permissioncontroller")
75+
assertThat(currentPackageName).startsWith("com.android.")
7676
assertThat(hasObjectWithText(R.string.app_name)).isTrue()
7777

7878
val switch = findObject(By.clazz(Switch::class.java))
@@ -81,14 +81,21 @@ fun UiDevice.handlePermissionInSettings(
8181
// verify initial state
8282
assertThat(switch.isCheckable).isTrue()
8383
assertThat(switch.isEnabled).isTrue()
84-
assertThat(switch.isChecked).isFalse()
8584

8685
if (allowPermission) {
87-
// enable permission
88-
switch.click()
86+
if (!switch.isChecked) {
87+
// enable permission
88+
switch.click()
89+
}
8990

9091
// verify changed state
9192
assertThat(switch.isChecked).isTrue()
93+
} else if (switch.isChecked) {
94+
// disable permission
95+
switch.click()
96+
97+
// verify changed state
98+
assertThat(switch.isChecked).isFalse()
9299
}
93100

94101
// navigate back without enabling the permission

0 commit comments

Comments
 (0)