From 624ae6252ef15b4548123cc4c7e8ff0cb7af55ac Mon Sep 17 00:00:00 2001 From: forge-bot Date: Sat, 18 Jul 2026 11:17:53 +0000 Subject: [PATCH] =?UTF-8?q?[=EB=A7=A4=EC=9E=85]=20mg=5Frecv=5Fsvc=20?= =?UTF-8?q?=E2=86=92=20=EC=A0=84=EB=AC=B8=EC=88=98=EC=8B=A0=20@Service=20(?= =?UTF-8?q?ACM-MG-004)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acquiring/service/TxMessageCodecTest.java | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxMessageCodecTest.java diff --git a/boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxMessageCodecTest.java b/boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxMessageCodecTest.java new file mode 100644 index 0000000..dea6ab3 --- /dev/null +++ b/boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxMessageCodecTest.java @@ -0,0 +1,107 @@ +package com.klaro.acquirecore.acquiring.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.klaro.acquirecore.acquiring.dto.TxMessage; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.nio.charset.StandardCharsets; + +import static org.junit.jupiter.api.Assertions.*; + +class TxMessageCodecTest { + + private TxMessageCodec codec; + + @BeforeEach + void setUp() { + codec = new TxMessageCodec(new ObjectMapper()); + } + + @Test + void unpack_validJsonMessage_parsesCorrectly() { + // Given + String body = "{\"TXID\":\"TX001\",\"MERCHANTID\":\"M001\",\"TERMINALID\":\"T001\",\"AMOUNT\":\"10000\"}"; + byte[] raw = buildRawMessage("HEADER", body); + + // When + TxMessage msg = codec.unpack(raw); + + // Then + assertEquals("TX001", msg.getTxId()); + assertEquals("M001", msg.getMerchantId()); + assertEquals("T001", msg.getTerminalId()); + assertEquals("10000", msg.getAmount()); + } + + @Test + void unpack_delimitedMessage_parsesCorrectly() { + // Given + String body = "TXID=TX002|MERCHANTID=M002|TERMINALID=T002|AMOUNT=20000"; + byte[] raw = buildRawMessage("HEADER", body); + + // When + TxMessage msg = codec.unpack(raw); + + // Then + assertEquals("TX002", msg.getTxId()); + assertEquals("M002", msg.getMerchantId()); + assertEquals("T002", msg.getTerminalId()); + assertEquals("20000", msg.getAmount()); + } + + @Test + void unpack_tooShortMessage_throwsException() { + // Given + byte[] raw = "short".getBytes(StandardCharsets.ISO_8859_1); + + // When/Then + assertThrows(IllegalArgumentException.class, () -> codec.unpack(raw)); + } + + @Test + void pack_unpackedMessage_producesValidBytes() { + // Given + TxMessage msg = new TxMessage(); + msg.setTxId("TX003"); + msg.setMerchantId("M003"); + msg.setTerminalId("T003"); + msg.setAmount("30000"); + msg.setStatus("REQ"); + + // When + byte[] packed = codec.pack(msg); + + // Then + assertNotNull(packed); + assertTrue(packed.length >= 20); + + // Verify can unpack back + TxMessage unpacked = codec.unpack(packed); + assertEquals("TX003", unpacked.getTxId()); + assertEquals("M003", unpacked.getMerchantId()); + } + + @Test + void unpack_packRoundTrip_preservesData() { + // Given + String body = "{\"TXID\":\"TX004\",\"MERCHANTID\":\"M004\",\"AMOUNT\":\"40000\",\"AUTHNO\":\"123456\"}"; + byte[] raw = buildRawMessage("HEADER", body); + + // When + TxMessage original = codec.unpack(raw); + byte[] repacked = codec.pack(original); + TxMessage roundTrip = codec.unpack(repacked); + + // Then + assertEquals(original.getTxId(), roundTrip.getTxId()); + assertEquals(original.getMerchantId(), roundTrip.getMerchantId()); + assertEquals(original.getAmount(), roundTrip.getAmount()); + assertEquals(original.getAuthNo(), roundTrip.getAuthNo()); + } + + private byte[] buildRawMessage(String header, String body) { + String hdr = String.format("%-20s", header); + return (hdr + body).getBytes(StandardCharsets.ISO_8859_1); + } +}