feat: complete resumable payment settlement
parent
754cb2620b
commit
2ddaa9d0ee
@ -0,0 +1,66 @@
|
|||||||
|
package com.yau.digitalrmb.payment.application.service;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.yau.digitalrmb.payment.domain.model.PaymentActor;
|
||||||
|
import com.yau.digitalrmb.payment.interfaces.dto.PaymentActionRequest;
|
||||||
|
import com.yau.digitalrmb.training.attempt.application.ExperimentAttemptService;
|
||||||
|
import com.yau.digitalrmb.training.attempt.domain.ActionStatus;
|
||||||
|
import com.yau.digitalrmb.training.attempt.domain.AttemptStatus;
|
||||||
|
import com.yau.digitalrmb.training.attempt.domain.ExperimentModule;
|
||||||
|
import com.yau.digitalrmb.training.attempt.domain.ExperimentSubject;
|
||||||
|
import com.yau.digitalrmb.training.attempt.interfaces.dto.ExperimentActionView;
|
||||||
|
import com.yau.digitalrmb.training.attempt.interfaces.dto.ExperimentAttemptView;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
class PaymentTrainingActionServiceTest {
|
||||||
|
@Test
|
||||||
|
void acceptsTheFirstCentralSettlementActionAfterCompliance() {
|
||||||
|
ExperimentAttemptService attempts = mock(ExperimentAttemptService.class);
|
||||||
|
PaymentApplicationService payments = mock(PaymentApplicationService.class);
|
||||||
|
PaymentTrainingActionService service = new PaymentTrainingActionService(attempts, payments, new ObjectMapper());
|
||||||
|
UUID attemptId = UUID.randomUUID();
|
||||||
|
ExperimentSubject subject = new ExperimentSubject("user-1", 1L, 2L, "");
|
||||||
|
PaymentActor actor = new PaymentActor("user-1", "tester", 1L, 2L);
|
||||||
|
ExperimentAttemptView attempt = completedThroughCompliance(attemptId);
|
||||||
|
when(attempts.detail(attemptId, subject)).thenReturn(attempt);
|
||||||
|
when(attempts.execute(any(), any(), any(), any(), any(), any(), any(), any(), any()))
|
||||||
|
.thenReturn(action(attemptId, "04", "verify-payer-bank-signature"));
|
||||||
|
|
||||||
|
assertThatCode(() -> service.execute(attemptId, "04", "verify-payer-bank-signature",
|
||||||
|
new PaymentActionRequest(), subject, actor)).doesNotThrowAnyException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ExperimentAttemptView completedThroughCompliance(UUID attemptId) {
|
||||||
|
String[][] keys = {
|
||||||
|
{"01", "refresh-payer"}, {"01", "refresh-payee"},
|
||||||
|
{"02", "generate-timestamp"}, {"02", "concatenate-payment"},
|
||||||
|
{"02", "generate-digest"}, {"02", "wallet-sign"},
|
||||||
|
{"02", "package-payment"}, {"02", "send-payment"},
|
||||||
|
{"03", "verify-payer-signature"}, {"03", "compliance-check"},
|
||||||
|
{"03", "generate-compliance-report"}, {"03", "generate-compliance-digest"},
|
||||||
|
{"03", "bank-sign"}, {"03", "package-bank-request"},
|
||||||
|
{"03", "send-to-central-bank"}
|
||||||
|
};
|
||||||
|
List<ExperimentActionView<?>> actions = new ArrayList<ExperimentActionView<?>>();
|
||||||
|
for (String[] key : keys) actions.add(action(attemptId, key[0], key[1]));
|
||||||
|
return new ExperimentAttemptView(attemptId, ExperimentModule.PAYMENT, 1,
|
||||||
|
AttemptStatus.IN_PROGRESS, "04", "verify-payer-bank-signature", UUID.randomUUID().toString(),
|
||||||
|
Instant.now(), Instant.now(), null, actions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ExperimentActionView<Object> action(UUID attemptId, String step, String action) {
|
||||||
|
return new ExperimentActionView<Object>(attemptId, ExperimentModule.PAYMENT, step, action,
|
||||||
|
ActionStatus.COMPLETED, AttemptStatus.IN_PROGRESS, step, action,
|
||||||
|
Instant.now(), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue