Adding test PaymentUpdateBySdf04Test for clearing-service.

This commit is contained in:
psemenkov 2023-03-16 16:09:42 +03:00
parent d8bed72ea2
commit 729280e629
4 changed files with 93 additions and 6 deletions

View file

@ -86,6 +86,23 @@
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0-M1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0-M1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

View file

@ -49,6 +49,9 @@ public abstract class AbstractClearingTest {
@SpyBean
protected MockProducer<String, Object> mockProducer;
@Autowired
protected PaymentUpdateBySdf04 paymentUpdateBySdf04;
protected void init() {
hazelcastServiceTest.waitAvailable();
TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class);

View file

@ -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<Object> baseRequestResult = (BaseRequest<Object>) 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<Object> baseRequestResult = (BaseRequest<Object>) 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

View file

@ -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<PaymentInstruction> settingResult;
@Autowired
EventsReceiver eventsReceiver;
ImdgHazelcast<PaymentInstruction> paymentImdgsMock;
private Imdg<PaymentInstruction> paymentImdgs;
private Imdg<SDf04> 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());
}
}