From 729280e629b94199588e68dd84d3318c8ba049d9 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Thu, 16 Mar 2023 16:09:42 +0300 Subject: [PATCH] Adding test PaymentUpdateBySdf04Test for clearing-service. --- clearing-parent/clearing-service/pom.xml | 17 +++++ .../service/AbstractClearingTest.java | 3 + .../clearing/service/ClearingServiceTest.java | 10 +-- .../service/PaymentUpdateBySdf04Test.java | 69 ++++++++++++++++++- 4 files changed, 93 insertions(+), 6 deletions(-) diff --git a/clearing-parent/clearing-service/pom.xml b/clearing-parent/clearing-service/pom.xml index c212e0834..5728c07ef 100644 --- a/clearing-parent/clearing-service/pom.xml +++ b/clearing-parent/clearing-service/pom.xml @@ -86,6 +86,23 @@ ${project.artifactId} + + org.apache.maven.plugins + maven-surefire-plugin + 2.21.0 + + + org.junit.platform + junit-platform-surefire-provider + 1.2.0-M1 + + + org.junit.jupiter + junit-jupiter-engine + 5.2.0-M1 + + + \ No newline at end of file diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/AbstractClearingTest.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/AbstractClearingTest.java index 75e7a70ba..a0807ff77 100644 --- a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/AbstractClearingTest.java +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/AbstractClearingTest.java @@ -49,6 +49,9 @@ public abstract class AbstractClearingTest { @SpyBean protected MockProducer mockProducer; + @Autowired + protected PaymentUpdateBySdf04 paymentUpdateBySdf04; + protected void init() { hazelcastServiceTest.waitAvailable(); TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ClearingServiceTest.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ClearingServiceTest.java index bb4d8cd29..e2964030e 100644 --- a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ClearingServiceTest.java +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/ClearingServiceTest.java @@ -124,7 +124,7 @@ class ClearingServiceTest extends AbstractClearingTest { addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC_START_CLEARING, PARTITION, times, getJsonStringForNew(new DealRegisterNewRequest(), FIRST_ID)); //waiting for kafka producer send message - verify(mockProducer, timeout(230_000L).times(1)) + verify(mockProducer, timeout(30_000L).times(1)) .send(producerRecord.capture()); assertEquals(Consts.BALANCE_ACCOUNT_UPDATE, producerRecord.getValue().topic()); BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); @@ -135,7 +135,7 @@ class ClearingServiceTest extends AbstractClearingTest { addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC_CONTINUE_CLEARING, PARTITION, times, getJsonStringForNew(requestPayload, FIRST_ID)); //waiting for kafka producer send message (finale event) - verify(mockProducer, timeout(230_000L).times(2)) + verify(mockProducer, timeout(30_000L).times(2)) .send(producerRecord.capture()); //ASSERT @@ -219,7 +219,7 @@ class ClearingServiceTest extends AbstractClearingTest { addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC_START_CLEARING, PARTITION, times, getJsonStringForNew(new DealRegisterNewRequest(), FIRST_ID)); //waiting for kafka producer send message - verify(mockProducer, timeout(230_000L).times(1)) + verify(mockProducer, timeout(30_000L).times(1)) .send(producerRecord.capture()); assertEquals(Consts.BALANCE_ACCOUNT_UPDATE, producerRecord.getValue().topic()); BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); @@ -230,7 +230,7 @@ class ClearingServiceTest extends AbstractClearingTest { addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC_CONTINUE_CLEARING, PARTITION, times, getJsonStringForNew(requestPayload, FIRST_ID)); //waiting for kafka producer send message (finale event) - verify(mockProducer, timeout(230_000L).times(2)) + verify(mockProducer, timeout(30_000L).times(2)) .send(producerRecord.capture()); //ASSERT @@ -411,7 +411,7 @@ class ClearingServiceTest extends AbstractClearingTest { addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC_START_CLEARING, PARTITION, times, getJsonStringForNew(new DealRegisterNewRequest(), FIRST_ID)); //waiting for kafka producer send message - verify(mockProducer, timeout(230_000L).times((int) times)) + verify(mockProducer, timeout(30_000L).times((int) times)) .send(producerRecord.capture()); //ASSERT diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java index 25f562491..1ec9a6268 100644 --- a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/PaymentUpdateBySdf04Test.java @@ -1,14 +1,36 @@ package ru.spcex.clearing.service; +import org.apache.kafka.clients.consumer.MockConsumer; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.sdf.SDf04; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.clearing.Sdf04Request; +import ru.spcex.platform.enumeration.TransactionStatus; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; import javax.annotation.PostConstruct; +import java.lang.reflect.Field; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; +import static ru.spcex.clearing.utils.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.utils.TestUtils.getJsonStringForUPDATE; class PaymentUpdateBySdf04Test extends AbstractClearingTest { + private static final int PARTITION = 0; + private static final AtomicInteger currentInteger = new AtomicInteger(1); + private static final String TOPIC_SDF04_PROCESS = Consts.SDF04_PROCESS; + ArgumentCaptor settingResult; + @Autowired + EventsReceiver eventsReceiver; + ImdgHazelcast paymentImdgsMock; private Imdg paymentImdgs; private Imdg sdf04Imdg; @@ -17,11 +39,56 @@ class PaymentUpdateBySdf04Test extends AbstractClearingTest { super.init(); this.paymentImdgs = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); this.sdf04Imdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_SDf04, SDf04.class); + this.paymentImdgsMock = Mockito.mock(ImdgHazelcast.class, withSettings() + .serializable() + .spiedInstance(paymentImdgs) + .defaultAnswer(CALLS_REAL_METHODS)); + this.settingResult = ArgumentCaptor.forClass(PaymentInstruction.class); } @Test - void updatePayments() { + void updatePayments() throws NoSuchFieldException, IllegalAccessException { + //ARRANGE + Long sdf04GroupId = 12L; + Long paymentId = 10L; + String docnm_ref = paymentId.toString(); SDf04 sDf04s = new SDf04(); + sDf04s.setGenerationId(sdf04GroupId); + sDf04s.setDocnm_ref(docnm_ref); + sDf04s.setImp_result("OK!"); + sdf04Imdg.insert(sDf04s); + PaymentInstruction payment = new PaymentInstruction(); + payment.setId(paymentId); + paymentImdgs.insert(payment); + + //setting imdg for been PaymentUpdateBySdf04 + Field dbServiceField = PaymentUpdateBySdf04.class.getDeclaredField("paymentImdgs"); + dbServiceField.setAccessible(true); + dbServiceField.set(paymentUpdateBySdf04, paymentImdgsMock); + + //ACT & ASSERT + checkTransactionStatus(sdf04GroupId, currentInteger.getAndIncrement(), TransactionStatus.ok.getKey()); + + sDf04s.setImp_result("imp_result"); + sdf04Imdg.insert(sDf04s); + //ACT & ASSERT + checkTransactionStatus(sdf04GroupId, currentInteger.getAndIncrement(), TransactionStatus.fail.getKey()); + } + + private void checkTransactionStatus(Long sdf04GroupId, int times, String key) { + Sdf04Request requestPayload = new Sdf04Request(); + requestPayload.setGroupId(sdf04GroupId); + + //ACT + addRecordToKafka((MockConsumer) eventsReceiver.getConsumer(), TOPIC_SDF04_PROCESS, + PARTITION, times, getJsonStringForUPDATE(requestPayload, sdf04GroupId)); + + //waiting for paymentImdgs update + verify(paymentImdgsMock, timeout(30_000L).times(times)) + .update(settingResult.capture()); + + //ASSERT + assertEquals(key, settingResult.getValue().getTransactionStatus()); } } \ No newline at end of file