@@ -4,6 +4,7 @@ import io.kotlintest.Spec
44import io.kotlintest.shouldBe
55import io.kotlintest.shouldNotBe
66import io.kotlintest.specs.DescribeSpec
7+ import kotlinx.coroutines.runBlocking
78import okhttp3.mockwebserver.MockResponse
89import okhttp3.mockwebserver.MockWebServer
910import okhttp3.mockwebserver.SocketPolicy
@@ -23,11 +24,11 @@ class ExtensionsTest : DescribeSpec() {
2324 server = MockWebServer ()
2425 executor = Executors .newSingleThreadExecutor()
2526 retrofit = Retrofit .Builder ()
26- .baseUrl(server.url(" /" ))
27- .callbackExecutor(executor)
28- .addCallAdapterFactory(NetworkResponseAdapterFactory ())
29- .addConverterFactory(StringConverterFactory ())
30- .build()
27+ .baseUrl(server.url(" /" ))
28+ .callbackExecutor(executor)
29+ .addCallAdapterFactory(NetworkResponseAdapterFactory ())
30+ .addConverterFactory(StringConverterFactory ())
31+ .build()
3132 service = retrofit.create(Service ::class .java)
3233 }
3334
@@ -40,22 +41,45 @@ class ExtensionsTest : DescribeSpec() {
4041 init {
4142 describe(" Execute with retry" ) {
4243
43- repeat(9 ) {
44- val mockResponse = MockResponse ()
45- server.enqueue(mockResponse.apply { mockResponse.socketPolicy = SocketPolicy .DISCONNECT_AFTER_REQUEST })
46- }
44+ context(" Deferred response" ) {
45+ repeat(9 ) {
46+ val mockResponse = MockResponse ()
47+ server.enqueue(mockResponse.apply { mockResponse.socketPolicy = SocketPolicy .DISCONNECT_AFTER_REQUEST })
48+ }
4749
48- server.enqueue(MockResponse ().setBody(" Hi!" ))
50+ server.enqueue(MockResponse ().setBody(" Hi!" ))
4951
50- val response = executeWithRetry(times = 10 ) {
51- service.getText().await()
52+ val response = executeWithRetry(times = 10 ) {
53+ service.getText().await()
54+ }
55+
56+ it(" Should end up with NetworkResponse.Success after 10 retries" ) {
57+ (response is NetworkResponse .Success ) shouldBe true
58+ with (response as NetworkResponse .Success ) {
59+ body shouldBe " Hi!"
60+ headers shouldNotBe null
61+ }
62+ }
5263 }
5364
54- it(" Should end up with NetworkResponse.Success after 10 retries" ) {
55- (response is NetworkResponse .Success ) shouldBe true
56- with (response as NetworkResponse .Success ) {
57- body shouldBe " Hi!"
58- headers shouldNotBe null
65+ context(" Suspending response" ) {
66+ repeat(9 ) {
67+ val mockResponse = MockResponse ()
68+ server.enqueue(mockResponse.apply { mockResponse.socketPolicy = SocketPolicy .DISCONNECT_AFTER_REQUEST })
69+ }
70+
71+ server.enqueue(MockResponse ().setBody(" Hi!" ))
72+
73+ val response = executeWithRetry(times = 10 ) {
74+ runBlocking { service.getTextSuspend() }
75+ }
76+
77+ it(" Should end up with NetworkResponse.Success after 10 retries" ) {
78+ (response is NetworkResponse .Success ) shouldBe true
79+ with (response as NetworkResponse .Success ) {
80+ body shouldBe " Hi!"
81+ headers shouldNotBe null
82+ }
5983 }
6084 }
6185 }
0 commit comments