Skip to content

Instantly share code, notes, and snippets.

@ininmm
Created October 12, 2019 12:52
Show Gist options
  • Save ininmm/528495e72981ce8ec4892cf00d0a450b to your computer and use it in GitHub Desktop.
Save ininmm/528495e72981ce8ec4892cf00d0a450b to your computer and use it in GitHub Desktop.
Write a api test
@ExperimentalCoroutinesApi
class SearchServiceTest {
......
@Test
fun searchRepoThenResponse() {
val query = "coil+org:coil-kt"
enqueueResponse("search-repo.json")
val response = runBlocking {
service.searchRepo(query)
}
val request = mockWebServer.takeRequest()
assertThat(request.path, `is`("/search/repositories?q=$query"))
val items = response.items
assertThat(items.size, `is`(1))
assertThat(items[0].name, `is`("coil"))
assertThat(items[0].fullName, `is`("coil-kt/coil"))
assertThat(items[0].gitUrl, `is`("git://github.com/coil-kt/coil.git"))
assertThat(items[0].owner.login, `is`("coil-kt"))
}
private fun enqueueResponse(fileName: String, headers: Map<String, String> = emptyMap()) {
val classloader = javaClass.classLoader
val inputStream = classloader.getResourceAsStream("api-response/$fileName")
val source = Okio.buffer(Okio.source(inputStream))
val mockResponse = MockResponse()
for ((key, value) in headers) {
mockResponse.addHeader(key, value)
}
mockWebServer.enqueue(
mockResponse
.setBody(source.readString(Charsets.UTF_8))
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment