mirror of
https://github.com/hmalik144/Weather-apps.git
synced 2026-03-18 07:26:04 +00:00
Test suite expansion (#20)
- Code inspection - Redundant resources removed - Resources moved the corresponding flavours - Deprecated dependencies upgraded - lint changes - circleci updated to capture screenshot - Testsuite expansion
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package com.appttude.h_mal.monoWeather.robot
|
||||
|
||||
import com.appttude.h_mal.atlas_weather.BaseTestRobot
|
||||
import com.appttude.h_mal.atlas_weather.R
|
||||
|
||||
fun addLocation(func: AddLocationScreenRobot.() -> Unit) = AddLocationScreenRobot().apply { func() }
|
||||
class AddLocationScreenRobot : BaseTestRobot() {
|
||||
fun setLocation(location: String) =
|
||||
fillEditText(R.id.location_name_tv, location)
|
||||
|
||||
fun submit() = clickButton(R.id.submit)
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.appttude.h_mal.monoWeather.robot
|
||||
|
||||
import androidx.test.espresso.action.ViewActions.click
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||
import com.appttude.h_mal.atlas_weather.BaseTestRobot
|
||||
import com.appttude.h_mal.atlas_weather.R
|
||||
import com.appttude.h_mal.atlas_weather.helpers.EspressoHelper
|
||||
|
||||
fun container(func: ContainerRobot.() -> Unit) = ContainerRobot().apply { func() }
|
||||
class ContainerRobot : BaseTestRobot() {
|
||||
|
||||
fun tapTabInBottomBar(tab: Tab) {
|
||||
when (tab) {
|
||||
Tab.WORLD -> EspressoHelper.waitForView(withId(R.id.nav_world))
|
||||
Tab.HOME -> EspressoHelper.waitForView(withId(R.id.nav_home))
|
||||
}.perform(click())
|
||||
}
|
||||
|
||||
enum class Tab {
|
||||
HOME,
|
||||
WORLD
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,17 @@ package com.appttude.h_mal.monoWeather.robot
|
||||
import com.appttude.h_mal.atlas_weather.BaseTestRobot
|
||||
import com.appttude.h_mal.atlas_weather.R
|
||||
|
||||
fun homeScreen(func: HomeScreenRobot.() -> Unit) = HomeScreenRobot().apply { func() }
|
||||
class HomeScreenRobot : BaseTestRobot() {
|
||||
fun weatherScreen(func: WeatherScreen.() -> Unit) = WeatherScreen().apply { func() }
|
||||
class WeatherScreen : BaseTestRobot() {
|
||||
fun verifyCurrentTemperature(temperature: Int) =
|
||||
matchText(R.id.temp_main_4, temperature.toString())
|
||||
|
||||
fun verifyCurrentLocation(location: String) = matchText(R.id.location_main_4, location)
|
||||
fun refresh() = pullToRefresh(R.id.swipe_refresh)
|
||||
fun isDisplayed() = matchViewWaitFor(R.id.temp_main_4)
|
||||
|
||||
fun verifyUnableToRetrieve() {
|
||||
matchText(R.id.header_text, R.string.retrieve_warning)
|
||||
matchText(R.id.body_text, R.string.empty_retrieve_warning)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.appttude.h_mal.monoWeather.robot
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||
import com.appttude.h_mal.atlas_weather.BaseTestRobot
|
||||
import com.appttude.h_mal.atlas_weather.R
|
||||
import com.appttude.h_mal.atlas_weather.helpers.EspressoHelper
|
||||
|
||||
fun world(func: WorldScreenRobot.() -> Unit) = WorldScreenRobot().apply { func() }
|
||||
class WorldScreenRobot : BaseTestRobot() {
|
||||
fun clickFab() = clickButton(R.id.floatingActionButton)
|
||||
fun clickItemInList(location: String) {
|
||||
EspressoHelper.waitForView(withId(R.id.world_recycler))
|
||||
clickViewInRecycler<RecyclerView.ViewHolder>(R.id.world_recycler, location)
|
||||
}
|
||||
|
||||
fun clickItemInListByPosition(position: Int) =
|
||||
clickViewInRecycler<RecyclerView.ViewHolder>(R.id.world_recycler, position)
|
||||
|
||||
fun emptyViewDisplayed() {
|
||||
matchText(R.id.body_text, R.string.retrieve_warning)
|
||||
matchText(R.id.header_text, R.string.empty_retrieve_warning)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.appttude.h_mal.monoWeather.tests
|
||||
|
||||
|
||||
import com.appttude.h_mal.atlas_weather.utils.Stubs
|
||||
import com.appttude.h_mal.monoWeather.MonoBaseTest
|
||||
import com.appttude.h_mal.monoWeather.robot.weatherScreen
|
||||
import org.junit.Test
|
||||
|
||||
class HomePageNoDataUITest : MonoBaseTest() {
|
||||
|
||||
override fun beforeLaunch() {
|
||||
stubEndpoint("https://api.openweathermap.org/data/2.5/onecall", Stubs.InvalidKey, 400)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun loadApp_invalidKeyWeatherResponse_returnsEmptyViewPage() {
|
||||
weatherScreen {
|
||||
// verify empty
|
||||
verifyUnableToRetrieve()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun invalidKeyWeatherResponse_swipeToRefresh_returnsValidPage() {
|
||||
weatherScreen {
|
||||
// verify empty
|
||||
verifyUnableToRetrieve()
|
||||
|
||||
stubEndpoint("https://api.openweathermap.org/data/2.5/onecall", Stubs.Metric)
|
||||
refresh()
|
||||
verifyCurrentTemperature(2)
|
||||
verifyCurrentLocation("Mock Location")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,18 +3,18 @@ package com.appttude.h_mal.monoWeather.tests
|
||||
|
||||
import com.appttude.h_mal.atlas_weather.utils.Stubs
|
||||
import com.appttude.h_mal.monoWeather.MonoBaseTest
|
||||
import com.appttude.h_mal.monoWeather.robot.homeScreen
|
||||
import com.appttude.h_mal.monoWeather.robot.weatherScreen
|
||||
import org.junit.Test
|
||||
|
||||
class HomePageUITest : MonoBaseTest() {
|
||||
|
||||
override fun beforeLaunch() {
|
||||
stubEndpoint("https://api.openweathermap.org/data/2.5/onecall", Stubs.Valid)
|
||||
stubEndpoint("https://api.openweathermap.org/data/2.5/onecall", Stubs.Metric)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun loadApp_validWeatherResponse_returnsValidPage() {
|
||||
homeScreen {
|
||||
weatherScreen {
|
||||
isDisplayed()
|
||||
verifyCurrentTemperature(2)
|
||||
verifyCurrentLocation("Mock Location")
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.appttude.h_mal.monoWeather.tests
|
||||
|
||||
|
||||
import com.appttude.h_mal.atlas_weather.utils.Stubs
|
||||
import com.appttude.h_mal.monoWeather.MonoBaseTest
|
||||
import com.appttude.h_mal.monoWeather.robot.ContainerRobot.Tab.WORLD
|
||||
import com.appttude.h_mal.monoWeather.robot.addLocation
|
||||
import com.appttude.h_mal.monoWeather.robot.container
|
||||
import com.appttude.h_mal.monoWeather.robot.weatherScreen
|
||||
import com.appttude.h_mal.monoWeather.robot.world
|
||||
import org.junit.Test
|
||||
|
||||
class WorldPageUITest : MonoBaseTest() {
|
||||
|
||||
override fun beforeLaunch() {
|
||||
stubEndpoint("https://api.openweathermap.org/data/2.5/onecall", Stubs.Metric)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun loadApp_addNewLocation_returnsValidPage() {
|
||||
container {
|
||||
tapTabInBottomBar(WORLD)
|
||||
}
|
||||
world {
|
||||
clickFab()
|
||||
}
|
||||
addLocation {
|
||||
stubEndpoint("https://api.openweathermap.org/data/2.5/onecall", Stubs.Sydney)
|
||||
stubLocation("Sydney", -33.89, -151.12)
|
||||
setLocation("Sydney")
|
||||
submit()
|
||||
}
|
||||
world {
|
||||
clickItemInList("Sydney")
|
||||
}
|
||||
weatherScreen {
|
||||
isDisplayed()
|
||||
verifyCurrentTemperature(12)
|
||||
verifyCurrentLocation("Sydney")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user