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