11import ConcurrencyExtras
22import CustomDump
33import Helpers
4- @ testable import Realtime
4+ import InlineSnapshotTesting
55import TestHelpers
66import XCTest
77
8+ @testable import Realtime
9+
810#if canImport(FoundationNetworking)
911 import FoundationNetworking
1012#endif
@@ -91,10 +93,48 @@ final class RealtimeTests: XCTestCase {
9193 ws. mockReceive ( . messagesSubscribed)
9294 await channel. subscribe ( )
9395
94- expectNoDifference (
95- ws. sentMessages,
96- [ . subscribeToMessages( ref: " 1 " , joinRef: " 1 " ) ]
97- )
96+ assertInlineSnapshot ( of: ws. sentMessages, as: . json) {
97+ """
98+ [
99+ {
100+ " event " : " phx_join " ,
101+ " join_ref " : " 1 " ,
102+ " payload " : {
103+ " access_token " : " anon.api.key " ,
104+ " config " : {
105+ " broadcast " : {
106+ " ack " : false,
107+ " self " : false
108+ },
109+ " postgres_changes " : [
110+ {
111+ " event " : " INSERT " ,
112+ " schema " : " public " ,
113+ " table " : " messages "
114+ },
115+ {
116+ " event " : " UPDATE " ,
117+ " schema " : " public " ,
118+ " table " : " messages "
119+ },
120+ {
121+ " event " : " DELETE " ,
122+ " schema " : " public " ,
123+ " table " : " messages "
124+ }
125+ ],
126+ " presence " : {
127+ " key " : " "
128+ },
129+ " private " : false
130+ }
131+ },
132+ " ref " : " 1 " ,
133+ " topic " : " realtime:public:messages "
134+ }
135+ ]
136+ """
137+ }
98138 }
99139
100140 func testSubscribeTimeout( ) async throws {
@@ -132,39 +172,72 @@ final class RealtimeTests: XCTestCase {
132172
133173 try ? await Task . sleep ( nanoseconds: NSEC_PER_SEC * 2 )
134174
135- let joinSentMessages = ws. sentMessages. filter { $0. event == " phx_join " }
136-
137- let expectedMessages = try [
138- RealtimeMessageV2 (
139- joinRef: " 1 " ,
140- ref: " 1 " ,
141- topic: " realtime:public:messages " ,
142- event: " phx_join " ,
143- payload: JSONObject (
144- RealtimeJoinPayload (
145- config: RealtimeJoinConfig ( ) ,
146- accessToken: apiKey
147- )
148- )
149- ) ,
150- RealtimeMessageV2 (
151- joinRef: " 2 " ,
152- ref: " 2 " ,
153- topic: " realtime:public:messages " ,
154- event: " phx_join " ,
155- payload: JSONObject (
156- RealtimeJoinPayload (
157- config: RealtimeJoinConfig ( ) ,
158- accessToken: apiKey
159- )
160- )
161- ) ,
162- ]
163-
164- expectNoDifference (
165- joinSentMessages,
166- expectedMessages
167- )
175+ assertInlineSnapshot ( of: ws. sentMessages, as: . json) {
176+ """
177+ [
178+ {
179+ " event " : " phx_join " ,
180+ " join_ref " : " 1 " ,
181+ " payload " : {
182+ " access_token " : " anon.api.key " ,
183+ " config " : {
184+ " broadcast " : {
185+ " ack " : false,
186+ " self " : false
187+ },
188+ " postgres_changes " : [
189+
190+ ],
191+ " presence " : {
192+ " key " : " "
193+ },
194+ " private " : false
195+ }
196+ },
197+ " ref " : " 1 " ,
198+ " topic " : " realtime:public:messages "
199+ },
200+ {
201+ " event " : " heartbeat " ,
202+ " payload " : {
203+
204+ },
205+ " ref " : " 2 " ,
206+ " topic " : " phoenix "
207+ },
208+ {
209+ " event " : " phx_join " ,
210+ " join_ref " : " 2 " ,
211+ " payload " : {
212+ " access_token " : " anon.api.key " ,
213+ " config " : {
214+ " broadcast " : {
215+ " ack " : false,
216+ " self " : false
217+ },
218+ " postgres_changes " : [
219+
220+ ],
221+ " presence " : {
222+ " key " : " "
223+ },
224+ " private " : false
225+ }
226+ },
227+ " ref " : " 2 " ,
228+ " topic " : " realtime:public:messages "
229+ },
230+ {
231+ " event " : " heartbeat " ,
232+ " payload " : {
233+
234+ },
235+ " ref " : " 3 " ,
236+ " topic " : " phoenix "
237+ }
238+ ]
239+ """
240+ }
168241 }
169242
170243 func testHeartbeat( ) async throws {
@@ -262,30 +335,27 @@ final class RealtimeTests: XCTestCase {
262335 try await channel. broadcast ( event: " test " , message: [ " value " : 42 ] )
263336
264337 let request = await http. receivedRequests. last
265- expectNoDifference (
266- request? . headers,
267- [
268- . contentType: " application/json " ,
269- . apiKey: " anon.api.key " ,
270- . authorization: " Bearer anon.api.key " ,
271- ]
272- )
273-
274- let body = try XCTUnwrap ( request? . body)
275- let json = try JSONDecoder ( ) . decode ( JSONObject . self, from: body)
276- expectNoDifference (
277- json,
278- [
279- " messages " : [
280- [
281- " topic " : " realtime:public:messages " ,
282- " event " : " test " ,
283- " payload " : [ " value " : 42 ] ,
284- " private " : false ,
285- ] ,
286- ] ,
287- ]
288- )
338+ assertInlineSnapshot ( of: request? . urlRequest, as: . raw( pretty: true ) ) {
339+ """
340+ POST https://localhost:54321/realtime/v1/api/broadcast
341+ Authorization: Bearer anon.api.key
342+ Content-Type: application/json
343+ apiKey: anon.api.key
344+
345+ {
346+ " messages " : [
347+ {
348+ " event " : " test " ,
349+ " payload " : {
350+ " value " : 42
351+ },
352+ " private " : false,
353+ " topic " : " realtime:public:messages "
354+ }
355+ ]
356+ }
357+ """
358+ }
289359 }
290360
291361 private func connectSocketAndWait( ) async {
@@ -295,31 +365,6 @@ final class RealtimeTests: XCTestCase {
295365}
296366
297367extension RealtimeMessageV2 {
298- static func subscribeToMessages( ref: String ? , joinRef: String ? ) -> RealtimeMessageV2 {
299- Self (
300- joinRef: joinRef,
301- ref: ref,
302- topic: " realtime:public:messages " ,
303- event: " phx_join " ,
304- payload: [
305- " access_token " : " anon.api.key " ,
306- " config " : [
307- " broadcast " : [
308- " self " : false ,
309- " ack " : false ,
310- ] ,
311- " postgres_changes " : [
312- [ " table " : " messages " , " event " : " INSERT " , " schema " : " public " ] ,
313- [ " table " : " messages " , " schema " : " public " , " event " : " UPDATE " ] ,
314- [ " schema " : " public " , " table " : " messages " , " event " : " DELETE " ] ,
315- ] ,
316- " presence " : [ " key " : " " ] ,
317- " private " : false ,
318- ] ,
319- ]
320- )
321- }
322-
323368 static let messagesSubscribed = Self (
324369 joinRef: nil ,
325370 ref: " 2 " ,
@@ -328,29 +373,12 @@ extension RealtimeMessageV2 {
328373 payload: [
329374 " response " : [
330375 " postgres_changes " : [
331- [ " id " : 43783255 , " event " : " INSERT " , " schema " : " public " , " table " : " messages " ] ,
332- [ " id " : 124973000 , " event " : " UPDATE " , " schema " : " public " , " table " : " messages " ] ,
333- [ " id " : 85243397 , " event " : " DELETE " , " schema " : " public " , " table " : " messages " ] ,
334- ] ,
376+ [ " id " : 43_783_255 , " event " : " INSERT " , " schema " : " public " , " table " : " messages " ] ,
377+ [ " id " : 124_973_000 , " event " : " UPDATE " , " schema " : " public " , " table " : " messages " ] ,
378+ [ " id " : 85_243_397 , " event " : " DELETE " , " schema " : " public " , " table " : " messages " ] ,
379+ ]
335380 ] ,
336381 " status " : " ok " ,
337382 ]
338383 )
339-
340- static let heartbeatResponse = Self (
341- joinRef: nil ,
342- ref: " 1 " ,
343- topic: " phoenix " ,
344- event: " phx_reply " ,
345- payload: [
346- " response " : [ : ] ,
347- " status " : " ok " ,
348- ]
349- )
350- }
351-
352- struct TestLogger : SupabaseLogger {
353- func log( message: SupabaseLogMessage ) {
354- print ( message. description)
355- }
356384}
0 commit comments