You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
digital-rmb-backend/src/test/java/com/yau/digitalrmb/institutionidentity/CurrencyGenerationVerificat...

59 lines
3.1 KiB
Java

package com.yau.digitalrmb.institutionidentity;
import com.yau.digitalrmb.institutionidentity.domain.CurrencyGenerationVerification;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class CurrencyGenerationVerificationDomainTest {
@Test
void completesAllStepThreeStatesInOrder() {
CurrencyGenerationVerification value = value();
assertThat(value.getStatus()).isEqualTo(CurrencyGenerationVerification.Status.RECEIVED);
value.verifySignature(true);
value.verifyDigest("A123456789012345678901234567890123456789012345678901234567890123", true);
value.verifyQuota(new BigDecimal("500000000.00"), new BigDecimal("495000000.00"),
new BigDecimal("5000000.00"));
value.confirm("CENTRAL_FIRST_SM2_KEY", "3044AABB", "20260804210000", "{confirmed:true}");
value.returnResponse();
assertThat(value.getStatus()).isEqualTo(CurrencyGenerationVerification.Status.RESPONSE_RETURNED);
assertThat(value.getSignatureValid()).isTrue();
assertThat(value.getDigestMatches()).isTrue();
assertThat(value.getQuotaSufficient()).isTrue();
}
@Test
void rejectsSkippedAndRepeatedOperations() {
CurrencyGenerationVerification value = value();
assertThatThrownBy(() -> value.verifyDigest(
"A123456789012345678901234567890123456789012345678901234567890123", true))
.isInstanceOf(IllegalStateException.class);
value.verifySignature(true);
assertThatThrownBy(() -> value.verifySignature(true)).isInstanceOf(IllegalStateException.class);
}
@Test
void rejectsInvalidSignatureDigestAndInsufficientQuotaWithoutAdvancing() {
CurrencyGenerationVerification value = value();
assertThatThrownBy(() -> value.verifySignature(false)).isInstanceOf(IllegalArgumentException.class);
assertThat(value.getStatus()).isEqualTo(CurrencyGenerationVerification.Status.RECEIVED);
value.verifySignature(true);
assertThatThrownBy(() -> value.verifyDigest("BAD", false)).isInstanceOf(IllegalArgumentException.class);
assertThat(value.getStatus()).isEqualTo(CurrencyGenerationVerification.Status.SIGNATURE_VERIFIED);
value.verifyDigest("A123456789012345678901234567890123456789012345678901234567890123", true);
assertThatThrownBy(() -> value.verifyQuota(new BigDecimal("500000000.00"),
new BigDecimal("499999999.00"), new BigDecimal("1.00")))
.isInstanceOf(IllegalArgumentException.class);
assertThat(value.getStatus()).isEqualTo(CurrencyGenerationVerification.Status.DIGEST_VERIFIED);
}
private CurrencyGenerationVerification value() {
return CurrencyGenerationVerification.receive(1L, "message", "ORG_123456789ABC|1598.85|SYS_DC_002|20260804210000",
"A123456789012345678901234567890123456789012345678901234567890123",
"3044AABB", "BANK_SECOND_SM2_KEY", new BigDecimal("1598.85"));
}
}