@@ -14,6 +14,15 @@ import io.kotest.matchers.types.beInstanceOf
1414import kotlinx.coroutines.TimeoutCancellationException
1515import 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+
1726class 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