Skip to content

Commit c306c86

Browse files
author
Guilherme Souza
committed
fix tests
1 parent 3b61ae2 commit c306c86

File tree

2 files changed

+137
-109
lines changed

2 files changed

+137
-109
lines changed

Sources/Realtime/V2/RealtimeChannelV2.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ public final class RealtimeChannelV2: Sendable {
517517
filter: String?,
518518
callback: @escaping @Sendable (AnyAction) -> Void
519519
) -> RealtimeSubscription {
520-
guard status == .subscribed else {
520+
guard status != .subscribed else {
521521
reportIssue(
522522
"You cannot call postgresChange after joining the channel, this won't work as expected."
523523
)

Tests/RealtimeTests/RealtimeTests.swift

Lines changed: 136 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import ConcurrencyExtras
22
import CustomDump
33
import Helpers
4-
@testable import Realtime
4+
import InlineSnapshotTesting
55
import TestHelpers
66
import 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

297367
extension 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

Comments
 (0)