diff --git a/boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxServiceTest.java b/boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxServiceTest.java new file mode 100644 index 0000000..d472ca1 --- /dev/null +++ b/boot/modules/acquiring/src/test/java/com/klaro/acquirecore/acquiring/service/TxServiceTest.java @@ -0,0 +1,94 @@ +package com.klaro.acquirecore.acquiring.service; + +import com.klaro.acquirecore.acquiring.codec.MessageCodec; +import com.klaro.acquirecore.acquiring.codec.UnpackedMessage; +import com.klaro.acquirecore.acquiring.dto.TxRequest; +import com.klaro.acquirecore.acquiring.dto.TxResponse; +import com.klaro.acquirecore.acquiring.repository.TxRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class TxServiceTest { + + @Mock + private TxRepository txRepository; + + private MessageCodec messageCodec; + private TxService txService; + + @BeforeEach + void setUp() { + messageCodec = new MessageCodec(); + txService = new TxService(messageCodec, txRepository); + } + + @Test + void processMessage_validMessage_returnsApproved() { + String rawMessage = "0100TRX123456789MER00000012345 41111111111111112025/1230N "; + TxResponse response = txService.processMessage(rawMessage.getBytes()); + + assertNotNull(response); + assertEquals("00", response.getRespCode()); + assertEquals("Approved", response.getRespMsg()); + verify(txRepository, times(1)).save(any(TxRequest.class)); + } + + @Test + void processMessage_emptyMessage_returnsError() { + TxResponse response = txService.processMessage(new byte[0]); + + assertNotNull(response); + assertEquals("99", response.getRespCode()); + } + + @Test + void processMessage_nullMessage_returnsError() { + TxResponse response = txService.processMessage(null); + + assertNotNull(response); + assertEquals("99", response.getRespCode()); + } + + @Test + void codec_unpackValidMessage_parsesFields() { + String raw = "0100TRX123456789MER00000012345 41111111111111112025/1230N "; + UnpackedMessage unpacked = messageCodec.unpack(raw.getBytes()); + + assertEquals("0100", unpacked.getTxType()); + assertEquals("TRX123456789", unpacked.getTraceNo()); + assertEquals("MER00000012345", unpacked.getMerchantId()); + assertEquals("4111111111111111", unpacked.getCardNo()); + } + + @Test + void codec_unpackEmpty_throwsException() { + assertThrows(IllegalArgumentException.class, () -> messageCodec.unpack(new byte[0])); + } + + @Test + void codec_packUnpacked_roundTrips() { + UnpackedMessage original = new UnpackedMessage(); + original.setTxType("0100"); + original.setTraceNo("TRX123456789"); + original.setMerchantId("MER00000012345"); + original.setAmount("000000100000"); + original.setCardNo("4111111111111111"); + original.setExpiryDate("2025/1230"); + original.setInstallments("00"); + original.setFiller(""); + + byte[] packed = messageCodec.pack(original); + UnpackedMessage result = messageCodec.unpack(packed); + + assertEquals(original.getTxType(), result.getTxType()); + assertEquals(original.getTraceNo(), result.getTraceNo()); + } +}