@@ -9,6 +9,7 @@ struct DefaultMessagesTests {
99 // @spec CHA-M3a
1010 // @spec CHA-M3b
1111 // @spec CHA-M3f
12+ // @specOneOf(1/6) CHA-RST6 - Escaping room name for API send message
1213 @Test
1314 func sendMessage( ) async throws {
1415 // Given
@@ -35,7 +36,7 @@ struct DefaultMessagesTests {
3536 }
3637 let chatAPI = ChatAPI ( realtime: realtime)
3738 let channel = MockRealtimeChannel ( initialState: . attached)
38- let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basketball " , logger: TestLogger ( ) )
39+ let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basket/ball " , logger: TestLogger ( ) )
3940
4041 // When
4142 let sentMessage = try await defaultMessages. send ( withParams: . init( text: " hey " , metadata: [ " key1 " : " val1 " ] , headers: [ " key2 " : " val2 " ] ) )
@@ -52,12 +53,13 @@ struct DefaultMessagesTests {
5253 #expect( sentMessage. timestamp == Date ( timeIntervalSince1970: 1_631_840_000_000 / 1000 ) )
5354 #expect( realtime. callRecorder. hasRecord (
5455 matching: " request(_:path:params:body:headers:) " ,
55- arguments: [ " method " : " POST " , " path " : " /chat/v4/rooms/basketball /messages " , " body " : [ " text " : " hey " , " metadata " : [ " key1 " : " val1 " ] , " headers " : [ " key2 " : " val2 " ] ] , " params " : [ : ] , " headers " : [ : ] ] ,
56+ arguments: [ " method " : " POST " , " path " : " /chat/v4/rooms/basket%2Fball /messages " , " body " : [ " text " : " hey " , " metadata " : [ " key1 " : " val1 " ] , " headers " : [ " key2 " : " val2 " ] ] , " params " : [ : ] , " headers " : [ : ] ] ,
5657 ) )
5758 }
5859
5960 // @spec CHA-M8a
6061 // @spec CHA-M8b
62+ // @specOneOf(2/6) CHA-RST6 - Escaping room name for API update message
6163 @Test
6264 func updateMessage( ) async throws {
6365 // Given
@@ -66,7 +68,7 @@ struct DefaultMessagesTests {
6668 MockHTTPPaginatedResponse (
6769 items: [
6870 [
69- " serial " : " 0 " ,
71+ " serial " : " 123456789-000@123456789:000 " ,
7072 " version " : [
7173 " serial " : " 1 " ,
7274 " metadata " : [ " key " : " val " ] ,
@@ -88,17 +90,17 @@ struct DefaultMessagesTests {
8890 }
8991 let chatAPI = ChatAPI ( realtime: realtime)
9092 let channel = MockRealtimeChannel ( initialState: . attached)
91- let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basketball " , logger: TestLogger ( ) )
93+ let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basket/ball " , logger: TestLogger ( ) )
9294
93- let sentMessage = try Message ( jsonObject: [ " serial " : " 0 " , " version " : [ " serial " : " 0 " ] , " text " : . string( text) , " clientId " : " 0 " , " action " : " message.create " , " metadata " : [ : ] , " headers " : [ : ] ] ) // arbitrary
95+ let sentMessage = try Message ( jsonObject: [ " serial " : " 123456789-000@123456789:000 " , " version " : [ " serial " : " 123456789-000@123456789:000 " ] , " text " : . string( text) , " clientId " : " 0 " , " action " : " message.create " , " metadata " : [ : ] , " headers " : [ : ] ] ) // arbitrary
9496
9597 // When
9698 var newMessage = sentMessage
9799 newMessage. text = text + " ! " // see https://github.com/ably/ably-chat-swift/issues/333
98100 let updatedMessage = try await defaultMessages. update ( newMessage: newMessage, details: . init( description: " add exclamation " , metadata: [ " key " : " val " ] ) )
99101
100102 // Then
101- #expect( updatedMessage. serial == " 0 " )
103+ #expect( updatedMessage. serial == " 123456789-000@123456789:000 " )
102104 #expect( updatedMessage. action == . messageUpdate)
103105 #expect( updatedMessage. text == " hey! " )
104106 #expect( updatedMessage. clientID == " clientId " )
@@ -110,12 +112,13 @@ struct DefaultMessagesTests {
110112 #expect( updatedMessage. timestamp == Date ( timeIntervalSince1970: 1_631_840_000_000 / 1000 ) )
111113 #expect( realtime. callRecorder. hasRecord (
112114 matching: " request(_:path:params:body:headers:) " ,
113- arguments: [ " method " : " PUT " , " path " : " /chat/v4/rooms/basketball /messages/ \( sentMessage . serial ) " , " body " : [ " message " : [ " text " : " hey! " , " metadata " : [ : ] , " headers " : [ : ] ] , " description " : " add exclamation " , " metadata " : [ " key " : " val " ] ] , " params " : [ : ] , " headers " : [ : ] ] ,
115+ arguments: [ " method " : " PUT " , " path " : " /chat/v4/rooms/basket%2Fball /messages/123456789-000@123456789:000 " , " body " : [ " message " : [ " text " : " hey! " , " metadata " : [ : ] , " headers " : [ : ] ] , " description " : " add exclamation " , " metadata " : [ " key " : " val " ] ] , " params " : [ : ] , " headers " : [ : ] ] ,
114116 ) )
115117 }
116118
117119 // @spec CHA-M9a
118120 // @spec CHA-M9b
121+ // @specOneOf(3/6) CHA-RST6 - Escaping room name for API delete message
119122 @Test
120123 func deleteMessage( ) async throws {
121124 // Given
@@ -124,10 +127,10 @@ struct DefaultMessagesTests {
124127 MockHTTPPaginatedResponse (
125128 items: [
126129 [
127- " serial " : " 0 " ,
130+ " serial " : " 123456789-000@123456789:000 " ,
128131 " action " : " message.delete " ,
129132 " version " : [
130- " serial " : " 1 " ,
133+ " serial " : " 123456789-000@123456789:000 " ,
131134 " timestamp " : 1_631_840_030_000 ,
132135 " clientId " : " clientId2 " ,
133136 ] ,
@@ -144,16 +147,16 @@ struct DefaultMessagesTests {
144147 }
145148 let chatAPI = ChatAPI ( realtime: realtime)
146149 let channel = MockRealtimeChannel ( initialState: . attached)
147- let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basketball " , logger: TestLogger ( ) )
150+ let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basket/ball " , logger: TestLogger ( ) )
148151
149- let sentMessage = try Message ( jsonObject: [ " serial " : " 0 " , " version " : [ " serial " : " 0 " ] , " text " : . string( text) , " clientId " : " 0 " , " action " : " message.create " , " metadata " : [ " key " : " val " ] , " headers " : [ : ] ] ) // arbitrary
152+ let sentMessage = try Message ( jsonObject: [ " serial " : " 123456789-000@123456789:000 " , " version " : [ " serial " : " 123456789-000@123456789:000 " ] , " text " : . string( text) , " clientId " : " 0 " , " action " : " message.create " , " metadata " : [ " key " : " val " ] , " headers " : [ : ] ] ) // arbitrary
150153
151154 // When
152155 let deletedMessage = try await defaultMessages. delete ( message: sentMessage, details: nil )
153156
154157 // Then
155- #expect( deletedMessage. serial == " 0 " )
156- #expect( deletedMessage. version. serial == " 1 " )
158+ #expect( deletedMessage. serial == " 123456789-000@123456789:000 " )
159+ #expect( deletedMessage. version. serial == " 123456789-000@123456789:000 " )
157160 #expect( deletedMessage. version. timestamp == Date ( timeIntervalSince1970: 1_631_840_030_000 / 1000 ) )
158161 #expect( deletedMessage. version. clientID == " clientId2 " )
159162 #expect( deletedMessage. action == . messageDelete)
@@ -163,7 +166,7 @@ struct DefaultMessagesTests {
163166 #expect( deletedMessage. timestamp == Date ( timeIntervalSince1970: 1_631_840_000_000 / 1000 ) )
164167 #expect( realtime. callRecorder. hasRecord (
165168 matching: " request(_:path:params:body:headers:) " ,
166- arguments: [ " method " : " POST " , " path " : " /chat/v4/rooms/basketball /messages/ \( sentMessage . serial ) /delete " , " body " : [ : ] , " params " : [ : ] , " headers " : [ : ] ] ,
169+ arguments: [ " method " : " POST " , " path " : " /chat/v4/rooms/basket%2Fball /messages/123456789-000@123456789:000 /delete " , " body " : [ : ] , " params " : [ : ] , " headers " : [ : ] ] ,
167170 ) )
168171 }
169172
@@ -239,6 +242,7 @@ struct DefaultMessagesTests {
239242 }
240243
241244 // @spec CHA-M5a
245+ // @specOneOf(4/6) CHA-RST6 - Escaping room name for API get messages
242246 @Test
243247 func subscriptionPointIsChannelSerialWhenUnderlyingRealtimeChannelIsAttached( ) async throws {
244248 // Given
@@ -251,14 +255,14 @@ struct DefaultMessagesTests {
251255 properties: ARTChannelProperties ( attachSerial: nil , channelSerial: channelSerial) ,
252256 initialState: . attached,
253257 )
254- let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basketball " , logger: TestLogger ( ) )
258+ let defaultMessages = DefaultMessages ( channel: channel, chatAPI: chatAPI, roomName: " basket/ball " , logger: TestLogger ( ) )
255259 let subscription = defaultMessages. subscribe ( )
256260 _ = try await subscription. historyBeforeSubscribe ( withParams: . init( ) )
257261
258262 // Then: subscription point is the current channelSerial of the realtime channel
259263 #expect( realtime. callRecorder. hasRecord (
260264 matching: " request(_:path:params:body:headers:) " ,
261- arguments: [ " method " : " GET " , " path " : " /chat/v4/rooms/basketball /messages " , " body " : [ : ] , " params " : [ " direction " : " backwards " , " fromSerial " : " \( channelSerial) " ] , " headers " : [ : ] ] ,
265+ arguments: [ " method " : " GET " , " path " : " /chat/v4/rooms/basket%2Fball /messages " , " body " : [ : ] , " params " : [ " direction " : " backwards " , " fromSerial " : " \( channelSerial) " ] , " headers " : [ : ] ] ,
262266 ) )
263267 }
264268
0 commit comments