Skip to content

Commit 5a4df8d

Browse files
Add possibility for mock api to return errors at a certain frequency
1 parent e5b18c9 commit 5a4df8d

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

app/src/main/java/com/lukaslechner/coroutineusecasesonandroid/usecases/flow/usecase2/MockApiBehavior.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ fun mockApi(context: Context) =
1313
path = "/current-stock-prices",
1414
body = { Gson().toJson(fakeCurrentStockPrices(context)) },
1515
status = 200,
16-
delayInMs = 1500
16+
delayInMs = 1500,
17+
errorFrequencyInPercent = 50
1718
)
1819
)

app/src/main/java/com/lukaslechner/coroutineusecasesonandroid/utils/MockNetworkInterceptor.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.lukaslechner.coroutineusecasesonandroid.utils
22

33
import com.google.gson.Gson
44
import okhttp3.*
5+
import kotlin.random.Random
56

67
class MockNetworkInterceptor : Interceptor {
78

@@ -18,12 +19,25 @@ class MockNetworkInterceptor : Interceptor {
1819
simulateNetworkDelay(mockResponse)
1920

2021
return if (mockResponse.status < 400) {
21-
createSuccessResponse(mockResponse, request)
22+
23+
if (mockResponse.errorFrequencyInPercent == 0) {
24+
createSuccessResponse(mockResponse, request)
25+
} else {
26+
maybeReturnErrorResponse(mockResponse, request)
27+
}
2228
} else {
2329
createErrorResponse(request)
2430
}
2531
}
2632

33+
private fun maybeReturnErrorResponse(
34+
mockResponse: MockResponse,
35+
request: Request
36+
) = when (Random.nextInt(0, 101)) {
37+
in 0..mockResponse.errorFrequencyInPercent -> createErrorResponse(request)
38+
else -> createSuccessResponse(mockResponse, request)
39+
}
40+
2741
private fun findMockResponseInList(request: Request): MockResponse? {
2842
return mockResponses.find { mockResponse ->
2943
mockResponse.path.contains(request.url().encodedPath())
@@ -78,15 +92,17 @@ class MockNetworkInterceptor : Interceptor {
7892
body: () -> String,
7993
status: Int,
8094
delayInMs: Long = 250,
81-
persist: Boolean = true
95+
persist: Boolean = true,
96+
errorFrequencyInPercent:Int = 0
8297
) = apply {
8398
val mockResponse =
8499
MockResponse(
85100
path,
86101
body,
87102
status,
88103
delayInMs,
89-
persist
104+
persist,
105+
errorFrequencyInPercent
90106
)
91107
mockResponses.add(mockResponse)
92108
}
@@ -101,5 +117,6 @@ data class MockResponse(
101117
val body: () -> String,
102118
val status: Int,
103119
val delayInMs: Long,
104-
val persist: Boolean
120+
val persist: Boolean,
121+
val errorFrequencyInPercent: Int
105122
)

0 commit comments

Comments
 (0)