Skip to content

Commit

Permalink
fix: [EM-384] fix insert payment without tags (#421)
Browse files Browse the repository at this point in the history
  • Loading branch information
and-mora authored Feb 2, 2025
1 parent 338454c commit 044791e
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 5 deletions.
2 changes: 1 addition & 1 deletion backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
}

group = 'it.andmora.expensesmonitor'
version = '0.11.4'
version = '0.13.1'

java {
toolchain {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public interface PaymentDbMapper {
PaymentDbEntity domainToDbEntity(Payment payment);

@Mapping(target = "wallet.id", source = "walletId")
@Mapping(target = "tags", expression = "java(new java.util.ArrayList<>())")
Payment dbEntityToDomain(PaymentDbEntity paymentDbEntity);

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
import it.andmora.expensesmonitor.backend.dao.dbmodel.PaymentTagDbEntity;
import it.andmora.expensesmonitor.backend.domain.model.Tag;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

@Mapper(componentModel = "spring")
public interface PaymentTagDbMapper {

@Mapping(target = "paymentId", ignore = true)
PaymentTagDbEntity domainToDbEntity(Tag tag);

Tag dbEntityToDomain(PaymentTagDbEntity tagDbEntity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public interface PaymentControllerMapper {

@Mapping(target = "wallet.name", source = "wallet")
@Mapping(target = "tags", source = "tags", defaultExpression = "java(new java.util.ArrayList<>())")
Payment dtoToEntity(PaymentDto paymentDto);

@Mapping(target = "wallet", source = "wallet.id")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,34 @@ void givenAPaymentWhenSaveItThenGoesOk() {
verify(paymentTagRepository, times(2)).save(any());
}

@Test
void givenAPaymentWithoutTagsWhenSaveItThenGoesOk() {

var inputPayment = createDefaultPaymentWithoutTags();
var expectedPayment = Payment.builder()
.id(injectedUUID)
.description("shopping")
.merchantName("H&M")
.amountInCents(1000)
.accountingDate(dateInjected)
.wallet(Wallet.builder().id(injectedUUID).build())
.tags(List.of())
.build();
Mockito.when(repository.save(any())).thenReturn(getSavedEntity());
Mockito.when(paymentTagRepository.save(any())).thenReturn(Mono.empty());

var paymentSaved = paymentDao.savePayment(inputPayment);

StepVerifier
.create(paymentSaved)
.expectNext(expectedPayment)
.expectComplete()
.verify();

verify(repository, times(1)).save(any());
verify(paymentTagRepository, times(0)).save(any());
}

@Test
void givenAPaymentWhenDeleteItThenGoesOk() {
Mockito.when(repository.deleteById(any(UUID.class))).thenReturn(Mono.empty());
Expand Down Expand Up @@ -195,4 +223,15 @@ Payment createDefaultPayment() {
Tag.builder().key("chiave").value("valore").build()))
.build();
}

Payment createDefaultPaymentWithoutTags() {
return Payment.builder()
.description("shopping")
.merchantName("H&M")
.amountInCents(1000)
.accountingDate(dateInjected)
.wallet(Wallet.builder().name("wallet").build())
.tags(List.of())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import it.andmora.expensesmonitor.backend.web.dto.PaymentDto;
import it.andmora.expensesmonitor.backend.web.dto.TagDto;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import org.assertj.core.api.InstanceOfAssertFactories;
Expand Down Expand Up @@ -81,6 +80,23 @@ void whenCreatePaymentThenReturnExpectedFields() {
});
}

@Test
void whenCreatePaymentWithoutTagsThenReturnExpectedFields() {
Mockito.when(paymentCreator.createPayment(any()))
.thenReturn(Mono.just(createDefaultPaymentWithoutTags()));
PaymentDto paymentDto = createPaymentDtoWithoutTags();

Mono<PaymentDto> paymentResponse = paymentController.createPayment(paymentDto);

paymentResponse.subscribe(payment -> {
assertThat(payment).extracting(PaymentDto::description).isEqualTo("shopping");
assertThat(payment).extracting(PaymentDto::merchantName).isEqualTo("H&M");
assertThat(payment).extracting(PaymentDto::amountInCents).isEqualTo(1000);
assertThat(payment).extracting(PaymentDto::accountingDate).isEqualTo(dateInjected);
assertThat(payment).extracting(PaymentDto::wallet).isEqualTo("wallet");
});
}

@Test
void whenDeletePaymentThenReturnsOk() {
Mockito.when(paymentDeleter.deletePayment(any())).thenReturn(Mono.empty());
Expand Down Expand Up @@ -195,8 +211,22 @@ PaymentDto createPaymentDto() {
"shopping",
1000,
"H&M",
dateInjected, null, "wallet",
Collections.singletonList(new TagDto(UUID.randomUUID(), "key", "value")));
dateInjected,
null,
"wallet",
List.of(new TagDto(UUID.randomUUID(), "key", "value"),
new TagDto(UUID.randomUUID(), "key", "value")));
}

PaymentDto createPaymentDtoWithoutTags() {
return new PaymentDto(UUID.randomUUID(),
"shopping",
1000,
"H&M",
dateInjected,
null,
"wallet",
null);
}

Payment createDefaultPayment() {
Expand All @@ -211,4 +241,14 @@ Payment createDefaultPayment() {
.build();
}

Payment createDefaultPaymentWithoutTags() {
return Payment.builder()
.description("shopping")
.merchantName("H&M")
.amountInCents(1000)
.accountingDate(dateInjected)
.wallet(Wallet.builder().id(UUID.randomUUID()).name("wallet").build())
.build();
}

}
2 changes: 1 addition & 1 deletion backend_deploy/manifest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ spec:
app: backend
spec:
containers:
- image: 'ghcr.io/and-mora/expenses-monitor:v0.11.4-backend'
- image: 'ghcr.io/and-mora/expenses-monitor:v0.13.1-backend'
name: backend-java
env:
- name: DB_CONNECTION_URI
Expand Down

0 comments on commit 044791e

Please sign in to comment.