Add otus directory with OtusIntroTest, OtusSettingTest, AboutScreen, IntroScreen, SettingScreen. Add androidTestImplementations for Kaspresso. Update testInstrumentationRunner for Kaspresso.

pull/2093/head
Бардашёва Юлия 8 months ago
parent fc9cc423d0
commit 48a4b9ffa1

@ -53,7 +53,7 @@ android {
targetSdk = 34
// targetSdkPreview = "VanillaIceCream"
applicationId = "org.isoron.uhabits"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunner = "com.kaspersky.kaspresso.runner.KaspressoRunner"
}
signingConfigs {
@ -117,6 +117,9 @@ dependencies {
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
androidTestImplementation("androidx.test:rules:1.5.0")
androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
androidTestImplementation("com.kaspersky.android-components:kaspresso:1.5.1")
androidTestImplementation("com.kaspersky.android-components:kaspresso-allure-support:1.5.1")
androidTestImplementation("com.kaspersky.android-components:kaspresso-compose-support:1.5.1")
compileOnly("javax.annotation:jsr250-api:1.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
implementation("com.github.AppIntro:AppIntro:6.3.1")

@ -0,0 +1,20 @@
package org.isoron.uhabits.otus
import com.kaspersky.kaspresso.screens.KScreen
import org.isoron.uhabits.R
import io.github.kakaocup.kakao.text.KTextView
object AboutScreen : KScreen<AboutScreen>() {
override val layoutId: Int? = null
override val viewClass: Class<*>? = null
val tvVersion = KTextView { withId(R.id.tvVersion) }
val tvRate = KTextView { withId(R.id.tvRate) }
val tvFeedback = KTextView { withId(R.id.tvFeedback) }
val tvTranslate = KTextView { withId(R.id.tvTranslate) }
val tvSource = KTextView { withId(R.id.tvSource) }
val tvPrivacy = KTextView { withId(R.id.tvPrivacy) }
}

@ -0,0 +1,30 @@
package org.isoron.uhabits.otus
import com.kaspersky.kaspresso.screens.KScreen
import org.isoron.uhabits.R
import io.github.kakaocup.kakao.text.KTextView
import io.github.kakaocup.kakao.bottomnav.KBottomNavigationView
import io.github.kakaocup.kakao.image.KImageView
import io.github.kakaocup.kakao.text.KButton
object IntroScreen : KScreen<IntroScreen>() {
override val layoutId: Int? = null
override val viewClass: Class<*>? = null
val bottom = KBottomNavigationView { withId(R.id.bottom) }
val back = KButton { withId(R.id.back) }
val done = KButton { withId(R.id.done) }
val next = KButton { withId(R.id.next) }
val skip = KButton { withId(R.id.skip) }
}

@ -0,0 +1,111 @@
package org.isoron.uhabits.otus
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.kaspersky.components.alluresupport.interceptors.step.AllureMapperStepInterceptor
import com.kaspersky.components.alluresupport.interceptors.testrun.DumpLogcatTestInterceptor
import com.kaspersky.kaspresso.kaspresso.Kaspresso
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import org.isoron.uhabits.activities.intro.IntroActivity
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class OtusIntroTest: TestCase(kaspressoBuilder = Kaspresso.Builder.simple(
customize = {
if (isAndroidRuntime) {
UiDevice
.getInstance(instrumentation)
.executeShellCommand("appops set --uid ${InstrumentationRegistry.getInstrumentation().targetContext.packageName} MANAGE_EXTERNAL_STORAGE allow")
}
}
).apply {
stepWatcherInterceptors.addAll(
listOf(
AllureMapperStepInterceptor()
)
)
testRunWatcherInterceptors.addAll (
listOf(
DumpLogcatTestInterceptor(logcatDumper)
)
)
}
) {
@get:Rule
val activityScenarioRule = ActivityScenarioRule(IntroActivity::class.java)
@Test
fun test_checkElementsOnAllIntroScreens() = run {
step("Проверка 1 интро и переход на 2") {
IntroScreen {
bottom.isVisible()
skip.isVisible()
back.isInvisible()
done.isInvisible()
next.isVisible()
next.click()
}
}
step("Проверка 2 интро и переход на 3") {
IntroScreen {
bottom.isVisible()
skip.isVisible()
back.isInvisible()
done.isInvisible()
next.isVisible()
next.click()
}
}
step("Проверка 3 интро") {
IntroScreen {
bottom.isVisible()
skip.isInvisible()
back.isInvisible()
next.isInvisible()
done.isVisible()
done.click()
}
}
}
@Test
fun test_skipFromFirstIntro() = run {
step("Проверка отображения элементов на 1 интро и скип") {
IntroScreen {
bottom.isVisible()
skip.isVisible()
back.isInvisible()
done.isInvisible()
next.isVisible()
skip.click()
}
}
}
@Test
fun test_skipFromSecondIntro() = run {
step("Проверка отображения элеметов на 1 интро и переход ко 2") {
IntroScreen {
bottom.isVisible()
skip.isVisible()
back.isInvisible()
done.isInvisible()
next.isVisible()
next.click()
}
}
step("Проверка отображения элементов на 2 интро и скип") {
IntroScreen {
bottom.isVisible()
skip.isVisible()
back.isInvisible()
done.isInvisible()
next.isVisible()
skip.click()
}
}
}
}

@ -0,0 +1,59 @@
package org.isoron.uhabits.otus
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import androidx.test.uiautomator.UiDevice
import com.kaspersky.components.alluresupport.interceptors.step.AllureMapperStepInterceptor
import com.kaspersky.components.alluresupport.interceptors.testrun.DumpLogcatTestInterceptor
import com.kaspersky.kaspresso.kaspresso.Kaspresso
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import org.isoron.uhabits.activities.settings.SettingsActivity
import org.junit.Assert
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class OtusSettingTest: TestCase(kaspressoBuilder = Kaspresso.Builder.simple(
customize = {
if (isAndroidRuntime) {
UiDevice
.getInstance(instrumentation)
.executeShellCommand("appops set --uid ${InstrumentationRegistry.getInstrumentation().targetContext.packageName} MANAGE_EXTERNAL_STORAGE allow")
}
}
).apply {
stepWatcherInterceptors.addAll(
listOf(
AllureMapperStepInterceptor()
)
)
testRunWatcherInterceptors.addAll (
listOf(
DumpLogcatTestInterceptor(logcatDumper)
)
)
}
) {
@get:Rule
val activityScenarioRule = ActivityScenarioRule(SettingsActivity::class.java)
@Test
fun test_checkToolbarAndCountElements() = run {
step("1") {
SettingScreen {
Assert.assertEquals(23, recyclerView.getSize())
}
}
step("2") {
SettingScreen {
toolbarSettings.isVisible()
}
}
}
}

@ -0,0 +1,26 @@
package org.isoron.uhabits.otus
import org.isoron.uhabits.R
import io.github.kakaocup.kakao.toolbar.KToolbar
import org.hamcrest.Matcher
import android.view.View
import com.kaspersky.kaspresso.screens.KScreen
import io.github.kakaocup.kakao.recycler.KRecyclerItem
import io.github.kakaocup.kakao.recycler.KRecyclerView
object SettingScreen: KScreen<SettingScreen>() {
override val layoutId: Int? = null
override val viewClass: Class<*>? = null
val toolbarSettings = KToolbar { withId(R.id.toolbar) }
val recyclerView = KRecyclerView(
builder = { withId(R.id.recycler_view) },
itemTypeBuilder = { itemType(::NoteSettingScreen) }
)
class NoteSettingScreen(matcher: Matcher<View>) : KRecyclerItem<NoteSettingScreen>(matcher) {
}
}
Loading…
Cancel
Save