Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: [EM-384] fix insert payment without tags #421

Merged
merged 3 commits into from
Feb 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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