tests: add test for onboarding permissions behavior for Android < R

This commit is contained in:
Akash Yadav
2024-01-12 19:17:52 +05:30
parent 2775702f2e
commit a4daca4fd4
4 changed files with 52 additions and 16 deletions
+26
View File
@@ -97,6 +97,19 @@
</AndroidTestResultsTableState>
</value>
</entry>
<entry key="-51454562">
<value>
<AndroidTestResultsTableState>
<option name="preferredColumnWidths">
<map>
<entry key="Duration" value="90" />
<entry key="Pixel_4_XL_API_27" value="120" />
<entry key="Tests" value="360" />
</map>
</option>
</AndroidTestResultsTableState>
</value>
</entry>
<entry key="123996994">
<value>
<AndroidTestResultsTableState>
@@ -111,6 +124,19 @@
</AndroidTestResultsTableState>
</value>
</entry>
<entry key="427304299">
<value>
<AndroidTestResultsTableState>
<option name="preferredColumnWidths">
<map>
<entry key="Duration" value="90" />
<entry key="Pixel_4_XL_API_27" value="120" />
<entry key="Tests" value="360" />
</map>
</option>
</AndroidTestResultsTableState>
</value>
</entry>
<entry key="462596792">
<value>
<AndroidTestResultsTableState>
@@ -45,6 +45,7 @@ import com.itsaky.androidide.testing.android.hasObjectWithText
import com.itsaky.androidide.testing.android.launchAndroidIDE
import com.itsaky.androidide.testing.android.stringRes
import com.itsaky.androidide.testing.android.uiAutomation
import com.itsaky.androidide.utils.isAtLeastR
import com.itsaky.androidide.utils.isAtLeastT
import org.junit.FixMethodOrder
import org.junit.Rule
@@ -200,7 +201,11 @@ class OnboardingActivityBehaviorTest {
grantButton.clickAndWaitForNewWindow()
// check permission denied behavior
device.handleAndroidRPermissions(false)
if (permissionDesc == R.string.permission_desc_install_packages || isAtLeastR()) {
device.handlePermissionInSettings(false)
} else {
device.getObjectWithText("DENY").clickAndWaitForWindowUpdate(device)
}
// verify AndroidIDE is visible
assertThat(device.currentPackageName).isEqualTo(BuildInfo.PACKAGE_NAME)
@@ -218,7 +223,11 @@ class OnboardingActivityBehaviorTest {
grantButton.clickAndWaitForNewWindow()
// check permission granted behavior
device.handleAndroidRPermissions(true)
if (permissionDesc == R.string.permission_desc_install_packages || isAtLeastR()) {
device.handlePermissionInSettings(true)
} else {
device.getObjectWithText("ALLOW").clickAndWaitForWindowUpdate(device)
}
grantButton = device.getObjectWithText(permissionDesc)
.parent!!
@@ -18,14 +18,12 @@
package com.itsaky.androidide.activities
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.FlakyTest
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.adevinta.android.barista.assertion.BaristaCheckedAssertions.assertChecked
import com.adevinta.android.barista.assertion.BaristaCheckedAssertions.assertUnchecked
import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertDisabled
import com.adevinta.android.barista.assertion.BaristaEnabledAssertions.assertEnabled
import com.adevinta.android.barista.assertion.BaristaRecyclerViewAssertions.assertRecyclerViewItemCount
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertDisplayed
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertNotDisplayed
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickBack
@@ -34,7 +32,6 @@ import com.adevinta.android.barista.rule.BaristaRule
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.R
import com.itsaky.androidide.preferences.internal.statOptIn
import com.itsaky.androidide.testing.android.launchAndroidIDE
import com.itsaky.androidide.testing.android.stringRes
import org.junit.FixMethodOrder
import org.junit.Rule
@@ -22,13 +22,13 @@ import android.widget.Switch
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.UiSelector
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.R
import com.itsaky.androidide.testing.android.clickAndWaitForNewWindow
import com.itsaky.androidide.testing.android.clickAndWaitForWindowUpdate
import com.itsaky.androidide.testing.android.getObjectWithText
import com.itsaky.androidide.testing.android.hasObjectWithText
import com.itsaky.androidide.utils.isAtLeastR
/**
* @author Akash Yadav
@@ -52,8 +52,12 @@ fun UiDevice.grantAndroidIDEPermissions() {
.findObject(By.clazz(Button::class.java))
if (grantButton.text != null) {
grantButton.clickAndWaitForNewWindow()
handleAndroidRPermissions(allowPermission = true)
if (desc == R.string.permission_desc_install_packages || isAtLeastR()) {
grantButton.clickAndWaitForNewWindow()
handlePermissionInSettings(allowPermission = true)
} else {
getObjectWithText("ALLOW").clickAndWaitForWindowUpdate(this)
}
}
}
@@ -65,26 +69,26 @@ fun UiDevice.nextButton(): UiObject2 {
return findObject(By.desc("NEXT"))!!
}
fun UiDevice.handleAndroidRPermissions(
fun UiDevice.handlePermissionInSettings(
allowPermission: Boolean = true,
) {
assertThat(currentPackageName).isAnyOf("com.android.settings", "com.android.permissioncontroller")
assertThat(hasObjectWithText(R.string.app_name)).isTrue()
val storageSwitch = findObject(UiSelector().className(Switch::class.java))
assertThat(storageSwitch).isNotNull()
val switch = findObject(By.clazz(Switch::class.java))
assertThat(switch).isNotNull()
// verify initial state
assertThat(storageSwitch.isCheckable).isTrue()
assertThat(storageSwitch.isEnabled).isTrue()
assertThat(storageSwitch.isChecked).isFalse()
assertThat(switch.isCheckable).isTrue()
assertThat(switch.isEnabled).isTrue()
assertThat(switch.isChecked).isFalse()
if (allowPermission) {
// enable permission
storageSwitch.click()
switch.click()
// verify changed state
assertThat(storageSwitch.isChecked).isTrue()
assertThat(switch.isChecked).isTrue()
}
// navigate back without enabling the permission