diff --git a/pom.xml b/pom.xml index 250b0a8..3f06c47 100644 --- a/pom.xml +++ b/pom.xml @@ -127,7 +127,7 @@ dev.vality swag-webhook-events - 1.122-9daaca8-client + 1.126-46e732a-client dev.vality diff --git a/src/main/java/dev/vality/hooker/service/InvoicingEventService.java b/src/main/java/dev/vality/hooker/service/InvoicingEventService.java index dcc8788..26045db 100644 --- a/src/main/java/dev/vality/hooker/service/InvoicingEventService.java +++ b/src/main/java/dev/vality/hooker/service/InvoicingEventService.java @@ -75,9 +75,9 @@ public class InvoicingEventService .eventType(Event.EventTypeEnum.REFUNDCREATED); case INVOICE_PAYMENT_REFUND_STATUS_CHANGED -> resolveRefundStatusChanged(m, invoiceInfo); case INVOICE_PAYMENT_CASH_CHANGED -> resolvePaymentCashChange(m, invoiceInfo); - case INVOICE_PAYMENT_USER_INTERACTION_CHANGE_REQUESTED -> resolvePaymentUserInteraction(m) + case INVOICE_PAYMENT_USER_INTERACTION_CHANGE_REQUESTED -> resolvePaymentInteractionRequested(m, invoiceInfo) .eventType(Event.EventTypeEnum.PAYMENTINTERACTIONREQUESTED); - case INVOICE_PAYMENT_USER_INTERACTION_CHANGE_COMPLETED -> resolvePaymentUserInteraction(m) + case INVOICE_PAYMENT_USER_INTERACTION_CHANGE_COMPLETED -> resolvePaymentInteractionCompleted(m, invoiceInfo) .eventType(Event.EventTypeEnum.PAYMENTINTERACTIONCOMPLETED); default -> throw new UnsupportedOperationException("Unknown event type " + m.getEventType()); }; @@ -222,8 +222,19 @@ public class InvoicingEventService .eventType(Event.EventTypeEnum.PAYMENTCASHCHANGED); } - private Event resolvePaymentUserInteraction(InvoicingMessage message) { + private Event resolvePaymentInteractionRequested(InvoicingMessage message, + dev.vality.damsel.payment_processing.Invoice invoiceInfo) { return new PaymentInteractionRequested() - .userInteractionDetails(userInteractionConverter.convert(message)); + .userInteractionDetails(userInteractionConverter.convert(message)) + .invoiceId(invoiceInfo.getInvoice().getId()) + .paymentId(message.getPaymentId()); + } + + private Event resolvePaymentInteractionCompleted(InvoicingMessage message, + dev.vality.damsel.payment_processing.Invoice invoiceInfo) { + return new PaymentInteractionCompleted() + .userInteractionDetails(userInteractionConverter.convert(message)) + .invoiceId(invoiceInfo.getInvoice().getId()) + .paymentId(message.getPaymentId()); } } diff --git a/src/test/java/dev/vality/hooker/service/InvoicingEventServiceTest.java b/src/test/java/dev/vality/hooker/service/InvoicingEventServiceTest.java index 2a123c5..c25b683 100644 --- a/src/test/java/dev/vality/hooker/service/InvoicingEventServiceTest.java +++ b/src/test/java/dev/vality/hooker/service/InvoicingEventServiceTest.java @@ -13,6 +13,8 @@ import dev.vality.hooker.model.*; import dev.vality.hooker.model.interaction.*; import dev.vality.hooker.utils.BuildUtils; import dev.vality.swag_webhook_events.model.Event; +import dev.vality.swag_webhook_events.model.PaymentInteractionCompleted; +import dev.vality.swag_webhook_events.model.PaymentInteractionRequested; import dev.vality.swag_webhook_events.model.RefundSucceeded; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; @@ -28,7 +30,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; @PostgresqlSpringBootITest -public class InvoicingEventServiceTest { +class InvoicingEventServiceTest { @MockBean private InvoicingSrv.Iface invoicingClient; @@ -48,7 +50,7 @@ public class InvoicingEventServiceTest { } @RepeatedTest(7) - public void testRefundSucceeded() { + void testRefundSucceeded() { InvoicingMessage message = random(InvoicingMessage.class, "userInteraction"); message.setPaymentId("1"); message.setRefundId("1"); @@ -67,7 +69,7 @@ public class InvoicingEventServiceTest { } @RepeatedTest(7) - public void testJson() throws JsonProcessingException { + void testJson() throws JsonProcessingException { InvoicingMessage message = random(InvoicingMessage.class, "userInteraction"); message.setPaymentId("1"); message.setType(InvoicingMessageEnum.PAYMENT); @@ -83,7 +85,7 @@ public class InvoicingEventServiceTest { } @Test - public void testUserInteractions() throws JsonProcessingException { + void testUserInteractionRequested() throws JsonProcessingException { InvoicingMessage message = createDefaultInvoicingMessage(); message.setEventType(EventType.INVOICE_PAYMENT_USER_INTERACTION_CHANGE_REQUESTED); message.setUserInteraction(new BrowserHttpInteraction("get", "http://test", null)); @@ -92,10 +94,13 @@ public class InvoicingEventServiceTest { assertTrue(json.contains("\"eventType\":\"PaymentInteractionRequested\"")); assertTrue(json.contains("\"requestType\":\"get\"")); assertTrue(json.contains("\"userInteractionType\":\"BrowserHTTPRequest\"")); + assertTrue(json.contains("\"invoiceId\":\"invoiceId\"")); + assertTrue(json.contains("\"paymentId\":\"%s\"".formatted(message.getPaymentId()))); + assertTrue(event instanceof PaymentInteractionRequested); } @Test - public void testUserInteractionsCompleted() throws JsonProcessingException { + void testUserInteractionsCompleted() throws JsonProcessingException { InvoicingMessage message = createDefaultInvoicingMessage(); message.setEventType(EventType.INVOICE_PAYMENT_USER_INTERACTION_CHANGE_COMPLETED); message.setUserInteraction(new QrCodeDisplay("wefvqewvrq32fveqrw".getBytes())); @@ -103,10 +108,13 @@ public class InvoicingEventServiceTest { String json = objectMapper.writeValueAsString(event); assertTrue(json.contains("\"eventType\":\"PaymentInteractionCompleted\"")); assertTrue(json.contains("\"userInteractionType\":\"QrCodeDisplayRequest\"")); + assertTrue(json.contains("\"invoiceId\":\"invoiceId\"")); + assertTrue(json.contains("\"paymentId\":\"%s\"".formatted(message.getPaymentId()))); + assertTrue(event instanceof PaymentInteractionCompleted); } @Test - public void testUserInteractionsCompletedApiExtension() throws JsonProcessingException { + void testUserInteractionsCompletedApiExtension() throws JsonProcessingException { InvoicingMessage message = createDefaultInvoicingMessage(); message.setEventType(EventType.INVOICE_PAYMENT_USER_INTERACTION_CHANGE_COMPLETED); message.setUserInteraction(new ApiExtension("p2p")); @@ -114,10 +122,13 @@ public class InvoicingEventServiceTest { String json = objectMapper.writeValueAsString(event); assertTrue(json.contains("\"eventType\":\"PaymentInteractionCompleted\"")); assertTrue(json.contains("\"userInteractionType\":\"ApiExtensionRequest\"")); + assertTrue(json.contains("\"invoiceId\":\"invoiceId\"")); + assertTrue(json.contains("\"paymentId\":\"%s\"".formatted(message.getPaymentId()))); + assertTrue(event instanceof PaymentInteractionCompleted); } @Test - public void testUserInteractionsCompletedPaymentTerminal() throws JsonProcessingException { + void testUserInteractionsCompletedPaymentTerminal() throws JsonProcessingException { InvoicingMessage message = createDefaultInvoicingMessage(); message.setEventType(EventType.INVOICE_PAYMENT_USER_INTERACTION_CHANGE_COMPLETED); message.setUserInteraction(new PaymentTerminalReceipt("p2p", "2016-03-22T06:12:27Z")); @@ -125,10 +136,13 @@ public class InvoicingEventServiceTest { String json = objectMapper.writeValueAsString(event); assertTrue(json.contains("\"eventType\":\"PaymentInteractionCompleted\"")); assertTrue(json.contains("\"userInteractionType\":\"PaymentTerminalReceipt\"")); + assertTrue(json.contains("\"invoiceId\":\"invoiceId\"")); + assertTrue(json.contains("\"paymentId\":\"%s\"".formatted(message.getPaymentId()))); + assertTrue(event instanceof PaymentInteractionCompleted); } @Test - public void testUserInteractionsCompletedCrypto() throws JsonProcessingException { + void testUserInteractionsCompletedCrypto() throws JsonProcessingException { InvoicingMessage message = createDefaultInvoicingMessage(); message.setEventType(EventType.INVOICE_PAYMENT_USER_INTERACTION_CHANGE_COMPLETED); message.setUserInteraction(new CryptoCurrencyTransfer("address", new Rational(1L, 10L), "bitcoin")); @@ -139,6 +153,9 @@ public class InvoicingEventServiceTest { assertTrue(json.contains("\"cryptoAddress\":\"address\"")); assertTrue(json.contains("\"cryptoCurrency\":\"bitcoin\"")); assertTrue(json.contains("\"denominator\":1")); + assertTrue(json.contains("\"invoiceId\":\"invoiceId\"")); + assertTrue(json.contains("\"paymentId\":\"%s\"".formatted(message.getPaymentId()))); + assertTrue(event instanceof PaymentInteractionCompleted); } @NotNull