package com.gzzn.omms.msgexchange.codec
import com.gzzn.omms.msgexchange.domain.MsgKind
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertInstanceOf
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
class JacksonXmlCodecTest {
private val codec = JacksonXmlCodec()
@Test
fun `decode AODBGTDT sample extracts META and three gates`() {
val raw = """
AODB
1243
20021010090311
FLOP
GTDT
121112312
CA-CA101-A-12DEC261345-D
G28
15DEC261805
15DEC261925
15DEC261825
D
G33
15DEC261805
15DEC261925
I
G23
15DEC261805
15DEC261925
D
""".trimIndent()
val result = codec.decode(raw)
assertInstanceOf(DecodeResult.Ok::class.java, result)
val msg = (result as DecodeResult.Ok).message
assertEquals(MsgKind.Flop("GTDT"), msg.kind)
assertEquals("AODB", msg.meta.sndr)
assertEquals(1243L, msg.meta.seqn)
val body = msg.body as FlopPayload
assertEquals("121112312", body.flid)
assertEquals("CA-CA101-A-12DEC261345-D", body.scalars["FFID"])
assertEquals(3, body.collections["GTDT"]!!.size)
assertEquals("G28", body.collections["GTDT"]!![0]["GATE"])
assertEquals("1", body.collections["GTDT"]!![0]["GTNO"])
assertEquals("G33", body.collections["GTDT"]!![1]["GATE"])
assertEquals("3", body.collections["GTDT"]!![2]["GTNO"])
}
@Test
fun `decode GTNO zero marks gate clear snapshot`() {
val raw = """
AODB120021010090311
FLOPGTDT
F_CLEAR
""".trimIndent()
val msg = (codec.decode(raw) as DecodeResult.Ok).message
val body = msg.body as FlopPayload
assertEquals(listOf(mapOf("GTNO" to "0")), body.collections["GTDT"])
}
@Test
fun `malformed xml returns MALFORMED not CODEC_ERROR`() {
val err = codec.decode("not-xml") as DecodeResult.Err
assertEquals(com.gzzn.omms.msgexchange.domain.ErrorClass.MALFORMED, err.failure.errorClass)
assertTrue(err.failure.detail.contains("empty-or-non-xml"))
}
}