Skip to content

Commit

Permalink
Use OkHttp3 for NetworkingModuleTest (#48012)
Browse files Browse the repository at this point in the history
Summary:
Pull Request resolved: #48012

Match the OkHttp version we use for NetworkingModule and FrescoModule, to unblock pulling in D66498305

Changelog: [Internal]

Reviewed By: cortinico

Differential Revision: D66595222

fbshipit-source-id: 1c29b061866be5d8bcc87aaa0c8a1de846198e4e
  • Loading branch information
javache authored and facebook-github-bot committed Dec 9, 2024
1 parent 8babc21 commit 351b1ba
Showing 1 changed file with 35 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@
* LICENSE file in the root directory of this source tree.
*/

// TODO T207169925: Migrate CatalystInstance to Reacthost and remove the Suppress("DEPRECATION")
// annotation
@file:Suppress("DEPRECATION")
// Conflicting okhttp versions
@file:Suppress("DEPRECATION_ERROR")

package com.facebook.react.modules.network

import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.CatalystInstance
import com.facebook.react.bridge.JavaOnlyArray
import com.facebook.react.bridge.JavaOnlyMap
import com.facebook.react.bridge.ReactApplicationContext
Expand All @@ -25,9 +23,7 @@ import java.nio.charset.StandardCharsets
import okhttp3.Call
import okhttp3.Headers
import okhttp3.MediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.MultipartBody.Companion.FORM
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
Expand Down Expand Up @@ -56,6 +52,8 @@ import org.robolectric.RobolectricTestRunner
*/
private fun <T> anyOrNull(type: Class<T>): T = any(type)

private val FORM = MediaType.get("multipart/form-data")

/**
* Returns ArgumentCaptor.capture() as nullable type to avoid java.lang.IllegalStateException when
* null is returned.
Expand All @@ -75,7 +73,7 @@ class NetworkingModuleTest {
@Before
fun prepareModules() {
httpClient = mock(OkHttpClient::class.java)
whenever(httpClient.cookieJar).thenReturn(mock(CookieJarContainer::class.java))
whenever(httpClient.cookieJar()).thenReturn(mock(CookieJarContainer::class.java))
whenever(httpClient.newCall(anyOrNull(Request::class.java))).thenAnswer {
val callMock = mock(Call::class.java)
callMock
Expand All @@ -85,10 +83,7 @@ class NetworkingModuleTest {
whenever(clientBuilder.build()).thenReturn(httpClient)
whenever(httpClient.newBuilder()).thenReturn(clientBuilder)

val reactInstance = mock(CatalystInstance::class.java)

context = mock(ReactApplicationContext::class.java)
whenever(context.catalystInstance).thenReturn(reactInstance)
whenever(context.hasActiveReactInstance()).thenReturn(true)

networkingModule = NetworkingModule(context, "", httpClient)
Expand Down Expand Up @@ -138,10 +133,10 @@ class NetworkingModuleTest {
false /* withCredentials */)

verify(httpClient).newCall(capture(requestArgumentCaptor))
assertThat(requestArgumentCaptor.value.url.toString()).isEqualTo("http://somedomain/foo")
assertThat(requestArgumentCaptor.value.url().toString()).isEqualTo("http://somedomain/foo")
// We set the User-Agent header by default
assertThat(requestArgumentCaptor.value.headers.size).isEqualTo(1)
assertThat(requestArgumentCaptor.value.method).isEqualTo("GET")
assertThat(requestArgumentCaptor.value.headers().size()).isEqualTo(1)
assertThat(requestArgumentCaptor.value.method()).isEqualTo("GET")
}

@Test
Expand Down Expand Up @@ -223,13 +218,13 @@ class NetworkingModuleTest {
false /* withCredentials */)

verify(httpClient).newCall(capture(requestArgumentCaptor))
assertThat(requestArgumentCaptor.value.url.toString()).isEqualTo("http://somedomain/bar")
assertThat(requestArgumentCaptor.value.headers.size).isEqualTo(2)
assertThat(requestArgumentCaptor.value.method).isEqualTo("POST")
assertThat(requestArgumentCaptor.value.body!!.contentType()!!.type).isEqualTo("text")
assertThat(requestArgumentCaptor.value.body!!.contentType()!!.subtype).isEqualTo("plain")
assertThat(requestArgumentCaptor.value.url().toString()).isEqualTo("http://somedomain/bar")
assertThat(requestArgumentCaptor.value.headers().size()).isEqualTo(2)
assertThat(requestArgumentCaptor.value.method()).isEqualTo("POST")
assertThat(requestArgumentCaptor.value.body()?.contentType()?.type()).isEqualTo("text")
assertThat(requestArgumentCaptor.value.body()?.contentType()?.subtype()).isEqualTo("plain")
val contentBuffer = Buffer()
requestArgumentCaptor.value.body!!.writeTo(contentBuffer)
requestArgumentCaptor.value.body()?.writeTo(contentBuffer)
assertThat(contentBuffer.readUtf8()).isEqualTo("This is request body")
}

Expand All @@ -252,8 +247,8 @@ class NetworkingModuleTest {
false /* withCredentials */)

verify(httpClient).newCall(capture(requestArgumentCaptor))
val requestHeaders = requestArgumentCaptor.value.headers
assertThat(requestHeaders.size).isEqualTo(2)
val requestHeaders = requestArgumentCaptor.value.headers()
assertThat(requestHeaders.size()).isEqualTo(2)
assertThat(requestHeaders["Accept"]).isEqualTo("text/plain")
assertThat(requestHeaders["User-Agent"]).isEqualTo("React test agent/1.0")
}
Expand All @@ -277,7 +272,7 @@ class NetworkingModuleTest {
verify(httpClient).newCall(capture(requestArgumentCaptor))

// Verify okhttp does not append "charset=utf-8"
assertThat(requestArgumentCaptor.value.body!!.contentType().toString())
assertThat(requestArgumentCaptor.value.body()?.contentType().toString())
.isEqualTo("application/json")
}

Expand All @@ -302,7 +297,7 @@ class NetworkingModuleTest {
verify(httpClient).newCall(capture(requestArgumentCaptor))

val contentBuffer = Buffer()
requestArgumentCaptor.value.body!!.writeTo(contentBuffer)
requestArgumentCaptor.value.body()?.writeTo(contentBuffer)
assertThat(contentBuffer.readString(StandardCharsets.UTF_16)).isEqualTo(testString)
}

Expand All @@ -325,7 +320,7 @@ class NetworkingModuleTest {
verify(httpClient).newCall(capture(requestArgumentCaptor))

val contentBuffer = Buffer()
requestArgumentCaptor.value.body!!.writeTo(contentBuffer)
requestArgumentCaptor.value.body()?.writeTo(contentBuffer)

assertThat(contentBuffer.readString(StandardCharsets.UTF_8)).isEqualTo("test")
assertThat(requestArgumentCaptor.value.header("Content-Type")).isEqualTo("invalid")
Expand Down Expand Up @@ -355,12 +350,13 @@ class NetworkingModuleTest {

// verify url, method, headers
verify(httpClient).newCall(capture(requestArgumentCaptor))
assertThat(requestArgumentCaptor.value.url.toString()).isEqualTo("http://someurl/uploadFoo")
assertThat(requestArgumentCaptor.value.method).isEqualTo("POST")
assertThat(requestArgumentCaptor.value.body!!.contentType()!!.type).isEqualTo(FORM.type)
assertThat(requestArgumentCaptor.value.body!!.contentType()!!.subtype).isEqualTo(FORM.subtype)
val requestHeaders = requestArgumentCaptor.value.headers
assertThat(requestHeaders.size).isEqualTo(1)
assertThat(requestArgumentCaptor.value.url().toString()).isEqualTo("http://someurl/uploadFoo")
assertThat(requestArgumentCaptor.value.method()).isEqualTo("POST")
assertThat(requestArgumentCaptor.value.body()?.contentType()?.type()).isEqualTo(FORM.type())
assertThat(requestArgumentCaptor.value.body()?.contentType()?.subtype())
.isEqualTo(FORM.subtype())
val requestHeaders = requestArgumentCaptor.value.headers()
assertThat(requestHeaders.size()).isEqualTo(1)
}

@Test
Expand Down Expand Up @@ -393,12 +389,13 @@ class NetworkingModuleTest {

// verify url, method, headers
verify(httpClient).newCall(capture(requestArgumentCaptor))
assertThat(requestArgumentCaptor.value.url.toString()).isEqualTo("http://someurl/uploadFoo")
assertThat(requestArgumentCaptor.value.method).isEqualTo("POST")
assertThat(requestArgumentCaptor.value.body!!.contentType()!!.type).isEqualTo(FORM.type)
assertThat(requestArgumentCaptor.value.body!!.contentType()!!.subtype).isEqualTo(FORM.subtype)
val requestHeaders = requestArgumentCaptor.value.headers
assertThat(requestHeaders.size).isEqualTo(3)
assertThat(requestArgumentCaptor.value.url().toString()).isEqualTo("http://someurl/uploadFoo")
assertThat(requestArgumentCaptor.value.method()).isEqualTo("POST")
assertThat(requestArgumentCaptor.value.body()?.contentType()?.type()).isEqualTo(FORM.type())
assertThat(requestArgumentCaptor.value.body()?.contentType()?.subtype())
.isEqualTo(FORM.subtype())
val requestHeaders = requestArgumentCaptor.value.headers()
assertThat(requestHeaders.size()).isEqualTo(3)
assertThat(requestHeaders["Accept"]).isEqualTo("text/plain")
assertThat(requestHeaders["User-Agent"]).isEqualTo("React test agent/1.0")
assertThat(requestHeaders["content-type"]).isEqualTo("multipart/form-data")
Expand Down Expand Up @@ -466,7 +463,7 @@ class NetworkingModuleTest {
RequestBodyUtil.getFileInputStream(any(ReactContext::class.java), eq("imageUri"))
// TODO This should be migrated to requestBodyUtil.verify();
// PowerMockito.verifyStatic(RequestBodyUtil.class, times(1));
RequestBodyUtil.create("image/jpg".toMediaTypeOrNull(), inputStream)
RequestBodyUtil.create(MediaType.parse("image/jpg"), inputStream)

// verify body
// TODO fix it (now mock is not called)
Expand All @@ -488,8 +485,7 @@ class NetworkingModuleTest {
assertThat(bodyRequestBody[0].contentLength()).isEqualTo("locale".toByteArray().size.toLong())
assertThat(bodyHeaders[1]["content-disposition"])
.isEqualTo("filename=\"测试photo.jpg\"; filename*=utf-8''%E6%B5%8B%E8%AF%95photo.jpg")
assertThat<MediaType?>(bodyRequestBody[1].contentType())
.isEqualTo("image/jpg".toMediaTypeOrNull())
assertThat<MediaType?>(bodyRequestBody[1].contentType()).isEqualTo(MediaType.parse("image/jpg"))
assertThat(bodyRequestBody[1].contentLength()).isEqualTo("imageUri".toByteArray().size.toLong())
}

Expand Down

0 comments on commit 351b1ba

Please sign in to comment.