package com.example.orders import androidx.test.core.app.ActivityScenario import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.LargeTest import com.example.orders.net.NetworkConfig import java.util.concurrent.TimeUnit import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) @LargeTest class OrderNetworkMockTest { private lateinit var server: MockWebServer @Before fun startServer() { server = MockWebServer() server.start() NetworkConfig.testBaseUrl = server.url("/") AppGraph.resetForTests() } @After fun stopServer() { NetworkConfig.resetForTests() AppGraph.resetForTests() server.shutdown() } @Test fun openOrdersShowsMockedOrder() { server.enqueue( MockResponse() .setResponseCode(200) .setHeader("Content-Type", "application/json") .setBody( """ { "orders": [ { "id": "A-104", "title": "Coffee beans", "status": "Ready" } ] } """.trimIndent() ) ) val scenario = ActivityScenario.launch(OrderActivity::class.java) try { onView(withId(R.id.loadOrdersButton)).perform(click()) onView(withId(R.id.orderTitle)) .check(matches(withText("Coffee beans"))) onView(withId(R.id.orderStatus)) .check(matches(withText("Ready"))) } finally { scenario.close() } val request = server.takeRequest(2, TimeUnit.SECONDS) assertEquals("/orders", request?.path) } }