Skip to content

Commit 8c8c03a

Browse files
authored
Add a test for executionContext (#6771)
* Add a test for executionContext * Add interceptor in test * add a test for client execution context
1 parent 3659c0f commit 8c8c03a

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import com.apollographql.apollo.ApolloClient
2+
import com.apollographql.apollo.api.ApolloRequest
3+
import com.apollographql.apollo.api.ApolloResponse
4+
import com.apollographql.apollo.api.ExecutionContext
5+
import com.apollographql.apollo.api.Operation
6+
import com.apollographql.apollo.api.http.HttpRequest
7+
import com.apollographql.apollo.api.http.HttpResponse
8+
import com.apollographql.apollo.exception.DefaultApolloException
9+
import com.apollographql.apollo.interceptor.ApolloInterceptor
10+
import com.apollographql.apollo.interceptor.ApolloInterceptorChain
11+
import com.apollographql.apollo.network.http.HttpEngine
12+
import com.apollographql.apollo.testing.internal.runTest
13+
import com.apollographql.mockserver.MockServer
14+
import com.apollographql.mockserver.enqueueString
15+
import kotlinx.coroutines.flow.Flow
16+
import kotlinx.coroutines.flow.flow
17+
import kotlinx.coroutines.flow.map
18+
import kotlinx.coroutines.runBlocking
19+
import okio.Buffer
20+
import okio.use
21+
import test.FooQuery
22+
import kotlin.test.Test
23+
import kotlin.test.assertEquals
24+
import kotlin.test.assertFailsWith
25+
import kotlin.test.assertIs
26+
import kotlin.test.assertNotNull
27+
import kotlin.test.assertNull
28+
29+
class ExecutionContextTest {
30+
@Test
31+
fun responseDoesNotContainRequestExecutionContext() = runTest {
32+
MockServer().use { mockServer ->
33+
ApolloClient.Builder()
34+
.serverUrl(mockServer.url())
35+
.addInterceptor(object : ApolloInterceptor {
36+
override fun <D : Operation.Data> intercept(
37+
request: ApolloRequest<D>,
38+
chain: ApolloInterceptorChain,
39+
): Flow<ApolloResponse<D>> {
40+
assertNotNull(request.executionContext[MyExecutionContext])
41+
return chain.proceed(request)
42+
}
43+
44+
})
45+
.build()
46+
.use { apolloClient ->
47+
48+
mockServer.enqueueString(FooQuery.successResponse)
49+
val response = apolloClient.query(FooQuery())
50+
.addExecutionContext(MyExecutionContext())
51+
.execute()
52+
53+
assertNull(response.executionContext[MyExecutionContext])
54+
}
55+
}
56+
}
57+
58+
@Test
59+
fun responseDoesNotContainClientExecutionContext() = runTest {
60+
MockServer().use { mockServer ->
61+
ApolloClient.Builder()
62+
.serverUrl(mockServer.url())
63+
.addExecutionContext(MyExecutionContext())
64+
.build()
65+
.use { apolloClient ->
66+
67+
mockServer.enqueueString(FooQuery.successResponse)
68+
val response = apolloClient.query(FooQuery())
69+
.execute()
70+
71+
assertNull(response.executionContext[MyExecutionContext])
72+
}
73+
}
74+
}
75+
}
76+
77+
internal class MyExecutionContext : ExecutionContext.Element {
78+
override val key: ExecutionContext.Key<*>
79+
get() = Key
80+
81+
companion object Key : ExecutionContext.Key<MyExecutionContext>
82+
}

0 commit comments

Comments
 (0)