From bad34308bbe18b19717b7b56515f2d692e3fd7e5 Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Mon, 13 Jan 2025 15:59:25 +0100 Subject: [PATCH] [ADFA-320] - add Permissions Screen Test --- .../androidide/PermissionsScreenTest.kt | 121 ++++++++++++++++++ .../androidide/screens/PermissionScreen.kt | 31 +++++ .../screens/SystemPermissionsScreen.kt | 11 ++ 3 files changed, 163 insertions(+) create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/screens/PermissionScreen.kt create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/screens/SystemPermissionsScreen.kt diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt new file mode 100644 index 0000000000..7d331b71ed --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt @@ -0,0 +1,121 @@ +package com.itsaky.androidide + +import androidx.test.espresso.matcher.ViewMatchers.isNotEnabled +import androidx.test.ext.junit.rules.activityScenarioRule +import com.itsaky.androidide.activities.SplashActivity +import com.itsaky.androidide.screens.OnboardingScreen +import com.itsaky.androidide.screens.PermissionScreen +import com.itsaky.androidide.screens.SystemPermissionsScreen +import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.Assert.assertEquals +import org.junit.Rule +import org.junit.Test + +class PermissionsScreenTest : TestCase() { + + @get:Rule + val activityRule = activityScenarioRule() + + @Test + fun test_permissionsScreen_greenCheckMarksAppearCorrectly() = run { + step("Click continue button on the Welcome Screen") { + OnboardingScreen.nextButton { + isVisible() + isClickable() + click() + } + } + step("Verify items on the Permission Screen") { + PermissionScreen { + title { + isVisible() + } + subTitle { + isVisible() + } + assertEquals(2, rvPermissions.getSize()) + rvPermissions { + childAt(0) { + title { + isVisible() + hasText(R.string.permission_title_storage) + } + description { + isVisible() + hasText(R.string.permission_desc_storage) + } + grantButton { + isVisible() + isClickable() + hasText(R.string.title_grant) + } + } + childAt(1) { + title { + isVisible() + hasText(R.string.permission_title_install_packages) + } + description { + isVisible() + hasText(R.string.permission_desc_install_packages) + } + grantButton { + isVisible() + isClickable() + hasText(R.string.title_grant) + } + } + } + } + } + step("Grant permissions") { + PermissionScreen { + rvPermissions { + childAt(0) { + grantButton.click() + } + } + + SystemPermissionsScreen { + storagePermissionView { + click() + } + } + + device.uiDevice.pressBack() + + rvPermissions { + childAt(1) { + grantButton.click() + } + } + + SystemPermissionsScreen { + installPackagesPermission { + click() + } + } + + device.uiDevice.pressBack() + } + } + step("Confirm that all menu items don't have allow text") { + PermissionScreen { + rvPermissions { + childAt(0) { + grantButton { + isNotEnabled() + hasEmptyText() + } + } + childAt(1) { + grantButton { + hasEmptyText() + isNotEnabled() + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/PermissionScreen.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/PermissionScreen.kt new file mode 100644 index 0000000000..42360355cf --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/PermissionScreen.kt @@ -0,0 +1,31 @@ +package com.itsaky.androidide.screens + +import android.view.View +import com.itsaky.androidide.R +import com.kaspersky.kaspresso.screens.KScreen +import io.github.kakaocup.kakao.recycler.KRecyclerItem +import io.github.kakaocup.kakao.recycler.KRecyclerView +import io.github.kakaocup.kakao.text.KButton +import io.github.kakaocup.kakao.text.KTextView +import org.hamcrest.Matcher + +object PermissionScreen : KScreen() { + + override val layoutId: Int? = null + override val viewClass: Class<*>? = null + + val title = KTextView { withText(R.string.onboarding_title_permissions) } + val subTitle = KTextView { withText(R.string.onboarding_subtitle_permissions) } + + val rvPermissions = KRecyclerView( + builder = { withId(R.id.onboarding_items) }, + itemTypeBuilder = { itemType(::PermissionItem) } + ) + + class PermissionItem(matcher: Matcher) : KRecyclerItem(matcher) { + + val grantButton = KButton(matcher) { withId(R.id.grant_button) } + val title = KTextView(matcher) { withId(R.id.title) } + val description = KTextView(matcher) { withId(R.id.description) } + } +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/SystemPermissionsScreen.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/SystemPermissionsScreen.kt new file mode 100644 index 0000000000..b4dbf759fb --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/SystemPermissionsScreen.kt @@ -0,0 +1,11 @@ +package com.itsaky.androidide.screens + +import com.kaspersky.components.kautomator.component.common.views.UiView +import com.kaspersky.components.kautomator.screen.UiScreen + +object SystemPermissionsScreen : UiScreen() { + override val packageName: String = "com.android.settings" + + val storagePermissionView = UiView { withText("Allow access to manage all files") } + val installPackagesPermission = UiView { withText("Allow from this source") } +} \ No newline at end of file