@@ -18,21 +18,23 @@ package com.expediagroup.graphql.examples.subscriptions
18
18
19
19
import com.expediagroup.graphql.examples.SUBSCRIPTION_ENDPOINT
20
20
import com.expediagroup.graphql.spring.model.SubscriptionOperationMessage
21
+ import com.expediagroup.graphql.spring.model.SubscriptionOperationMessage.ClientMessages.GQL_CONNECTION_INIT
21
22
import com.expediagroup.graphql.spring.model.SubscriptionOperationMessage.ClientMessages.GQL_START
22
23
import com.expediagroup.graphql.types.GraphQLRequest
23
24
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
24
25
import com.fasterxml.jackson.module.kotlin.readValue
25
26
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
27
+ import java.net.URI
26
28
import org.junit.jupiter.api.Test
27
29
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
28
30
import org.springframework.boot.test.context.SpringBootTest
29
31
import org.springframework.boot.web.server.LocalServerPort
30
32
import org.springframework.web.reactive.socket.WebSocketSession
31
33
import org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient
32
34
import reactor.core.publisher.Mono
35
+ import reactor.kotlin.core.publisher.toMono
33
36
import reactor.test.StepVerifier
34
37
import reactor.test.publisher.TestPublisher
35
- import java.net.URI
36
38
37
39
@SpringBootTest(
38
40
webEnvironment = SpringBootTest .WebEnvironment .RANDOM_PORT ,
@@ -93,22 +95,28 @@ class SimpleSubscriptionIT(@LocalServerPort private var port: Int) {
93
95
}
94
96
95
97
private fun subscribe (query : String , id : String ): TestPublisher <String > {
96
- val message = toMessage(query, id)
97
98
val output = TestPublisher .create<String >()
98
99
99
100
val client = ReactorNettyWebSocketClient ()
100
101
val uri = URI .create(" ws://localhost:$port$SUBSCRIPTION_ENDPOINT " )
101
102
102
- client.execute(uri) { session -> executeSubscription(session, message, output) }.subscribe()
103
+ client.execute(uri) { session -> executeSubscription(session, query, id, output) }.subscribe()
104
+
103
105
return output
104
106
}
105
107
106
108
private fun executeSubscription (
107
109
session : WebSocketSession ,
108
- message : String ,
110
+ query : String ,
111
+ id : String ,
109
112
output : TestPublisher <String >
110
113
): Mono <Void > {
111
- return session.send(Mono .just(session.textMessage(message)))
114
+ val initMessage = getInitMessage(id)
115
+ val startMessage = getStartMessage(query, id)
116
+ val firstMessage = session.textMessage(initMessage).toMono()
117
+ .concatWith(session.textMessage(startMessage).toMono())
118
+
119
+ return session.send(firstMessage)
112
120
.thenMany(
113
121
session.receive()
114
122
.map { objectMapper.readValue<SubscriptionOperationMessage >(it.payloadAsText) }
@@ -124,9 +132,10 @@ class SimpleSubscriptionIT(@LocalServerPort private var port: Int) {
124
132
.then()
125
133
}
126
134
127
- private fun toMessage (query : String , id : String ): String {
135
+ private fun SubscriptionOperationMessage.toJson () = objectMapper.writeValueAsString(this )
136
+ private fun getInitMessage (id : String ) = SubscriptionOperationMessage (GQL_CONNECTION_INIT .type, id).toJson()
137
+ private fun getStartMessage (query : String , id : String ): String {
128
138
val request = GraphQLRequest (" subscription { $query }" )
129
- val subscriptionOperationMessage = SubscriptionOperationMessage (GQL_START .type, id = id, payload = request)
130
- return objectMapper.writeValueAsString(subscriptionOperationMessage)
139
+ return SubscriptionOperationMessage (GQL_START .type, id = id, payload = request).toJson()
131
140
}
132
141
}
0 commit comments