Skip to content

Commit

Permalink
feat: user notification for carts (#262)
Browse files Browse the repository at this point in the history
* chore: update commons version

* feat: use companyName and description from transaction activation response

* fix: update commons version

* fix: update commons version
  • Loading branch information
pietro-tota authored May 8, 2024
1 parent ed8bb0e commit c6bb363
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 21 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<kotlinx-coroutines.version>1.6.2</kotlinx-coroutines.version>
<spring-cloud-azure.version>4.0.0</spring-cloud-azure.version>
<jacoco.version>0.8.8</jacoco.version>
<pagopa-ecommerce-commons.version>1.15.0</pagopa-ecommerce-commons.version>
<pagopa-ecommerce-commons.version>1.16.0</pagopa-ecommerce-commons.version>
<sonar.coverage.exclusions> <!-- the members of the following list should be in the same line -->
**/it/pagopa/transactions/**,
**/it/pagopa/ecommerce/eventdispatcher/validation/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,8 @@ class UserReceiptMailBuilder(@Autowired private val confidentialDataUtils: Confi
RefNumberTemplate(Type.CODICE_AVVISO, paymentNotice.rptId().noticeId),
null,
PayeeTemplate(
transactionUserReceiptData.receivingOfficeName ?: "",
paymentNotice.rptId().fiscalCode),
transactionUserReceiptData.paymentDescription,
paymentNotice.companyName.value ?: "", paymentNotice.rptId().fiscalCode),
paymentNotice.transactionDescription.value,
amountToHumanReadableString(paymentNotice.transactionAmount().value()))
}
.toList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -796,16 +796,14 @@ class TransactionNotificationsQueueConsumerTest {
given(confidentialDataUtils.toEmail(any())).willReturn(Email("[email protected]"))
val userReceiptBuilder = UserReceiptMailBuilder(confidentialDataUtils)
val transactionUserReceiptData =
TransactionUserReceiptData(
TransactionUserReceiptData.Outcome.OK,
"it-IT",
PAYMENT_DATE,
"testValue",
"paymentDescription")
TransactionUserReceiptData(TransactionUserReceiptData.Outcome.OK, "it-IT", PAYMENT_DATE)
val companyName = "testCompanyName"
val transactionActivatedEvent = transactionActivateEvent()
transactionActivatedEvent.data.paymentNotices.forEach { it.companyName = companyName }
val notificationRequested = transactionUserReceiptRequestedEvent(transactionUserReceiptData)
val events =
listOf(
transactionActivateEvent(),
transactionActivatedEvent,
transactionAuthorizationRequestedEvent(),
transactionAuthorizationCompletedEvent(
PgsTransactionGatewayAuthorizationData(null, AuthorizationResultDto.OK)),
Expand All @@ -825,7 +823,7 @@ class TransactionNotificationsQueueConsumerTest {
val notificationEmailRequestDto =
userReceiptBuilder.buildNotificationEmailRequestDto(baseTransaction)
assertEquals(
"testValue",
companyName,
(notificationEmailRequestDto.parameters as SuccessTemplate)
.cart
.items
Expand All @@ -841,12 +839,13 @@ class TransactionNotificationsQueueConsumerTest {
given(confidentialDataUtils.toEmail(any())).willReturn(Email("[email protected]"))
val userReceiptBuilder = UserReceiptMailBuilder(confidentialDataUtils)
val transactionUserReceiptData =
TransactionUserReceiptData(
TransactionUserReceiptData.Outcome.OK, "it-IT", PAYMENT_DATE, null, "paymentDescription")
TransactionUserReceiptData(TransactionUserReceiptData.Outcome.OK, "it-IT", PAYMENT_DATE)
val notificationRequested = transactionUserReceiptRequestedEvent(transactionUserReceiptData)
val transactionActivatedEvent = transactionActivateEvent()
transactionActivatedEvent.data.paymentNotices.forEach { it.companyName = null }
val events =
listOf(
transactionActivateEvent(),
transactionActivatedEvent,
transactionAuthorizationRequestedEvent(),
transactionAuthorizationCompletedEvent(
PgsTransactionGatewayAuthorizationData(null, AuthorizationResultDto.OK)),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.pagopa.ecommerce.eventdispatcher.utils.v2

import com.fasterxml.jackson.databind.ObjectMapper
import it.pagopa.ecommerce.commons.documents.PaymentNotice
import it.pagopa.ecommerce.commons.documents.v2.TransactionAuthorizationRequestData
import it.pagopa.ecommerce.commons.documents.v2.TransactionClosureData
import it.pagopa.ecommerce.commons.documents.v2.TransactionEvent
Expand Down Expand Up @@ -109,8 +110,8 @@ class UserReceiptMailBuilderTest {
ItemTemplate(
RefNumberTemplate(RefNumberTemplate.Type.CODICE_AVVISO, it.rptId.noticeId),
null,
PayeeTemplate(TransactionTestUtils.RECEIVING_OFFICE_NAME, it.rptId.fiscalCode),
TransactionTestUtils.PAYMENT_DESCRIPTION,
PayeeTemplate(it.companyName.value, it.rptId.fiscalCode),
it.transactionDescription.value,
userReceiptMailBuilder.amountToHumanReadableString(it.transactionAmount.value))
},
totalAmount),
Expand Down Expand Up @@ -204,8 +205,8 @@ class UserReceiptMailBuilderTest {
ItemTemplate(
RefNumberTemplate(RefNumberTemplate.Type.CODICE_AVVISO, it.rptId.noticeId),
null,
PayeeTemplate(TransactionTestUtils.RECEIVING_OFFICE_NAME, it.rptId.fiscalCode),
TransactionTestUtils.PAYMENT_DESCRIPTION,
PayeeTemplate(it.companyName.value, it.rptId.fiscalCode),
it.transactionDescription.value,
userReceiptMailBuilder.amountToHumanReadableString(it.transactionAmount.value))
},
totalAmount),
Expand Down Expand Up @@ -299,8 +300,8 @@ class UserReceiptMailBuilderTest {
ItemTemplate(
RefNumberTemplate(RefNumberTemplate.Type.CODICE_AVVISO, it.rptId.noticeId),
null,
PayeeTemplate(TransactionTestUtils.RECEIVING_OFFICE_NAME, it.rptId.fiscalCode),
TransactionTestUtils.PAYMENT_DESCRIPTION,
PayeeTemplate(it.companyName.value, it.rptId.fiscalCode),
it.transactionDescription.value,
userReceiptMailBuilder.amountToHumanReadableString(it.transactionAmount.value))
},
totalAmount),
Expand Down Expand Up @@ -437,4 +438,116 @@ class UserReceiptMailBuilderTest {
userReceiptMailBuilder.dateTimeToHumanReadableString(offsetDateTime, locale)
assertEquals("01 gennaio 2023, 01:00:00", humanReadableDate)
}

@Test
fun `Should build success email for transaction with a cart`() = runTest {
/*
* Prerequisites
*/
given(confidentialDataUtils.toEmail(any())).willReturn(Email(TransactionTestUtils.EMAIL_STRING))
val transactionActivatedEvent = TransactionTestUtils.transactionActivateEvent()
val paymentNotices = mutableListOf<PaymentNotice>()
repeat(5) {
paymentNotices.add(
PaymentNotice().apply {
paymentToken = UUID.randomUUID().toString().replace("-", "")
rptId = TransactionTestUtils.RPT_ID
description = "description_$it"
amount = it * 100
paymentContextCode = null
transferList = listOf()
isAllCCP = false
companyName = "companyName_$it"
})
}
transactionActivatedEvent.data.paymentNotices = paymentNotices
val events =
listOf<TransactionEvent<*>>(
transactionActivatedEvent as TransactionEvent<*>,
TransactionTestUtils.transactionAuthorizationRequestedEvent() as TransactionEvent<*>,
TransactionTestUtils.transactionAuthorizationCompletedEvent(
PgsTransactionGatewayAuthorizationData(null, AuthorizationResultDto.OK))
as TransactionEvent<*>,
TransactionTestUtils.transactionClosureRequestedEvent() as TransactionEvent<*>,
TransactionTestUtils.transactionClosedEvent(TransactionClosureData.Outcome.OK)
as TransactionEvent<*>,
TransactionTestUtils.transactionUserReceiptRequestedEvent(
TransactionTestUtils.transactionUserReceiptData(TransactionUserReceiptData.Outcome.OK)),
)
val baseTransaction =
TransactionTestUtils.reduceEvents(*events.toTypedArray())
as BaseTransactionWithRequestedUserReceipt
val totalAmountWithFeeString =
userReceiptMailBuilder.amountToHumanReadableString(
baseTransaction.paymentNotices.map { it.transactionAmount.value }.reduce { a, b -> a + b } +
baseTransaction.transactionAuthorizationRequestData.fee)

val totalAmount =
userReceiptMailBuilder.amountToHumanReadableString(
baseTransaction.paymentNotices.map { it.transactionAmount.value }.reduce { a, b -> a + b })
val feeString =
userReceiptMailBuilder.amountToHumanReadableString(
baseTransaction.transactionAuthorizationRequestData.fee)
val dateString =
userReceiptMailBuilder.dateTimeToHumanReadableString(
ZonedDateTime.parse(baseTransaction.transactionUserReceiptData.paymentDate),
Locale.forLanguageTag(TransactionTestUtils.LANGUAGE))
val successTemplateRequest =
NotificationsServiceClient.SuccessTemplateRequest(
TransactionTestUtils.EMAIL_STRING,
"Il riepilogo del tuo pagamento",
TransactionTestUtils.LANGUAGE,
SuccessTemplate(
TransactionTemplate(
baseTransaction.transactionId.value(),
dateString,
totalAmountWithFeeString,
PspTemplate(TransactionTestUtils.PSP_BUSINESS_NAME, FeeTemplate(feeString)),
baseTransaction.transactionAuthorizationCompletedData.rrn,
baseTransaction.transactionAuthorizationCompletedData.authorizationCode,
PaymentMethodTemplate(
TransactionTestUtils.PAYMENT_METHOD_DESCRIPTION,
TransactionTestUtils.LOGO_URI.toString(),
null,
false)),
UserTemplate(null, TransactionTestUtils.EMAIL_STRING),
CartTemplate(
baseTransaction.paymentNotices.map {
ItemTemplate(
RefNumberTemplate(RefNumberTemplate.Type.CODICE_AVVISO, it.rptId.noticeId),
null,
PayeeTemplate(it.companyName.value, it.rptId.fiscalCode),
it.transactionDescription.value,
userReceiptMailBuilder.amountToHumanReadableString(it.transactionAmount.value))
},
totalAmount),
))
val expected =
NotificationEmailRequestDto()
.language(successTemplateRequest.language)
.subject(successTemplateRequest.subject)
.to(successTemplateRequest.to)
.templateId(NotificationsServiceClient.SuccessTemplateRequest.TEMPLATE_ID)
.parameters(successTemplateRequest.templateParameters)
/*
* Test
*/
val notificationEmailRequest =
userReceiptMailBuilder.buildNotificationEmailRequestDto(baseTransaction)
/*
* Assertions
*/
val objectMapper = ObjectMapper()
assertEquals(
objectMapper.writeValueAsString(expected),
objectMapper.writeValueAsString(notificationEmailRequest))
repeat(5) {
assertEquals(
"companyName_$it",
(notificationEmailRequest.parameters as SuccessTemplate).cart.items[it].payee.name)
assertEquals(
"description_$it",
(notificationEmailRequest.parameters as SuccessTemplate).cart.items[it].subject)
}
}
}

0 comments on commit c6bb363

Please sign in to comment.