diff --git a/app/build.gradle b/app/build.gradle index bc65ed5..8dd4b50 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,5 +51,6 @@ dependencies { implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + androidTestImplementation 'com.kaspersky.android-components:kaspresso:1.4.2' + androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3' } diff --git a/app/src/androidTest/java/com/example/moviepicker/GenresListTest.kt b/app/src/androidTest/java/com/example/moviepicker/GenresListTest.kt new file mode 100644 index 0000000..db3efe1 --- /dev/null +++ b/app/src/androidTest/java/com/example/moviepicker/GenresListTest.kt @@ -0,0 +1,47 @@ +package com.example.moviepicker + +import androidx.test.ext.junit.rules.activityScenarioRule +import com.example.moviepicker.pages.GenresScreen +import com.example.moviepicker.pages.HomeScreen +import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.Assert +import org.junit.Rule +import org.junit.Test + +class GenresListTest : TestCase() { + private val genres = listOf( + "Мультфильмы", + "Триллеры", + "Комедии", + "Ужасы" + ) + + @get:Rule + val activityRule = activityScenarioRule() + + @Test + fun checkGenresScreen() = run { + step("Open genres screen") { + HomeScreen { + goToGenresTab() + } + } + step("Check genres count") { + GenresScreen { + Assert.assertEquals(genres.size, rvGenres.getSize()) + } + } + step("Check genres list") { + GenresScreen { + rvGenres { + for (i in genres.indices) { + childAt(i) { + genreButton.isVisible() + genreButton.hasText(genres[i]) + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/moviepicker/PopularMovieTest.kt b/app/src/androidTest/java/com/example/moviepicker/PopularMovieTest.kt new file mode 100644 index 0000000..e3c2568 --- /dev/null +++ b/app/src/androidTest/java/com/example/moviepicker/PopularMovieTest.kt @@ -0,0 +1,31 @@ +package com.example.moviepicker + +import androidx.test.ext.junit.rules.activityScenarioRule +import com.example.moviepicker.pages.HomeScreen +import com.example.moviepicker.pages.MovieScreen +import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.Rule +import org.junit.Test + +class PopularMovieTest : TestCase() { + private val movieIndex = 0 + private var title = "Звёздные войны: Эпизод 1 — Скрытая угроза" + + @get:Rule + val activityRule = activityScenarioRule() + + @Test + fun checkPopularMovieDescription() = run { + step("Open popular movie description") { + HomeScreen { + goToMovieDescription(movieIndex) + } + } + step("Check title in description") { + MovieScreen { + movieTitle.isVisible() + movieTitle.containsText(title) + } + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/moviepicker/pages/GenresScreen.kt b/app/src/androidTest/java/com/example/moviepicker/pages/GenresScreen.kt new file mode 100644 index 0000000..edffb96 --- /dev/null +++ b/app/src/androidTest/java/com/example/moviepicker/pages/GenresScreen.kt @@ -0,0 +1,25 @@ +package com.example.moviepicker.pages + +import android.view.View +import com.example.moviepicker.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 org.hamcrest.Matcher + +object GenresScreen : KScreen() { + override val layoutId: Int + get() = R.layout.fragment_genres + override val viewClass: Class<*>? + get() = null + + val rvGenres = KRecyclerView( + builder = { withId(R.id.genresRecyclerView) }, + itemTypeBuilder = { itemType(::GenreScreen) } + ) + + class GenreScreen(matcher: Matcher): KRecyclerItem(matcher) { + val genreButton = KButton(matcher) { withId(R.id.genreButton) } + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/moviepicker/pages/HomeScreen.kt b/app/src/androidTest/java/com/example/moviepicker/pages/HomeScreen.kt new file mode 100644 index 0000000..3cb7ad4 --- /dev/null +++ b/app/src/androidTest/java/com/example/moviepicker/pages/HomeScreen.kt @@ -0,0 +1,45 @@ +package com.example.moviepicker.pages + +import android.view.View +import com.example.moviepicker.R +import com.kaspersky.kaspresso.screens.KScreen +import io.github.kakaocup.kakao.common.views.KView +import io.github.kakaocup.kakao.recycler.KRecyclerItem +import io.github.kakaocup.kakao.recycler.KRecyclerView +import io.github.kakaocup.kakao.tabs.KTabLayout +import io.github.kakaocup.kakao.text.KTextView +import org.hamcrest.Matcher + + +object HomeScreen : KScreen() { + private val genresTabId = 1 + + override val layoutId + get() = R.layout.fragment_home + override val viewClass: Class<*>? + get() = null + + private val tabLayout = KTabLayout { withId(R.id.homeTabLayout) } + + private val rvPopularMovies = KRecyclerView( + builder = { withId(R.id.popularMoviesRecyclerView) }, + itemTypeBuilder = { itemType(::PopularMovieScreen) } + ) + + class PopularMovieScreen(matcher: Matcher): KRecyclerItem(matcher) { + val movieCard = KView(matcher) { withId(R.id.movieCard) } + val movieTitle = KTextView(matcher) { withId(R.id.movieTitle) } + } + + fun goToGenresTab() { + this.tabLayout.selectTab(genresTabId) + } + + fun goToMovieDescription(index: Int) { + rvPopularMovies.childAt(index) { + movieCard.isVisible() + movieCard.click() + } + } + +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/moviepicker/pages/MovieScreen.kt b/app/src/androidTest/java/com/example/moviepicker/pages/MovieScreen.kt new file mode 100644 index 0000000..70aad15 --- /dev/null +++ b/app/src/androidTest/java/com/example/moviepicker/pages/MovieScreen.kt @@ -0,0 +1,14 @@ +package com.example.moviepicker.pages + +import com.example.moviepicker.R +import com.kaspersky.kaspresso.screens.KScreen +import io.github.kakaocup.kakao.text.KTextView + +object MovieScreen : KScreen() { + override val layoutId: Int + get() = R.layout.fragment_description + override val viewClass: Class<*>? + get() = null + + val movieTitle = KTextView { withId(R.id.movieName) } +} \ No newline at end of file diff --git a/app/src/main/res/layout/genre_card.xml b/app/src/main/res/layout/genre_card.xml index bcad1ca..9fe224b 100644 --- a/app/src/main/res/layout/genre_card.xml +++ b/app/src/main/res/layout/genre_card.xml @@ -3,6 +3,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/genreContainer" >