Skip to content

Commit 709e35b

Browse files
committed
Unwrap response from within a reply payload
1 parent deed980 commit 709e35b

File tree

2 files changed

+56
-13
lines changed

2 files changed

+56
-13
lines changed

src/main/kotlin/org/phoenixframework/Message.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,19 +37,24 @@ class Message(
3737
@SerializedName("event")
3838
val event: String = "",
3939

40-
/** The payload of the message */
40+
/** The raw payload of the message. It is recommended that you use `payload` instead. */
4141
@SerializedName("payload")
42-
val payload: Payload = HashMap(),
42+
val rawPayload: Payload = HashMap(),
4343

4444
/** The ref sent during a join event. Empty if not present. */
4545
@SerializedName("join_ref")
4646
val joinRef: String? = null) {
4747

4848

49+
/** The payload of the message */
50+
@Suppress("UNCHECKED_CAST")
51+
val payload: Payload
52+
get() = rawPayload["response"] as? Payload ?: rawPayload
53+
4954
/**
5055
* Convenience var to access the message's payload's status. Equivalent
5156
* to checking message.payload["status"] yourself
5257
*/
5358
val status: String?
54-
get() = payload["status"] as? String
59+
get() = rawPayload["status"] as? String
5560
}

src/test/kotlin/org/phoenixframework/MessageTest.kt

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,56 @@ import org.junit.jupiter.api.Test
88
class MessageTest {
99

1010
@Nested
11-
@DisplayName("status")
12-
inner class Status {
11+
@DisplayName("json parsing")
12+
inner class JsonParsing {
1313

1414
@Test
15-
internal fun `returns the status from the payload`() {
16-
val payload = mapOf("one" to "two", "status" to "ok")
17-
val message = Message("ref", "topic", "event", payload, null)
18-
19-
assertThat(message.ref).isEqualTo("ref")
20-
assertThat(message.topic).isEqualTo("topic")
21-
assertThat(message.event).isEqualTo("event")
22-
assertThat(message.payload).isEqualTo(payload)
15+
internal fun `jsonParsing parses normal message`() {
16+
val json = """
17+
{
18+
"event": "update",
19+
"payload": {
20+
"user": "James S.",
21+
"message": "This is a test"
22+
},
23+
"ref": "6",
24+
"topic": "my-topic"
25+
}
26+
""".trimIndent()
27+
28+
val message = Defaults.decode.invoke(json)
29+
30+
assertThat(message.ref).isEqualTo("6")
31+
assertThat(message.topic).isEqualTo("my-topic")
32+
assertThat(message.event).isEqualTo("update")
33+
assertThat(message.payload).isEqualTo(mapOf("user" to "James S.", "message" to "This is a test"))
34+
assertThat(message.joinRef).isNull()
35+
assertThat(message.status).isNull()
36+
}
37+
38+
@Test
39+
internal fun `jsonParsing parses a reply`() {
40+
val json = """
41+
{
42+
"event": "phx_reply",
43+
"payload": {
44+
"response": {
45+
"user": "James S.",
46+
"message": "This is a test"
47+
},
48+
"status": "ok"
49+
},
50+
"ref": "6",
51+
"topic": "my-topic"
52+
}
53+
""".trimIndent()
54+
55+
val message = Defaults.decode.invoke(json)
56+
57+
assertThat(message.ref).isEqualTo("6")
58+
assertThat(message.topic).isEqualTo("my-topic")
59+
assertThat(message.event).isEqualTo("phx_reply")
60+
assertThat(message.payload).isEqualTo(mapOf("user" to "James S.", "message" to "This is a test"))
2361
assertThat(message.joinRef).isNull()
2462
assertThat(message.status).isEqualTo("ok")
2563
}

0 commit comments

Comments
 (0)