-
Notifications
You must be signed in to change notification settings - Fork 24.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add OkHttpClientProvider tests (#48958)
Summary: Currently, the class OkHttpClientProvider is still in Java. Adding some tests before migrating it to Kotlin ## Changelog: [INTERNAL] - Add OkHttpClientProvider tests Pull Request resolved: #48958 Test Plan: ```bash ./gradlew :packages:react-native:ReactAndroid:test -Dtest.single=com.facebook.react.modules.network ``` Reviewed By: javache Differential Revision: D68706173 Pulled By: cortinico fbshipit-source-id: 7b4b1cbe17ff39d3775075682dcb8d253892e062
- Loading branch information
1 parent
2ae45ec
commit 9572bcf
Showing
1 changed file
with
143 additions
and
0 deletions.
There are no files selected for viewing
143 changes: 143 additions & 0 deletions
143
...ReactAndroid/src/test/java/com/facebook/react/modules/network/OkHttpClientProviderTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
/* | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
@file:Suppress("DEPRECATION_ERROR") // Conflicting okhttp versions | ||
|
||
package com.facebook.react.modules.network | ||
|
||
import android.content.Context | ||
import java.io.File | ||
import okhttp3.OkHttpClient | ||
import org.assertj.core.api.Assertions.assertThat | ||
import org.junit.After | ||
import org.junit.Before | ||
import org.junit.Test | ||
import org.mockito.kotlin.mock | ||
import org.mockito.kotlin.verify | ||
import org.mockito.kotlin.whenever | ||
|
||
class OkHttpClientProviderTest { | ||
|
||
@Before | ||
fun setUp() { | ||
OkHttpClientProvider.setOkHttpClientFactory(null) | ||
OkHttpClientProvider::class.java.getDeclaredField("sClient").apply { | ||
isAccessible = true | ||
set(null, null) | ||
} | ||
} | ||
|
||
@After | ||
fun tearDown() { | ||
OkHttpClientProvider.setOkHttpClientFactory(null) | ||
} | ||
|
||
@Test | ||
fun testSetOkHttpClientFactory() { | ||
val mockFactory = mock<OkHttpClientFactory>() | ||
|
||
OkHttpClientProvider.setOkHttpClientFactory(mockFactory) | ||
|
||
val field = OkHttpClientProvider::class.java.getDeclaredField("sFactory") | ||
field.isAccessible = true | ||
val factory = field.get(null) as OkHttpClientFactory? | ||
|
||
assertThat(factory).isNotNull | ||
assertThat(factory).isSameAs(mockFactory) | ||
} | ||
|
||
@Test | ||
fun testGetOkHttpClientCreatesClientIfNull() { | ||
val field = OkHttpClientProvider::class.java.getDeclaredField("sClient") | ||
field.isAccessible = true | ||
field.set(null, null) | ||
|
||
val client = OkHttpClientProvider.getOkHttpClient() | ||
|
||
assertThat(client).isNotNull | ||
assertThat(field.get(null) as OkHttpClient?).isSameAs(client) | ||
} | ||
|
||
@Test | ||
fun testGetOkHttpClientDoesNotCreateNewClientIfAlreadyExists() { | ||
val existingClient = OkHttpClient() | ||
val field = OkHttpClientProvider::class.java.getDeclaredField("sClient") | ||
field.isAccessible = true | ||
field.set(null, existingClient) | ||
|
||
val client = OkHttpClientProvider.getOkHttpClient() | ||
|
||
assertThat(client).isNotNull | ||
assertThat(client).isSameAs(existingClient) | ||
} | ||
|
||
@Test | ||
fun testCreateClientUsesCustomFactoryWhenSet() { | ||
val mockFactory = mock<OkHttpClientFactory>() | ||
val customClient = OkHttpClient() | ||
whenever(mockFactory.createNewNetworkModuleClient()).thenReturn(customClient) | ||
|
||
OkHttpClientProvider.setOkHttpClientFactory(mockFactory) | ||
|
||
val client = OkHttpClientProvider.createClient() | ||
|
||
assertThat(client).isNotNull | ||
assertThat(client).isSameAs(customClient) | ||
verify(mockFactory).createNewNetworkModuleClient() | ||
} | ||
|
||
@Test | ||
fun testCreateClientBuilderDefaultConfiguration() { | ||
val builder = OkHttpClientProvider.createClientBuilder() | ||
val client = builder.build() | ||
|
||
assertThat(client.connectTimeoutMillis()).isEqualTo(0) | ||
assertThat(client.readTimeoutMillis()).isEqualTo(0) | ||
assertThat(client.writeTimeoutMillis()).isEqualTo(0) | ||
assertThat(client.cookieJar()).isInstanceOf(ReactCookieJarContainer::class.java) | ||
} | ||
|
||
@Test | ||
fun testCreateClientBuilderWithContextUsesDefaultCacheSize() { | ||
val mockContext = mock<Context>() | ||
val mockCacheDir = File("mockCacheDir") | ||
whenever(mockContext.cacheDir).thenReturn(mockCacheDir) | ||
|
||
val builder = OkHttpClientProvider.createClientBuilder(mockContext) | ||
val client = builder.build() | ||
val cache = client.cache() | ||
|
||
assertThat(cache).isNotNull | ||
assertThat(checkNotNull(cache).directory()).isEqualTo(File(mockCacheDir, "http-cache")) | ||
assertThat(cache.maxSize()).isEqualTo(10 * 1024 * 1024) // 10 MB | ||
} | ||
|
||
@Test | ||
fun testCreateClientBuilderWithZeroCacheSize() { | ||
val mockContext = mock<Context>() | ||
val builder = OkHttpClientProvider.createClientBuilder(mockContext, 0) | ||
val client = builder.build() | ||
|
||
assertThat(client.cache()).isNull() | ||
} | ||
|
||
@Test | ||
fun testCreateClientBuilderWithCustomCacheSize() { | ||
val mockContext = mock<Context>() | ||
val mockCacheDir = File("mockCacheDir") | ||
whenever(mockContext.cacheDir).thenReturn(mockCacheDir) | ||
|
||
val customCacheSize: Long = 20 * 1024 * 1024 // 20 MB | ||
val builder = OkHttpClientProvider.createClientBuilder(mockContext, customCacheSize.toInt()) | ||
val client = builder.build() | ||
val cache = client.cache() | ||
|
||
assertThat(cache).isNotNull | ||
assertThat(checkNotNull(cache).directory()).isEqualTo(File(mockCacheDir, "http-cache")) | ||
assertThat(cache.maxSize()).isEqualTo(customCacheSize) | ||
} | ||
} |