aboutsummaryrefslogtreecommitdiffstats
path: root/service/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'service/src/test')
-rw-r--r--service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java b/service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java
new file mode 100644
index 0000000..976442c
--- /dev/null
+++ b/service/src/test/java/market/guess/service/catalog/infrastructure/adapter/LedgerMapperTest.java
@@ -0,0 +1,113 @@
1package market.guess.service.catalog.infrastructure.adapter;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertNull;
6import static org.junit.Assert.assertTrue;
7
8import java.math.BigDecimal;
9import java.time.Instant;
10import java.util.List;
11import market.guess.model.ledger.LedgerDTO;
12import market.guess.model.ledger.LedgerEntryDTO;
13import market.guess.model.ledger.LedgerType;
14import market.guess.service.ledger.Ledger;
15import market.guess.service.ledger.LedgerEntry;
16import org.junit.Test;
17import org.mapstruct.factory.Mappers;
18
19public class LedgerMapperTest {
20
21 private final LedgerMapper mapper = Mappers.getMapper(LedgerMapper.class);
22
23 @Test
24 public void nullLedgerMapsToNull() {
25 assertNull(mapper.ledgerToLedgerDTO(null));
26 }
27
28 @Test
29 public void mapsOwnerAndBalanceAsStrings() {
30 Ledger ledger = new Ledger("alice", new BigDecimal("100"));
31
32 LedgerDTO dto = mapper.ledgerToLedgerDTO(ledger);
33
34 assertEquals("alice", dto.owner());
35 assertEquals("100.00", dto.balance());
36 }
37
38 @Test
39 public void emptyEntriesMapToEmptyList() {
40 Ledger ledger = new Ledger("alice", new BigDecimal("0"));
41
42 LedgerDTO dto = mapper.ledgerToLedgerDTO(ledger);
43
44 assertTrue(dto.entries().isEmpty());
45 }
46
47 @Test
48 public void mapsEntryFieldsInOrder() {
49 Ledger ledger = new Ledger("bob", new BigDecimal("0"));
50 ledger.record(
51 new LedgerEntry(
52 1,
53 Instant.parse("2026-01-01T00:00:00Z"),
54 LedgerType.DEPOSIT,
55 new BigDecimal("50.00"),
56 new BigDecimal("50.00"),
57 "first"));
58 ledger.record(
59 new LedgerEntry(
60 2,
61 Instant.parse("2026-01-02T00:00:00Z"),
62 LedgerType.PURCHASE,
63 new BigDecimal("-20.00"),
64 new BigDecimal("30.00"),
65 "second"));
66
67 List<LedgerEntryDTO> entries = mapper.ledgerToLedgerDTO(ledger).entries();
68
69 assertEquals(2, entries.size());
70 LedgerEntryDTO first = entries.get(0);
71 assertEquals(LedgerType.DEPOSIT, first.type());
72 assertEquals("50.00", first.amount());
73 assertEquals("50.00", first.balanceAfter());
74 assertEquals("first", first.note());
75 LedgerEntryDTO second = entries.get(1);
76 assertEquals(LedgerType.PURCHASE, second.type());
77 assertEquals("-20.00", second.amount());
78 assertEquals("30.00", second.balanceAfter());
79 assertEquals("second", second.note());
80 }
81
82 @Test
83 public void nullAmountAndBalanceAfterMapToNullStrings() {
84 Ledger ledger = new Ledger("carol", new BigDecimal("0"));
85 ledger.record(new LedgerEntry(1, Instant.now(), LedgerType.REFUND, null, null, null));
86
87 LedgerEntryDTO entry = mapper.ledgerToLedgerDTO(ledger).entries().get(0);
88
89 assertNull(entry.amount());
90 assertNull(entry.balanceAfter());
91 }
92
93 /**
94 * LedgerEntry.id/time and Ledger's account-blocked state have no matching AccountDTO/
95 * LedgerEntryDTO source property, so MapStruct leaves them at their Java defaults. This pins that
96 * known gap; once the mapper is taught to fill seq/at/blocked, update these assertions instead of
97 * deleting them.
98 */
99 @Test
100 public void unmappedTargetPropertiesFallBackToDefaults() {
101 Ledger ledger = new Ledger("dave", new BigDecimal("0"));
102 ledger.record(
103 new LedgerEntry(
104 7, Instant.now(), LedgerType.COMMISSION, BigDecimal.ONE, BigDecimal.ONE, "n"));
105
106 LedgerDTO dto = mapper.ledgerToLedgerDTO(ledger);
107
108 assertFalse(dto.blocked());
109 LedgerEntryDTO entry = dto.entries().get(0);
110 assertEquals(0L, entry.seq());
111 assertNull(entry.at());
112 }
113}