Skip to content

Commit 50d0157

Browse files
mateoguzmanafacebook-github-bot
authored andcommitted
test(network): [android] ResponseUtil unit tests (#48075)
Summary: Currently the class `ResponseUtil` is still in Java, I'm adding some unit tests so it is safer to migrate it to Kotlin. ## Changelog: [INTERNAL] - `ResponseUtil` unit tests Pull Request resolved: #48075 Test Plan: ```bash yarn test-android ``` Reviewed By: cortinico Differential Revision: D66727736 Pulled By: lunaleaps fbshipit-source-id: 9c89c75905b4e0c9c4820a556245a07e135e0f17
1 parent 2e444d2 commit 50d0157

1 file changed

Lines changed: 252 additions & 0 deletions

File tree

  • packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/network
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
package com.facebook.react.modules.network
9+
10+
import com.facebook.react.bridge.Arguments
11+
import com.facebook.react.bridge.JavaOnlyArray
12+
import com.facebook.react.bridge.JavaOnlyMap
13+
import com.facebook.react.bridge.ReactApplicationContext
14+
import com.facebook.react.bridge.WritableArray
15+
import com.facebook.react.bridge.WritableMap
16+
import java.net.SocketTimeoutException
17+
import org.assertj.core.api.Assertions.assertThat
18+
import org.junit.After
19+
import org.junit.Before
20+
import org.junit.Test
21+
import org.mockito.ArgumentCaptor
22+
import org.mockito.MockedStatic
23+
import org.mockito.Mockito.*
24+
import org.mockito.Mockito.mockStatic
25+
26+
class ResponseUtilTest {
27+
private lateinit var reactContext: ReactApplicationContext
28+
private lateinit var arguments: MockedStatic<Arguments>
29+
30+
@Before
31+
fun setUp() {
32+
reactContext = mock(ReactApplicationContext::class.java)
33+
34+
arguments = mockStatic(Arguments::class.java)
35+
arguments.`when`<WritableArray>(Arguments::createArray).thenAnswer { JavaOnlyArray() }
36+
arguments.`when`<WritableMap>(Arguments::createMap).thenAnswer { JavaOnlyMap() }
37+
}
38+
39+
@After
40+
fun tearDown() {
41+
arguments.close()
42+
}
43+
44+
@Test
45+
fun testOnDataSend() {
46+
val requestId = 1
47+
val progress = 100L
48+
val total = 1000L
49+
50+
ResponseUtil.onDataSend(reactContext, requestId, progress, total)
51+
52+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
53+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
54+
55+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
56+
57+
assertThat(eventNameCaptor.value).isEqualTo("didSendNetworkData")
58+
59+
val args = eventArgumentsCaptor.value
60+
assertThat(args.size()).isEqualTo(3)
61+
assertThat(args.getInt(0)).isEqualTo(requestId)
62+
assertThat(args.getInt(1)).isEqualTo(progress.toInt())
63+
assertThat(args.getInt(2)).isEqualTo(total.toInt())
64+
}
65+
66+
@Test
67+
fun testOnIncrementalDataReceived() {
68+
val requestId = 1
69+
val data = "some data"
70+
val progress = 100L
71+
val total = 1000L
72+
73+
ResponseUtil.onIncrementalDataReceived(reactContext, requestId, data, progress, total)
74+
75+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
76+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
77+
78+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
79+
80+
assertThat(eventNameCaptor.value).isEqualTo("didReceiveNetworkIncrementalData")
81+
82+
val args = eventArgumentsCaptor.value
83+
assertThat(args.size()).isEqualTo(4)
84+
assertThat(args.getInt(0)).isEqualTo(requestId)
85+
assertThat(args.getString(1)).isEqualTo(data)
86+
assertThat(args.getInt(2)).isEqualTo(progress.toInt())
87+
assertThat(args.getInt(3)).isEqualTo(total.toInt())
88+
}
89+
90+
@Test
91+
fun testOnDataReceivedProgress() {
92+
val requestId = 1
93+
val progress = 500L
94+
val total = 1000L
95+
96+
ResponseUtil.onDataReceivedProgress(reactContext, requestId, progress, total)
97+
98+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
99+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
100+
101+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
102+
103+
assertThat(eventNameCaptor.value).isEqualTo("didReceiveNetworkDataProgress")
104+
105+
val args = eventArgumentsCaptor.value
106+
assertThat(args.size()).isEqualTo(3)
107+
assertThat(args.getInt(0)).isEqualTo(requestId)
108+
assertThat(args.getInt(1)).isEqualTo(progress.toInt())
109+
assertThat(args.getInt(2)).isEqualTo(total.toInt())
110+
}
111+
112+
@Test
113+
fun testOnDataReceived() {
114+
val requestId = 1
115+
val data = "response data"
116+
117+
ResponseUtil.onDataReceived(reactContext, requestId, data)
118+
119+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
120+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
121+
122+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
123+
124+
assertThat(eventNameCaptor.value).isEqualTo("didReceiveNetworkData")
125+
126+
val args = eventArgumentsCaptor.value
127+
assertThat(args.size()).isEqualTo(2)
128+
assertThat(args.getInt(0)).isEqualTo(requestId)
129+
assertThat(args.getString(1)).isEqualTo(data)
130+
}
131+
132+
@Test
133+
fun testOnDataReceivedMap() {
134+
val requestId = 1
135+
val data: WritableMap = Arguments.createMap().apply { putString("key", "value") }
136+
137+
ResponseUtil.onDataReceived(reactContext, requestId, data)
138+
139+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
140+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
141+
142+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
143+
144+
assertThat(eventNameCaptor.value).isEqualTo("didReceiveNetworkData")
145+
146+
val args = eventArgumentsCaptor.value
147+
assertThat(args.size()).isEqualTo(2)
148+
assertThat(args.getInt(0)).isEqualTo(requestId)
149+
assertThat(args.getMap(1)).isEqualTo(data)
150+
}
151+
152+
@Test
153+
fun testOnRequestError() {
154+
val requestId = 1
155+
val error = "An error occurred"
156+
val e: Throwable? = null
157+
158+
ResponseUtil.onRequestError(reactContext, requestId, error, e)
159+
160+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
161+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
162+
163+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
164+
165+
assertThat(eventNameCaptor.value).isEqualTo("didCompleteNetworkResponse")
166+
167+
val args = eventArgumentsCaptor.value
168+
assertThat(args.size()).isEqualTo(2)
169+
assertThat(args.getInt(0)).isEqualTo(requestId)
170+
assertThat(args.getString(1)).isEqualTo(error)
171+
}
172+
173+
@Test
174+
fun testOnRequestErrorWithException() {
175+
val requestId = 1
176+
val error = "Timeout error"
177+
val e: Throwable = SocketTimeoutException()
178+
179+
ResponseUtil.onRequestError(reactContext, requestId, error, e)
180+
181+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
182+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
183+
184+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
185+
186+
assertThat(eventNameCaptor.value).isEqualTo("didCompleteNetworkResponse")
187+
188+
val args = eventArgumentsCaptor.value
189+
assertThat(args.size()).isEqualTo(3)
190+
assertThat(args.getInt(0)).isEqualTo(requestId)
191+
assertThat(args.getString(1)).isEqualTo(error)
192+
assertThat(args.getBoolean(2)).isTrue
193+
}
194+
195+
@Test
196+
fun testOnRequestSuccess() {
197+
val requestId = 1
198+
199+
ResponseUtil.onRequestSuccess(reactContext, requestId)
200+
201+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
202+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
203+
204+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
205+
206+
assertThat(eventNameCaptor.value).isEqualTo("didCompleteNetworkResponse")
207+
208+
val args = eventArgumentsCaptor.value
209+
assertThat(args.size()).isEqualTo(2)
210+
assertThat(args.getInt(0)).isEqualTo(requestId)
211+
assertThat(args.isNull(1)).isTrue()
212+
}
213+
214+
@Test
215+
fun testOnResponseReceived() {
216+
val requestId = 1
217+
val statusCode = 200
218+
val headers: WritableMap =
219+
Arguments.createMap().apply { putString("Content-Type", "application/json") }
220+
val url = "http://example.com"
221+
222+
ResponseUtil.onResponseReceived(reactContext, requestId, statusCode, headers, url)
223+
224+
val eventNameCaptor = ArgumentCaptor.forClass(String::class.java)
225+
val eventArgumentsCaptor = ArgumentCaptor.forClass(WritableArray::class.java)
226+
227+
verify(reactContext).emitDeviceEvent(eventNameCaptor.capture(), eventArgumentsCaptor.capture())
228+
229+
assertThat(eventNameCaptor.value).isEqualTo("didReceiveNetworkResponse")
230+
231+
val args = eventArgumentsCaptor.value
232+
assertThat(args.size()).isEqualTo(4)
233+
assertThat(args.getInt(0)).isEqualTo(requestId)
234+
assertThat(args.getInt(1)).isEqualTo(statusCode)
235+
assertThat(args.getMap(2)).isEqualTo(headers)
236+
assertThat(args.getString(3)).isEqualTo(url)
237+
}
238+
239+
@Test
240+
fun testNullReactContext() {
241+
ResponseUtil.onDataSend(null, 1, 100, 1000)
242+
ResponseUtil.onIncrementalDataReceived(null, 1, "data", 100, 1000)
243+
ResponseUtil.onDataReceivedProgress(null, 1, 100, 1000)
244+
ResponseUtil.onDataReceived(null, 1, "data")
245+
ResponseUtil.onDataReceived(null, 1, Arguments.createMap())
246+
ResponseUtil.onRequestError(null, 1, "error", null)
247+
ResponseUtil.onRequestSuccess(null, 1)
248+
ResponseUtil.onResponseReceived(null, 1, 200, Arguments.createMap(), "http://example.com")
249+
250+
verify(reactContext, never()).emitDeviceEvent(anyString(), any())
251+
}
252+
}

0 commit comments

Comments
 (0)