package com.craigvg.lichun_android.network import com.craigvg.lichun_android.domain.models.EventV2Envelope import com.craigvg.lichun_android.domain.models.parseEventV2Envelope import kotlinx.serialization.json.Json import kotlinx.serialization.json.jsonObject import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test class EventV2ParsingTest { private val parserJson = Json { ignoreUnknownKeys = true } @Test fun `parses event prompt envelope`() { val payload = parserJson.parseToJsonElement( """ { "type": "event_prompt", "eventId": "event_adult", "instanceId": "evt-1", "prompt": "Choose one", "choices": [ { "choiceId": "help", "text": "Help" } ], "metadata": { "category": "adulthood" } } """.trimIndent() ).jsonObject val envelope = parseEventV2Envelope(payload, parserJson) assertTrue(envelope is EventV2Envelope.Prompt) val prompt = (envelope as EventV2Envelope.Prompt).value assertEquals("event_adult", prompt.eventId) assertEquals("help", prompt.choices.first().choiceId) assertEquals("adulthood", prompt.metadata?.category) } @Test fun `parses event resolved envelope with metadata`() { val payload = parserJson.parseToJsonElement( """ { "type": "event_resolved", "eventId": "event_adult", "instanceId": "evt-1", "resolutionText": "Resolved", "metadata": { "category": "dilemmas", "status": "resolved" } } """.trimIndent() ).jsonObject val envelope = parseEventV2Envelope(payload, parserJson) assertTrue(envelope is EventV2Envelope.Resolved) val resolved = (envelope as EventV2Envelope.Resolved).value assertEquals("Resolved", resolved.resolutionText) assertEquals("dilemmas", resolved.metadata?.category) assertEquals("resolved", resolved.metadata?.status) } @Test fun `parses event error envelope`() { val payload = parserJson.parseToJsonElement( """ { "type": "event_error", "code": "INVALID_CHOICE", "message": "Choice is invalid", "eventId": "event_adult", "instanceId": "evt-1" } """.trimIndent() ).jsonObject val envelope = parseEventV2Envelope(payload, parserJson) assertTrue(envelope is EventV2Envelope.Error) val error = (envelope as EventV2Envelope.Error).value assertEquals("INVALID_CHOICE", error.code) assertEquals("Choice is invalid", error.message) } }