카드 정산 업무 규칙과 전환 불변식 추출 #4
1 changed files with 75 additions and 0 deletions
|
|
@ -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<String> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue