Skip to content

Commit

Permalink
feat: P4ADEV-2239 add debt position origin input param in api get ins…
Browse files Browse the repository at this point in the history
…tallments by organization id and nav (#78)
  • Loading branch information
serdimic authored Feb 25, 2025
1 parent 3263fef commit a6bb9c8
Show file tree
Hide file tree
Showing 10 changed files with 537 additions and 492 deletions.
943 changes: 477 additions & 466 deletions openapi/generated.openapi.json

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions openapi/p4pa-debt-position.openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,14 @@ paths:
schema:
type: string
description: The nav of the installments
- name: debtPositionOrigin
in: query
required: false
schema:
type: array
items:
$ref: "#/components/schemas/DebtPositionOrigin"
description: An array of debt position origins to filter by; if null, no filter is applied
responses:
"200":
description: Ok
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.gov.pagopa.pu.debtpositions.controller;

import it.gov.pagopa.pu.debtpositions.controller.generated.InstallmentApi;
import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.dto.generated.InstallmentDTO;
import it.gov.pagopa.pu.debtpositions.service.InstallmentService;
import org.springframework.http.ResponseEntity;
Expand All @@ -17,7 +18,7 @@ public InstallmentControllerImpl(InstallmentService installmentService) {
}

@Override
public ResponseEntity<List<InstallmentDTO>> getInstallmentsByOrganizationIdAndNav(Long organizationId, String nav) {
return ResponseEntity.ok(installmentService.getInstallmentsByOrganizationIdAndNav(organizationId, nav));
public ResponseEntity<List<InstallmentDTO>> getInstallmentsByOrganizationIdAndNav(Long organizationId, String nav,List<DebtPositionOrigin> debtPositionOrigin) {
return ResponseEntity.ok(installmentService.getInstallmentsByOrganizationIdAndNav(organizationId, nav, debtPositionOrigin));
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package it.gov.pagopa.pu.debtpositions.repository;

import it.gov.pagopa.pu.debtpositions.dto.Installment;
import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;

import java.util.List;

public interface InstallmentPIIRepository {

Installment save(Installment installment);

List<Installment> getByOrganizationIdAndNav(Long organizationId, String nav);
List<Installment> getByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigin);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import it.gov.pagopa.pu.debtpositions.citizen.service.PersonalDataService;
import it.gov.pagopa.pu.debtpositions.dto.Installment;
import it.gov.pagopa.pu.debtpositions.dto.InstallmentPIIDTO;
import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.mapper.InstallmentPIIMapper;
import it.gov.pagopa.pu.debtpositions.model.InstallmentNoPII;
import org.springframework.stereotype.Service;
Expand All @@ -23,8 +24,8 @@ public InstallmentPIIRepositoryImpl(InstallmentPIIMapper installmentPIIMapper, P
}

@Override
public List<Installment> getByOrganizationIdAndNav(Long organizationId, String nav) {
return installmentNoPIIRepository.getByOrganizationIdAndNav(organizationId, nav, null)
public List<Installment> getByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigin) {
return installmentNoPIIRepository.getByOrganizationIdAndNav(organizationId, nav, debtPositionOrigin)
.stream().map(installmentPIIMapper::map).toList();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package it.gov.pagopa.pu.debtpositions.service;

import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.dto.generated.InstallmentDTO;

import java.util.List;

public interface InstallmentService {
List<InstallmentDTO> getInstallmentsByOrganizationIdAndNav(Long organizationId, String nav);
List<InstallmentDTO> getInstallmentsByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigin);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package it.gov.pagopa.pu.debtpositions.service;

import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.dto.generated.InstallmentDTO;
import it.gov.pagopa.pu.debtpositions.mapper.InstallmentMapper;
import it.gov.pagopa.pu.debtpositions.repository.InstallmentPIIRepository;
Expand All @@ -18,8 +19,8 @@ public InstallmentServiceImpl(InstallmentPIIRepository installmentPIIRepository,
}

@Override
public List<InstallmentDTO> getInstallmentsByOrganizationIdAndNav(Long organizationId, String nav) {
return installmentPIIRepository.getByOrganizationIdAndNav(organizationId, nav).stream()
public List<InstallmentDTO> getInstallmentsByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigin) {
return installmentPIIRepository.getByOrganizationIdAndNav(organizationId, nav, debtPositionOrigin).stream()
.map(installmentMapper::mapToDto)
.toList();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.dto.generated.InstallmentDTO;
import it.gov.pagopa.pu.debtpositions.service.InstallmentService;
import it.gov.pagopa.pu.debtpositions.util.TestUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
Expand Down Expand Up @@ -38,16 +41,21 @@ class InstallmentControllerTest {

private final PodamFactory podamFactory = TestUtils.getPodamFactory();

@Test
void whenGetInstallmentsByOrganizationIdAndNavThenOk() throws Exception {
@ParameterizedTest
@ValueSource(strings = {"ORDINARY", "ORDINARY_SIL"})
@NullSource
void whenGetInstallmentsByOrganizationIdAndNavThenOk(String debtPositionOrigin) throws Exception {
//given
List<InstallmentDTO> installmentDTOList = podamFactory.manufacturePojo(List.class, InstallmentDTO.class);
List<DebtPositionOrigin> originList = debtPositionOrigin==null?null:List.of(DebtPositionOrigin.valueOf(debtPositionOrigin));

Mockito.when(installmentServiceMock.getInstallmentsByOrganizationIdAndNav(1L, "NAV")).thenReturn(installmentDTOList);
Mockito.when(installmentServiceMock.getInstallmentsByOrganizationIdAndNav(1L, "NAV", originList)).thenReturn(installmentDTOList);

MvcResult result = mockMvc.perform(
MockMvcRequestBuilders.get("/installments/{organizationId}/{nav}",1L,"NAV")
.contentType(MediaType.APPLICATION_JSON_VALUE))
var builder = MockMvcRequestBuilders.get("/installments/{organizationId}/{nav}",1L,"NAV")
.contentType(MediaType.APPLICATION_JSON_VALUE);
if(debtPositionOrigin!=null)
builder = builder.queryParam("debtPositionOrigin", originList.stream().map(Enum::name).toArray(String[]::new));
MvcResult result = mockMvc.perform(builder)
.andExpect(status().isOk())
.andReturn();

Expand All @@ -63,6 +71,6 @@ void whenGetInstallmentsByOrganizationIdAndNavThenOk() throws Exception {
Assertions.assertEquals(expectedElem.getUpdateDate().toInstant(), resultElem.getUpdateDate().toInstant());
Assertions.assertIterableEquals(expectedElem.getTransfers(), resultElem.getTransfers());
}
Mockito.verify(installmentServiceMock, Mockito.times(1)).getInstallmentsByOrganizationIdAndNav(1L, "NAV");
Mockito.verify(installmentServiceMock, Mockito.times(1)).getInstallmentsByOrganizationIdAndNav(1L, "NAV", originList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import it.gov.pagopa.pu.debtpositions.dto.Installment;
import it.gov.pagopa.pu.debtpositions.dto.InstallmentPIIDTO;
import it.gov.pagopa.pu.debtpositions.dto.Person;
import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.mapper.InstallmentPIIMapper;
import it.gov.pagopa.pu.debtpositions.model.InstallmentNoPII;
import it.gov.pagopa.pu.debtpositions.util.TestUtils;
Expand All @@ -13,6 +14,9 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.Mockito;
Expand Down Expand Up @@ -200,15 +204,18 @@ void givenAlreadyExistentInstallmentNotFetchedAndNewPIIWhenSaveThenSkipPIISave()

}

@Test
void givenValidOrganizationAndNavWhenGetByOrganizationIdAndNavThenOk() {
@ParameterizedTest
@ValueSource(strings = {"ORDINARY", "ORDINARY_SIL"})
@NullSource
void givenValidOrganizationAndNavWhenGetByOrganizationIdAndNavThenOk(String debtPositionOrigin) {
// Given
List<DebtPositionOrigin> originList = debtPositionOrigin==null?null:List.of(DebtPositionOrigin.valueOf(debtPositionOrigin));
List<InstallmentNoPII> installmentDTOList = podamFactory.manufacturePojo(List.class, InstallmentNoPII.class);
Mockito.when(installmentNoPIIRepository.getByOrganizationIdAndNav(1L, "NAV", null)).thenReturn(installmentDTOList);
Mockito.when(installmentNoPIIRepository.getByOrganizationIdAndNav(1L, "NAV", originList)).thenReturn(installmentDTOList);
installmentDTOList.forEach(installmentNoPII -> Mockito.when(mapperMock.map(installmentNoPII)).thenReturn(Installment.builder().build()));

// When
List<Installment> result = installmentPIIRepository.getByOrganizationIdAndNav(1L, "NAV");
List<Installment> result = installmentPIIRepository.getByOrganizationIdAndNav(1L, "NAV", originList);

// Then
Assertions.assertNotNull(result);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package it.gov.pagopa.pu.debtpositions.service;

import it.gov.pagopa.pu.debtpositions.dto.Installment;
import it.gov.pagopa.pu.debtpositions.dto.generated.DebtPositionOrigin;
import it.gov.pagopa.pu.debtpositions.dto.generated.InstallmentDTO;
import it.gov.pagopa.pu.debtpositions.mapper.InstallmentMapper;
import it.gov.pagopa.pu.debtpositions.repository.InstallmentPIIRepository;
import it.gov.pagopa.pu.debtpositions.util.TestUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
Expand All @@ -30,26 +33,29 @@ class InstallmentServiceImplTest {

private final PodamFactory podamFactory = TestUtils.getPodamFactory();

@Test
void givenValidOrganizationAndNavWhGetInstallmentsByOrganizationIdAndNavThenOk() {
@ParameterizedTest
@ValueSource(strings = {"ORDINARY", "ORDINARY_SIL"})
@NullSource
void givenValidOrganizationAndNavWhGetInstallmentsByOrganizationIdAndNavThenOk(String debtPositionOrigin) {
//given
List<Installment> installmentList = podamFactory.manufacturePojo(List.class, Installment.class);
List<InstallmentDTO> installmentDTOList = new ArrayList<>();
List<DebtPositionOrigin> originList = debtPositionOrigin==null?null:List.of(DebtPositionOrigin.valueOf(debtPositionOrigin));

Mockito.when(installmentPIIRepositoryMock.getByOrganizationIdAndNav(1L, "NAV")).thenReturn(installmentList);
Mockito.when(installmentPIIRepositoryMock.getByOrganizationIdAndNav(1L, "NAV", originList)).thenReturn(installmentList);
installmentList.forEach(installment -> {
InstallmentDTO installmentDTO = podamFactory.manufacturePojo(InstallmentDTO.class);
installmentDTOList.add(installmentDTO);
Mockito.when(installmentMapperMock.mapToDto(installment)).thenReturn(installmentDTO);
});

//when
List<InstallmentDTO> response = installmentService.getInstallmentsByOrganizationIdAndNav(1L, "NAV");
List<InstallmentDTO> response = installmentService.getInstallmentsByOrganizationIdAndNav(1L, "NAV", originList);

//verify
Assertions.assertNotNull(response);
Assertions.assertIterableEquals(installmentDTOList, response);
Mockito.verify(installmentPIIRepositoryMock, Mockito.times(1)).getByOrganizationIdAndNav(1L, "NAV");
Mockito.verify(installmentPIIRepositoryMock, Mockito.times(1)).getByOrganizationIdAndNav(1L, "NAV", originList);
installmentList.forEach(installment -> Mockito.verify(installmentMapperMock, Mockito.times(1)).mapToDto(installment));
}
}

0 comments on commit a6bb9c8

Please sign in to comment.