@@ -92,6 +92,52 @@ class MediaJsonTest : ShouldSpec() {
9292 (parsed == = event) shouldBe false
9393 }
9494 }
95+ context(" PingEvent" ) {
96+ val id = 42
97+ val event = PingEvent (id)
98+
99+ context(" Serializing" ) {
100+ val parsed = parser.parse(event.toJson())
101+ parsed.shouldBeInstanceOf<JSONObject >()
102+ parsed[" event" ] shouldBe " ping"
103+ parsed[" id" ] shouldBe id
104+ }
105+ context(" Parsing" ) {
106+ val parsed = Event .parse(event.toJson())
107+ (parsed == event) shouldBe true
108+ (parsed == = event) shouldBe false
109+ }
110+ }
111+ context(" PongEvent" ) {
112+ val id = 123
113+ val event = PongEvent (id)
114+
115+ context(" Serializing" ) {
116+ val parsed = parser.parse(event.toJson())
117+ parsed.shouldBeInstanceOf<JSONObject >()
118+ parsed[" event" ] shouldBe " pong"
119+ parsed[" id" ] shouldBe id
120+ }
121+ context(" Parsing" ) {
122+ val parsed = Event .parse(event.toJson())
123+ (parsed == event) shouldBe true
124+ (parsed == = event) shouldBe false
125+ }
126+ }
127+ context(" TranscriptionResultEvent" ) {
128+ val event = TranscriptionResultEvent ()
129+
130+ context(" Serializing" ) {
131+ val parsed = parser.parse(event.toJson())
132+ parsed.shouldBeInstanceOf<JSONObject >()
133+ parsed[" event" ] shouldBe " transcription-result"
134+ }
135+ context(" Parsing" ) {
136+ val parsed = Event .parse(event.toJson())
137+ parsed.shouldBeInstanceOf<TranscriptionResultEvent >()
138+ parsed.event shouldBe " transcription-result"
139+ }
140+ }
95141 context(" Parsing valid samples" ) {
96142 context(" Start" ) {
97143 val parsed = Event .parse(
@@ -179,15 +225,15 @@ class MediaJsonTest : ShouldSpec() {
179225 context(" Media with seq/chunk/timestamp as numbers" ) {
180226 val parsed = Event .parse(
181227 """
182- {
228+ {
183229 "event": "media",
184- "sequenceNumber": 2,
185- "media": {
186- "tag": "incoming",
187- "chunk": 1,
230+ "sequenceNumber": 2,
231+ "media": {
232+ "tag": "incoming",
233+ "chunk": 1,
188234 "timestamp": 5,
189235 "payload": "no+JhoaJjpzSHxAKBgYJ...=="
190- }
236+ }
191237 }
192238 """ .trimIndent()
193239 )
@@ -200,6 +246,81 @@ class MediaJsonTest : ShouldSpec() {
200246 parsed.media.timestamp shouldBe 5
201247 parsed.media.payload shouldBe " no+JhoaJjpzSHxAKBgYJ...=="
202248 }
249+ context(" Ping" ) {
250+ val parsed = Event .parse(
251+ """
252+ {
253+ "event": "ping",
254+ "id": 42
255+ }
256+ """ .trimIndent()
257+ )
258+
259+ parsed.shouldBeInstanceOf<PingEvent >()
260+ parsed.event shouldBe " ping"
261+ parsed.id shouldBe 42
262+ }
263+ context(" Pong" ) {
264+ val parsed = Event .parse(
265+ """
266+ {
267+ "event": "pong",
268+ "id": 123
269+ }
270+ """ .trimIndent()
271+ )
272+
273+ parsed.shouldBeInstanceOf<PongEvent >()
274+ parsed.event shouldBe " pong"
275+ parsed.id shouldBe 123
276+ }
277+ context(" TranscriptionResult " ) {
278+ val originalJson = """
279+ {
280+ "transcript": [
281+ {
282+ "confidence": 0.999666973709317,
283+ "text": "blah blah blah"
284+ }
285+ ],
286+ "is_interim": false,
287+ "message_id": "item_CnopdEudFcwXCkZfCIHrC",
288+ "type": "transcription-result",
289+ "event": "transcription-result",
290+ "participant": {
291+ "id": "08847b00",
292+ "ssrc": "1776301157"
293+ },
294+ "timestamp": 1765989508172
295+ }
296+ """ .trimIndent()
297+
298+ val parsed = Event .parse(originalJson)
299+ parsed.shouldBeInstanceOf<TranscriptionResultEvent >()
300+
301+ val serialized = parsed.toJson()
302+ val reparsed = parser.parse(serialized)
303+ reparsed.shouldBeInstanceOf<JSONObject >()
304+
305+ reparsed[" event" ] shouldBe " transcription-result"
306+ reparsed[" type" ] shouldBe " transcription-result"
307+ reparsed[" message_id" ] shouldBe " item_CnopdEudFcwXCkZfCIHrC"
308+ reparsed[" is_interim" ] shouldBe false
309+ reparsed[" timestamp" ] shouldBe 1765989508172L
310+
311+ val transcript = reparsed[" transcript" ]
312+ transcript.shouldBeInstanceOf<List <* >>()
313+ transcript.size shouldBe 1
314+ val transcriptItem = transcript[0 ] as Map <* , * >
315+ transcriptItem.shouldBeInstanceOf<Map <* , * >>()
316+ transcriptItem[" confidence" ] shouldBe 0.999666973709317
317+ transcriptItem[" text" ] shouldBe " blah blah blah"
318+
319+ val participant = reparsed[" participant" ]
320+ participant.shouldBeInstanceOf<Map <* , * >>()
321+ participant[" id" ] shouldBe " 08847b00"
322+ participant[" ssrc" ] shouldBe " 1776301157"
323+ }
203324 }
204325 context(" Parsing invalid samples" ) {
205326 context(" Invalid sequence number" ) {
0 commit comments