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