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")) } }