-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathWorldFragmentRobolectricTest.kt
132 lines (109 loc) · 4.85 KB
/
WorldFragmentRobolectricTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.jaimegc.covid19tracker.fragment
import androidx.fragment.app.testing.FragmentScenario
import androidx.fragment.app.testing.launchFragmentInContainer
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
import androidx.test.espresso.matcher.ViewMatchers.withId
import com.jaimegc.covid19tracker.R
import com.jaimegc.covid19tracker.ui.adapter.WorldCountryAdapter
import com.jaimegc.covid19tracker.ui.world.WorldFragment
import com.jaimegc.covid19tracker.matchers.RecyclerViewCompareSquareViewSizeMatcher.Companion.recyclerViewHasSameViewsSize
import com.jaimegc.covid19tracker.matchers.RecyclerViewConcatAdapterMatcher.Adapters
import com.jaimegc.covid19tracker.matchers.RecyclerViewConcatAdapterMatcher.Companion.recyclerViewHasAdapters
import com.jaimegc.covid19tracker.matchers.RecyclerViewItemsCountMatcher.Companion.recyclerViewHasItemCount
import com.jaimegc.covid19tracker.matchers.RecyclerViewItemsCountMatcher.Options
import com.jaimegc.covid19tracker.util.UIRobolectricTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.LooperMode
@RunWith(RobolectricTestRunner::class)
@LooperMode(LooperMode.Mode.PAUSED)
class WorldFragmentRobolectricTest : UIRobolectricTest() {
private lateinit var scenario: FragmentScenario<WorldFragment>
@Before
fun setUp() {
scenario = launchFragmentInContainer(themeResId = R.style.AppTheme)
}
@Test
fun worldInMenuListView_shouldHaveAtLeastTwoItems() {
onView(withId(R.id.list_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasItemCount(2, Options.GREATER_THAN_OR_EQUAL))
)
}
@Test
fun worldInBarChartView_shouldHaveAtLeastTwoItems() {
onView(withId(R.id.bar_chart_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasItemCount(2, Options.GREATER_THAN_OR_EQUAL))
)
}
@Test
fun worldInLineChartView_shouldHaveOneItem() {
onView(withId(R.id.line_chart_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasItemCount(1))
)
}
@Test
fun worldInPieChartView_shouldHaveAtLeastTwoItems() {
onView(withId(R.id.pie_chart_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasItemCount(2, Options.GREATER_THAN_OR_EQUAL))
)
}
@Test
fun worldInMenuListView_shouldHaveWorldAndWorldCountryAdapters() {
onView(withId(R.id.list_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasAdapters(listOf(Adapters.WORLD, Adapters.WORLD_COUNTRY)))
)
}
@Test
fun worldInMenuBarChartView_shouldHaveWorldBarAndWorldCountriesBarChartAdapters() {
onView(withId(R.id.bar_chart_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasAdapters(
listOf(Adapters.WORLD_BAR_CHART, Adapters.WORLD_COUNTRIES_BAR_CHART))
)
)
}
@Test
fun worldInMenuLineChartView_shouldHaveWorldLineChartAdapter() {
onView(withId(R.id.line_chart_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasAdapters(listOf(Adapters.WORLD_LINE_CHART)))
)
}
@Test
fun worldInMenuPieChartView_shouldHaveWorldPieAndWorldCountriesPieChartAdapters() {
onView(withId(R.id.pie_chart_view)).perform(click())
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasAdapters(
listOf(Adapters.WORLD_PIE_CHART, Adapters.WORLD_COUNTRIES_PIE_CHART))
)
)
}
@Test
fun clickOnWorldCountryAdapter_shouldExpandTheItem() {
val viewsSizeExpanded = 60
val worldCountryAdapterPosition = 1
onView(withId(R.id.recycler_world)).perform(
scrollToPosition<WorldCountryAdapter.WorldCountryViewHolder>(worldCountryAdapterPosition),
actionOnItemAtPosition<WorldCountryAdapter.WorldCountryViewHolder>(
worldCountryAdapterPosition, click()
)
)
onView(withId(R.id.recycler_world)).check(
matches(recyclerViewHasSameViewsSize(worldCountryAdapterPosition, mapOf(
R.id.ic_deaths to viewsSizeExpanded, R.id.ic_deaths to viewsSizeExpanded,
R.id.ic_recovered to viewsSizeExpanded, R.id.ic_open_cases to viewsSizeExpanded))
)
)
}
}