Skip to content

Commit

Permalink
remove usage of apollo-testing-support symbols that pull MockServer
Browse files Browse the repository at this point in the history
  • Loading branch information
martinbonnin committed Jun 3, 2024
1 parent 524c535 commit 5f3a5a7
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 82 deletions.
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package test.network

import app.cash.turbine.test
import com.apollographql.apollo3.ApolloClient
import com.apollographql.apollo3.api.ApolloRequest
import com.apollographql.apollo3.api.ApolloResponse
import com.apollographql.apollo3.api.Operation
import com.apollographql.apollo3.exception.ApolloNetworkException
import com.apollographql.apollo3.interceptor.ApolloInterceptor
import com.apollographql.apollo3.interceptor.ApolloInterceptorChain
import com.apollographql.apollo3.mockserver.MockServer
import com.apollographql.apollo3.mockserver.assertNoRequest
import com.apollographql.apollo3.mockserver.enqueueString
import com.apollographql.apollo3.network.NetworkMonitor
import com.apollographql.apollo3.testing.FooQuery
import com.apollographql.apollo3.testing.internal.ApolloTestResult
import com.apollographql.apollo3.testing.mockServerTest
import com.apollographql.apollo3.testing.internal.runTest
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collect
Expand All @@ -21,6 +24,7 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.takeWhile
import okio.use
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFails
Expand Down Expand Up @@ -107,3 +111,19 @@ class NetworkMonitorInterceptor(private val networkMonitor: NetworkMonitor): Apo
}
}

class MockServerTest(val mockServer: MockServer, val apolloClient: ApolloClient, val scope: CoroutineScope)

fun mockServerTest(
clientBuilder: ApolloClient.Builder.() -> Unit = {},
block: suspend MockServerTest.() -> Unit
) = runTest(true) {
MockServer().use { mockServer ->
ApolloClient.Builder()
.serverUrl(mockServer.url())
.apply(clientBuilder)
.build()
.use {apolloClient ->
MockServerTest(mockServer, apolloClient, this).block()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.apollographql.apollo3.mockserver.CloseFrame
import com.apollographql.apollo3.mockserver.MockServer
import com.apollographql.apollo3.mockserver.TextMessage
import com.apollographql.apollo3.mockserver.WebSocketBody
import com.apollographql.apollo3.mockserver.WebsocketMockRequest
import com.apollographql.apollo3.mockserver.awaitWebSocketRequest
import com.apollographql.apollo3.mockserver.enqueueWebSocket
import com.apollographql.apollo3.mpp.Platform
Expand All @@ -25,7 +26,7 @@ import com.apollographql.apollo3.testing.FooSubscription.Companion.nextMessage
import com.apollographql.apollo3.testing.awaitSubscribe
import com.apollographql.apollo3.testing.connectionAckMessage
import com.apollographql.apollo3.testing.internal.runTest
import com.apollographql.apollo3.testing.mockServerWebSocketTest
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.merge
import okio.use
Expand Down Expand Up @@ -357,3 +358,52 @@ class WebSocketNetworkTransportTest {
internal fun WebSocketBody.enqueueMessage(message: String) {
enqueueMessage(TextMessage(message))
}

class MockServerWebSocketTest(
val apolloClient: ApolloClient,
private val mockServer: MockServer,
val coroutineScope: CoroutineScope,
) {
/**
* Enqueue the response straight away
*/
val serverWriter: WebSocketBody = mockServer.enqueueWebSocket()
private var _serverReader: WebsocketMockRequest? = null

val serverReader: WebsocketMockRequest
get() {
check(_serverReader != null) {
"You need to call awaitConnectionInit or awaitWebSocketRequest first"
}
return _serverReader!!
}

suspend fun awaitWebSocketRequest() {
_serverReader = mockServer.awaitWebSocketRequest()
}

suspend fun awaitConnectionInit() {
awaitWebSocketRequest()

serverReader.awaitMessage()
serverWriter.enqueueMessage(TextMessage(connectionAckMessage()))
}
}

fun mockServerWebSocketTest(customizeTransport: WebSocketNetworkTransport.Builder.() -> Unit = {}, block: suspend MockServerWebSocketTest.() -> Unit) = runTest(false) {
MockServer().use { mockServer ->

ApolloClient.Builder()
.serverUrl(mockServer.url())
.subscriptionNetworkTransport(
WebSocketNetworkTransport.Builder()
.serverUrl(mockServer.url())
.apply(customizeTransport)
.build()
)
.build().use { apolloClient ->
@Suppress("DEPRECATION")
MockServerWebSocketTest(apolloClient, mockServer, this@runTest).block()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import com.apollographql.apollo3.testing.FooSubscription.Companion.nextMessage
import com.apollographql.apollo3.testing.awaitSubscribe
import com.apollographql.apollo3.testing.connectionAckMessage
import com.apollographql.apollo3.testing.internal.runTest
import com.apollographql.apollo3.testing.mockServerTest
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
Expand All @@ -26,6 +25,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeout
import okio.use
import test.network.enqueueMessage
import test.network.mockServerTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertIs
Expand Down Expand Up @@ -232,7 +232,6 @@ class RetryWebSocketsTest {
clientBuilder = {
retryOnError { it.operation is Subscription }
},
skipDelays = false
) {
mockServer.enqueue(MockResponse.Builder().statusCode(500).build())

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@ import com.apollographql.apollo3.ApolloClient
import com.apollographql.apollo3.annotations.ApolloDeprecatedSince
import com.apollographql.apollo3.annotations.ApolloExperimental
import com.apollographql.apollo3.mockserver.MockServer
import com.apollographql.apollo3.mockserver.TextMessage
import com.apollographql.apollo3.mockserver.WebSocketBody
import com.apollographql.apollo3.mockserver.WebsocketMockRequest
import com.apollographql.apollo3.mockserver.awaitWebSocketRequest
import com.apollographql.apollo3.mockserver.enqueueWebSocket
import com.apollographql.apollo3.network.websocket.WebSocketNetworkTransport
import com.apollographql.apollo3.testing.internal.runTest
import kotlinx.coroutines.CoroutineScope
import okio.use
Expand All @@ -31,74 +25,13 @@ fun mockServerTest(
clientBuilder: ApolloClient.Builder.() -> Unit = {},
block: suspend MockServerTest.() -> Unit
) = runTest(skipDelays) {
val mockServer = MockServer()

val apolloClient = ApolloClient.Builder()
.serverUrl(mockServer.url())
.apply(clientBuilder)
.build()

try {
apolloClient.use {
MockServerTest(mockServer, it, this).block()
}
} finally {
mockServer.close()
}
}

@ApolloExperimental
@Deprecated("This is only used for internal Apollo tests and will be removed in a future version.")
@ApolloDeprecatedSince(ApolloDeprecatedSince.Version.v4_0_0)
class MockServerWebSocketTest(
val apolloClient: ApolloClient,
private val mockServer: MockServer,
val coroutineScope: CoroutineScope,
) {
/**
* Enqueue the response straight away
*/
val serverWriter: WebSocketBody = mockServer.enqueueWebSocket()
private var _serverReader: WebsocketMockRequest? = null

val serverReader: WebsocketMockRequest
get() {
check(_serverReader != null) {
"You need to call awaitConnectionInit or awaitWebSocketRequest first"
}
return _serverReader!!
}

suspend fun awaitWebSocketRequest() {
_serverReader = mockServer.awaitWebSocketRequest()
}

suspend fun awaitConnectionInit() {
awaitWebSocketRequest()

serverReader.awaitMessage()
serverWriter.enqueueMessage(TextMessage(connectionAckMessage()))
}
}

@ApolloExperimental
@Deprecated("This is only used for internal Apollo tests and will be removed in a future version.")
@ApolloDeprecatedSince(ApolloDeprecatedSince.Version.v4_0_0)
@Suppress("DEPRECATION")
fun mockServerWebSocketTest(customizeTransport: WebSocketNetworkTransport.Builder.() -> Unit = {}, block: suspend MockServerWebSocketTest.() -> Unit) = runTest(false) {
MockServer().use { mockServer ->

ApolloClient.Builder()
.serverUrl(mockServer.url())
.subscriptionNetworkTransport(
WebSocketNetworkTransport.Builder()
.serverUrl(mockServer.url())
.apply(customizeTransport)
.build()
)
.build().use { apolloClient ->
@Suppress("DEPRECATION")
MockServerWebSocketTest(apolloClient, mockServer, this@runTest).block()
.apply(clientBuilder)
.build()
.use {apolloClient ->
MockServerTest(mockServer, apolloClient, this).block()
}
}
}
}
25 changes: 23 additions & 2 deletions tests/gzip/src/commonTest/kotlin/test/GzipTest.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package test

import com.apollographql.apollo3.ApolloClient
import com.apollographql.apollo3.mockserver.MockResponse
import com.apollographql.apollo3.mockserver.MockServer
import com.apollographql.apollo3.testing.HostFileSystem
import com.apollographql.apollo3.testing.mockServerTest
import com.apollographql.apollo3.testing.internal.runTest
import com.apollographql.apollo3.testing.testsPath
import gzip.GetStringQuery
import kotlinx.coroutines.CoroutineScope
import okio.Path.Companion.toPath
import okio.buffer
import okio.use
Expand All @@ -16,6 +19,7 @@ class GzipTest {
@Test
fun gzipTest() = mockServerTest {
// This contains a valid response encoded with gzip
@Suppress("DEPRECATION")
val byteString = HostFileSystem.openReadOnly(testsPath.toPath().resolve("gzip/lorem.txt.gz")).use {
it.source().buffer().readByteString()
}
Expand All @@ -31,4 +35,21 @@ class GzipTest {
assertEquals(2225, response.data?.longString?.length)
assertTrue(response.data?.longString?.startsWith("Lorem ipsum dolor sit amet") == true)
}
}
}

class MockServerTest(val mockServer: MockServer, val apolloClient: ApolloClient, val scope: CoroutineScope)

fun mockServerTest(
clientBuilder: ApolloClient.Builder.() -> Unit = {},
block: suspend MockServerTest.() -> Unit
) = runTest(true) {
MockServer().use { mockServer ->
ApolloClient.Builder()
.serverUrl(mockServer.url())
.apply(clientBuilder)
.build()
.use {apolloClient ->
MockServerTest(mockServer, apolloClient, this).block()
}
}
}
23 changes: 22 additions & 1 deletion tests/http-headers/src/test/kotlin/HttpHeaderTest.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@

import com.apollographql.apollo3.ApolloClient
import com.apollographql.apollo3.api.DefaultUpload
import com.apollographql.apollo3.api.Optional
import com.apollographql.apollo3.mockserver.MockServer
import com.apollographql.apollo3.mockserver.enqueueString
import com.apollographql.apollo3.mockserver.headerValueOf
import com.apollographql.apollo3.testing.mockServerTest
import com.apollographql.apollo3.testing.internal.runTest
import httpheaders.GetRandomQuery
import httpheaders.UploadMutation
import kotlinx.coroutines.CoroutineScope
import okio.use
import kotlin.test.Test
import kotlin.test.assertEquals

Expand Down Expand Up @@ -54,3 +58,20 @@ class HttpHeadersTest {
}
}
}

class MockServerTest(val mockServer: MockServer, val apolloClient: ApolloClient, val scope: CoroutineScope)

fun mockServerTest(
clientBuilder: ApolloClient.Builder.() -> Unit = {},
block: suspend MockServerTest.() -> Unit
) = runTest(true) {
MockServer().use { mockServer ->
ApolloClient.Builder()
.serverUrl(mockServer.url())
.apply(clientBuilder)
.build()
.use {apolloClient ->
MockServerTest(mockServer, apolloClient, this).block()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
package test

import com.apollographql.apollo3.ApolloClient
import com.apollographql.apollo3.api.http.HttpMethod
import com.apollographql.apollo3.integration.normalizer.HeroAndFriendsNamesQuery
import com.apollographql.apollo3.integration.normalizer.SearchHeroQuery
import com.apollographql.apollo3.integration.normalizer.type.Episode
import com.apollographql.apollo3.mockserver.MockServer
import com.apollographql.apollo3.mockserver.awaitRequest
import com.apollographql.apollo3.mockserver.enqueueString
import com.apollographql.apollo3.testing.mockServerTest
import com.apollographql.apollo3.testing.internal.runTest
import kotlinx.coroutines.CoroutineScope
import okio.use
import kotlin.test.Test
import kotlin.test.assertEquals

Expand Down Expand Up @@ -51,3 +55,20 @@ class HttpGetTest {
)
}
}

class MockServerTest(val mockServer: MockServer, val apolloClient: ApolloClient, val scope: CoroutineScope)

fun mockServerTest(
clientBuilder: ApolloClient.Builder.() -> Unit = {},
block: suspend MockServerTest.() -> Unit
) = runTest(true) {
MockServer().use { mockServer ->
ApolloClient.Builder()
.serverUrl(mockServer.url())
.apply(clientBuilder)
.build()
.use {apolloClient ->
MockServerTest(mockServer, apolloClient, this).block()
}
}
}
Loading

0 comments on commit 5f3a5a7

Please sign in to comment.