From b50dd867f39796fc9e086e46c993bb270eb95fc0 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Mon, 13 Jul 2026 10:36:03 +0000 Subject: [PATCH] =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EC=A0=95=EC=82=B0=20?= =?UTF-8?q?=EC=97=85=EB=AC=B4=20=EA=B7=9C=EC=B9=99=EA=B3=BC=20=EC=A0=84?= =?UTF-8?q?=ED=99=98=20=EB=B6=88=EB=B3=80=EC=8B=9D=20=EC=B6=94=EC=B6=9C=20?= =?UTF-8?q?(codex-bais-final3-20260713-192718-BAIS-SPRING-ANA-CARD-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SettlementInvariantVerificationTest.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 card-settlement-migration/src/test/java/com/bais/card/settlement/SettlementInvariantVerificationTest.java diff --git a/card-settlement-migration/src/test/java/com/bais/card/settlement/SettlementInvariantVerificationTest.java b/card-settlement-migration/src/test/java/com/bais/card/settlement/SettlementInvariantVerificationTest.java new file mode 100644 index 0000000..1aabfd4 --- /dev/null +++ b/card-settlement-migration/src/test/java/com/bais/card/settlement/SettlementInvariantVerificationTest.java @@ -0,0 +1,75 @@ +package com.bais.card.settlement; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; +import static org.junit.jupiter.api.Assertions.*; + +/** + * 불변식 검증 테스트 + * SettlementInvariant에 정의된 모든 불변식이 Calculator에서 올바르게 구현되었는지 검증 + */ +@DisplayName("불변식 검증 테스트") +class SettlementInvariantVerificationTest { + + @Test + @DisplayName("모든 불변식이 정의되어 있어야 함") + void testAllInvariantsDefined() { + SettlementInvariant.Invariant[] invariants = SettlementInvariant.getAllInvariants(); + assertNotNull(invariants); + assertEquals(17, invariants.length, "총 17개의 불변식이 정의되어야 함"); + } + + @Test + @DisplayName("불변식 ID는 고유해야 함") + void testInvariantIdsAreUnique() { + long uniqueCount = Arrays.stream(SettlementInvariant.getAllInvariants()) + .map(SettlementInvariant.Invariant::getId) + .distinct() + .count(); + assertEquals(17, uniqueCount, "모든 불변식 ID는 고유해야 함"); + } + + @Test + @DisplayName("주요 불변식 존재 확인") + void testKeyInvariantsExist() { + Set ids = Arrays.stream(SettlementInvariant.getAllInvariants()) + .map(SettlementInvariant.Invariant::getId) + .collect(Collectors.toSet()); + + assertTrue(ids.contains("BRAND_SETTLEMENT_NON_NEGATIVE")); + assertTrue(ids.contains("BRAND_SETTLEMENT_FORMULA")); + assertTrue(ids.contains("BRAND_COMMISSION_FORMULA")); + assertTrue(ids.contains("BRAND_COMMISSION_RATE_DEFAULT")); + assertTrue(ids.contains("IRD_NON_NEGATIVE")); + assertTrue(ids.contains("IRD_FORMULA")); + assertTrue(ids.contains("IRD_RATE_DEFAULT")); + assertTrue(ids.contains("ISSUER_FEE_NON_NEGATIVE")); + assertTrue(ids.contains("ISSUER_FEE_FORMULA")); + assertTrue(ids.contains("ISSUER_FEE_RATE_DEFAULT")); + assertTrue(ids.contains("ISSUER_SETTLEMENT_NON_NEGATIVE")); + assertTrue(ids.contains("ISSUER_SETTLEMENT_FORMULA")); + assertTrue(ids.contains("AMOUNT_NOT_NULL")); + assertTrue(ids.contains("AMOUNT_NON_NEGATIVE")); + assertTrue(ids.contains("AMOUNT_MAX_LIMIT")); + assertTrue(ids.contains("AMOUNT_SCALE")); + assertTrue(ids.contains("ROUNDING_MODE")); + } + + @Test + @DisplayName("불변식 설명과 수식이 비어있지 않아야 함") + void testInvariantMetadataNotEmpty() { + for (SettlementInvariant.Invariant inv : SettlementInvariant.getAllInvariants()) { + assertNotNull(inv.getDescription()); + assertFalse(inv.getDescription().isEmpty()); + assertNotNull(inv.getFormula()); + assertFalse(inv.getFormula().isEmpty()); + assertNotNull(inv.getAffectedClass()); + assertFalse(inv.getAffectedClass().isEmpty()); + assertNotNull(inv.getPreservationNote()); + assertFalse(inv.getPreservationNote().isEmpty()); + } + } +}