Skip to content

Instantly share code, notes, and snippets.

@southerton81
Created July 2, 2020 11:20
Show Gist options
  • Save southerton81/7cdbfd10c59c7b58b7ad468c27dcb9b0 to your computer and use it in GitHub Desktop.
Save southerton81/7cdbfd10c59c7b58b7ad468c27dcb9b0 to your computer and use it in GitHub Desktop.
Retrofit2WithRxJava2TestCase
package com.example.myapplication
import io.reactivex.Observable
import okhttp3.mockwebserver.MockWebServer
import org.junit.Rule
import org.junit.Test
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.*
data class Item(val name: String)
class Retrofit2WithRxJava2TestCase {
@Rule
@JvmField
public val server: MockWebServer = MockWebServer()
interface Service {
@GET("/{path}")
fun getItem(
@Path(value = "path", encoded = true) path: String?
): Observable<Item>
@DELETE("/{path}")
fun deleteItem(
@Path(value = "path", encoded = true) path: String?
): Observable<Item>
}
@Test
@Throws(Exception::class)
fun test() {
val retrofit = Retrofit.Builder()
.baseUrl(server.url("/"))
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
val example = retrofit.create(Service::class.java)
server.enqueue(
okhttp3.mockwebserver.MockResponse()
.addHeader("Content-Type", "text/json")
.setBody("""{"name": "Name"}""")
)
server.enqueue(
okhttp3.mockwebserver.MockResponse()
.setResponseCode(204)
)
val observable: Observable<Item> = example.getItem("hello")
val observable2: Observable<Item> = example.deleteItem("hello")
observable
.flatMap {
//Observable.just(null) //<- Would reach onError()
observable2
}
.doFinally() { // <- Never reaches here
println("doFinally")
}
.blockingSubscribe({ next ->
println("onNext")
}, { error -> // <- Never reaches here
println("onError $error")
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment