Skip to content

Commit 08e5e83

Browse files
committed
simply HttpClientTests by providing default mocks
1 parent 3041c52 commit 08e5e83

File tree

1 file changed

+56
-64
lines changed
  • OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/http

1 file changed

+56
-64
lines changed

OneSignalSDK/onesignal/core/src/test/java/com/onesignal/core/internal/http/HttpClientTests.kt

Lines changed: 56 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ import io.kotest.matchers.types.beInstanceOf
1414
import kotlinx.coroutines.TimeoutCancellationException
1515
import org.json.JSONObject
1616

17+
class Mocks {
18+
internal val mockConfigModel = MockHelper.configModelStore()
19+
internal val response = MockHttpConnectionFactory.MockResponse()
20+
internal val factory = MockHttpConnectionFactory(response)
21+
internal val httpClient by lazy {
22+
HttpClient(factory, MockPreferencesService(), mockConfigModel)
23+
}
24+
}
25+
1726
class HttpClientTests : FunSpec({
1827

1928
beforeAny {
@@ -22,20 +31,16 @@ class HttpClientTests : FunSpec({
2231

2332
test("timeout request will give a bad response") {
2433
// Given
25-
val mockResponse = MockHttpConnectionFactory.MockResponse()
26-
mockResponse.mockRequestTime = 10000 // HttpClient will add 5 seconds to the httpTimeout to "give up" so we need to fail the request more than 5 seconds beyond our timeout.
27-
28-
val mockConfigModel =
29-
MockHelper.configModelStore {
30-
it.httpTimeout = 200
31-
it.httpGetTimeout = 200
32-
}
33-
34-
val factory = MockHttpConnectionFactory(mockResponse)
35-
val httpClient = HttpClient(factory, MockPreferencesService(), mockConfigModel)
34+
val mocks = Mocks()
35+
// HttpClient will add 5 seconds to the httpTimeout to "give up" so we need to fail the request more than 5 seconds beyond our timeout.
36+
mocks.response.mockRequestTime = 10_000
37+
mocks.mockConfigModel.model.let {
38+
it.httpGetTimeout = 200
39+
it.httpGetTimeout = 200
40+
}
3641

3742
// When
38-
val response = httpClient.get("URL")
43+
val response = mocks.httpClient.get("URL")
3944

4045
// Then
4146
response.statusCode shouldBe 0
@@ -45,9 +50,8 @@ class HttpClientTests : FunSpec({
4550

4651
test("SDKHeader is included in all requests") {
4752
// Given
48-
val mockResponse = MockHttpConnectionFactory.MockResponse()
49-
val factory = MockHttpConnectionFactory(mockResponse)
50-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
53+
val mocks = Mocks()
54+
val httpClient = mocks.httpClient
5155

5256
// When
5357
httpClient.get("URL")
@@ -57,30 +61,31 @@ class HttpClientTests : FunSpec({
5761
httpClient.put("URL", JSONObject())
5862

5963
// Then
60-
for (connection in factory.connections) {
64+
for (connection in mocks.factory.connections) {
6165
connection.getRequestProperty("SDK-Version") shouldBe "onesignal/android/${OneSignalUtils.SDK_VERSION}"
6266
}
6367
}
6468

6569
test("GET with cache key uses cache when unchanged") {
6670
// Given
71+
val mocks = Mocks()
6772
val payload = "RESPONSE IS THIS"
6873
val mockResponse1 = MockHttpConnectionFactory.MockResponse()
6974
mockResponse1.status = 200
7075
mockResponse1.responseBody = payload
7176
mockResponse1.mockProps.put("etag", "MOCK_ETAG")
77+
mocks.factory.mockResponse = mockResponse1
7278

7379
val mockResponse2 = MockHttpConnectionFactory.MockResponse()
7480
mockResponse2.status = 304
7581

76-
val factory = MockHttpConnectionFactory(mockResponse1)
77-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
82+
val factory = mocks.factory
83+
val httpClient = mocks.httpClient
7884

7985
// When
80-
var response1 = httpClient.get("URL", "CACHE_KEY")
81-
86+
val response1 = httpClient.get("URL", "CACHE_KEY")
8287
factory.mockResponse = mockResponse2
83-
var response2 = httpClient.get("URL", "CACHE_KEY")
88+
val response2 = httpClient.get("URL", "CACHE_KEY")
8489

8590
// Then
8691
response1.statusCode shouldBe 200
@@ -92,12 +97,14 @@ class HttpClientTests : FunSpec({
9297

9398
test("GET with cache key replaces cache when changed") {
9499
// Given
100+
val mocks = Mocks()
95101
val payload1 = "RESPONSE IS THIS"
96102
val payload2 = "A DIFFERENT RESPONSE"
97103
val mockResponse1 = MockHttpConnectionFactory.MockResponse()
98104
mockResponse1.status = 200
99105
mockResponse1.responseBody = payload1
100106
mockResponse1.mockProps.put("etag", "MOCK_ETAG1")
107+
mocks.factory.mockResponse = mockResponse1
101108

102109
val mockResponse2 = MockHttpConnectionFactory.MockResponse()
103110
mockResponse2.status = 200
@@ -107,17 +114,17 @@ class HttpClientTests : FunSpec({
107114
val mockResponse3 = MockHttpConnectionFactory.MockResponse()
108115
mockResponse3.status = 304
109116

110-
val factory = MockHttpConnectionFactory(mockResponse1)
111-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
117+
val factory = mocks.factory
118+
val httpClient = mocks.httpClient
112119

113120
// When
114-
var response1 = httpClient.get("URL", "CACHE_KEY")
121+
val response1 = httpClient.get("URL", "CACHE_KEY")
115122

116123
factory.mockResponse = mockResponse2
117-
var response2 = httpClient.get("URL", "CACHE_KEY")
124+
val response2 = httpClient.get("URL", "CACHE_KEY")
118125

119126
factory.mockResponse = mockResponse3
120-
var response3 = httpClient.get("URL", "CACHE_KEY")
127+
val response3 = httpClient.get("URL", "CACHE_KEY")
121128

122129
// Then
123130
response1.statusCode shouldBe 200
@@ -132,16 +139,13 @@ class HttpClientTests : FunSpec({
132139

133140
test("Error response") {
134141
// Given
142+
val mocks = Mocks()
135143
val payload = "ERROR RESPONSE"
136-
val mockResponse = MockHttpConnectionFactory.MockResponse()
137-
mockResponse.status = 400
138-
mockResponse.errorResponseBody = payload
139-
140-
val factory = MockHttpConnectionFactory(mockResponse)
141-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
144+
mocks.response.status = 400
145+
mocks.response.errorResponseBody = payload
142146

143147
// When
144-
var response = httpClient.post("URL", JSONObject())
148+
val response = mocks.httpClient.post("URL", JSONObject())
145149

146150
// Then
147151
response.statusCode shouldBe 400
@@ -150,50 +154,41 @@ class HttpClientTests : FunSpec({
150154

151155
test("should parse valid Retry-After, on 429") {
152156
// Given
153-
val mockResponse = MockHttpConnectionFactory.MockResponse()
154-
mockResponse.status = 429
155-
mockResponse.mockProps["Retry-After"] = "1234"
156-
mockResponse.errorResponseBody = "{}"
157-
158-
val factory = MockHttpConnectionFactory(mockResponse)
159-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
157+
val mocks = Mocks()
158+
mocks.response.status = 429
159+
mocks.response.mockProps["Retry-After"] = "1234"
160+
mocks.response.errorResponseBody = "{}"
160161

161162
// When
162-
val response = httpClient.post("URL", JSONObject())
163+
val response = mocks.httpClient.post("URL", JSONObject())
163164

164165
// Then
165166
response.retryAfterSeconds shouldBe 1234
166167
}
167168

168169
test("should parse valid Retry-After, on 500") {
169170
// Given
170-
val mockResponse = MockHttpConnectionFactory.MockResponse()
171-
mockResponse.status = 500
172-
mockResponse.mockProps["Retry-After"] = "1234"
173-
mockResponse.errorResponseBody = "{}"
174-
175-
val factory = MockHttpConnectionFactory(mockResponse)
176-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
171+
val mocks = Mocks()
172+
mocks.response.status = 500
173+
mocks.response.mockProps["Retry-After"] = "1234"
174+
mocks.response.errorResponseBody = "{}"
177175

178176
// When
179-
val response = httpClient.post("URL", JSONObject())
177+
val response = mocks.httpClient.post("URL", JSONObject())
180178

181179
// Then
182180
response.retryAfterSeconds shouldBe 1234
183181
}
184182

185183
test("should use set fallback retryAfterSeconds if can't parse Retry-After") {
186184
// Given
187-
val mockResponse = MockHttpConnectionFactory.MockResponse()
188-
mockResponse.status = 429
189-
mockResponse.mockProps["Retry-After"] = "INVALID FORMAT"
190-
mockResponse.errorResponseBody = "{}"
191-
192-
val factory = MockHttpConnectionFactory(mockResponse)
193-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
185+
val mocks = Mocks()
186+
mocks.response.status = 429
187+
mocks.response.mockProps["Retry-After"] = "INVALID FORMAT"
188+
mocks.response.errorResponseBody = "{}"
194189

195190
// When
196-
val response = httpClient.post("URL", JSONObject())
191+
val response = mocks.httpClient.post("URL", JSONObject())
197192

198193
// Then
199194
response.retryAfterSeconds shouldBe 60
@@ -203,15 +198,12 @@ class HttpClientTests : FunSpec({
203198
// Retry-After we should assume a our safe fallback.
204199
test("should use set fallback retryAfterSeconds if 429 and Retry-After is missing") {
205200
// Given
206-
val mockResponse = MockHttpConnectionFactory.MockResponse()
207-
mockResponse.status = 429
208-
mockResponse.errorResponseBody = "{}"
209-
210-
val factory = MockHttpConnectionFactory(mockResponse)
211-
val httpClient = HttpClient(factory, MockPreferencesService(), MockHelper.configModelStore())
201+
val mocks = Mocks()
202+
mocks.response.status = 429
203+
mocks.response.errorResponseBody = "{}"
212204

213205
// When
214-
val response = httpClient.post("URL", JSONObject())
206+
val response = mocks.httpClient.post("URL", JSONObject())
215207

216208
// Then
217209
response.retryAfterSeconds shouldBe 60

0 commit comments

Comments
 (0)