Skip to content
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ An API specification for accessing statistical metadata

If you contribute to Magma-API, you may fall in troubles with IntelliJ because the modules [`magma-[diffusion|gestion|commons]-interface`](./interface)
contains generated source code which can be ignored by IntelliJ and cause failures in `magma-[diffusion|gestion|commons]-impl` builds. To prevent this,
the directory `magma-[diffusion|gestion|commons]/target/generated-sources/openapi/src/main/java` must be marked as a _Generated Sources Root_. This can be done in two steps :
the directory `magma-[diffusion|gestion|commons]-interface/target/generated-sources/openapi/src/main/java` must be marked as a _Generated Sources Root_. This can be done in two steps :
1. Run maven clean then maven install for the whole project (all modules)
2. Two possibilities. Either :
- by executing the action "Reload All Maven Projects" : the directory is marked automatically
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package fr.insee.rmes.magma.diffusion.api;

import fr.insee.rmes.magma.diffusion.api.requestprocessor.RequestProcessor;
import fr.insee.rmes.magma.diffusion.model.QuartierPrioritaireDeLaPolitiqueDeLaVille2024;
import fr.insee.rmes.magma.diffusion.queries.parameters.TerritoireRequestParametizer;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.List;

@RestController
public class GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints implements GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleApi {

private final RequestProcessor requestProcessor;

public GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints(RequestProcessor requestProcessor) {
this.requestProcessor = requestProcessor;
}

@Override
public ResponseEntity<QuartierPrioritaireDeLaPolitiqueDeLaVille2024> getcogqpv (String code, LocalDate date) {
return requestProcessor.queryforFindTerritoire()
.with(new TerritoireRequestParametizer(code, date, QuartierPrioritaireDeLaPolitiqueDeLaVille2024.class, "none"))
.executeQuery()
.singleResult(QuartierPrioritaireDeLaPolitiqueDeLaVille2024.class).toResponseEntity();
}

@Override
public ResponseEntity<List<QuartierPrioritaireDeLaPolitiqueDeLaVille2024>> getcogqpvliste (LocalDate date) {
return requestProcessor.queryforFindTerritoire()
.with(new TerritoireRequestParametizer(date, QuartierPrioritaireDeLaPolitiqueDeLaVille2024.class, "none"))
.executeQuery()
.listResult(QuartierPrioritaireDeLaPolitiqueDeLaVille2024.class)
.toResponseEntity();
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package fr.insee.rmes.magma.diffusion.utils;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import jakarta.validation.ConstraintViolationException;
import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(ConstraintViolationException.class)
public ResponseEntity<Map<String, String>> handleConstraintViolationException(ConstraintViolationException ex) {
Map<String, String> errorResponse = new HashMap<>();
errorResponse.put("message", "Donnée invalide : " + ex.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ void should_return_397_terrioires_when_DepartementCodeDescendants_code002_date20

// geo/aireDAttractionDesVilles2020/062/descendants?date=2025-09-04
@Test
void should_return_92_territoires_when_aireDAttractionDesVilles2020CodeDescendants_code002_date20250904_typeNull(){
void should_return_1064_territoires_when_aireDAttractionDesVilles2020CodeDescendants_code002_date20250904_typeNull(){
var response = endpoints.getcogaavdesc("002", LocalDate.of(2025, 9, 4), null);
var result = response.getBody();
assertNotNull(result);
var resultItem1= result.getFirst();
assertEquals(1010, result.size());
assertEquals(1064, result.size());
assertEquals("69381", resultItem1.getCode());
assertEquals("http://id.insee.fr/geo/arrondissementMunicipal/36940e94-b61c-4565-9ea1-ecbcd812bd7e", resultItem1.getUri());
assertEquals(TerritoireTousAttributs.TypeEnum.ARRONDISSEMENT_MUNICIPAL, resultItem1.getType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,11 @@ void should_return_14_CommuneDeleguee_when_ArrondissementCodeDescendants_code674

// geo/arrondissement/674/descendants?date=2025-09-04
@Test
void should_return_195_territoires_when_ArrondissementCodeDescendants_code674_date20250904_typeNull() {
void should_return_196_territoires_when_ArrondissementCodeDescendants_code674_date20250904_typeNull() {
var response = endpoints.getcogarrdes("674", LocalDate.of(2025, 9, 4), null);
var result = response.getBody();
var resultItem1 = result.getFirst();
assertEquals(195, result.size());
assertEquals(196, result.size());
assertEquals("67002", resultItem1.getCode());
assertEquals("http://id.insee.fr/geo/commune/83e823b1-a485-4441-b003-5ad23e47de5f", resultItem1.getUri());
assertEquals(TerritoireTousAttributs.TypeEnum.COMMUNE, resultItem1.getType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,12 +118,12 @@ void should_return_1_iris_when_CantonOuVilleCodeDescendants_code0101_date2025090
}

@Test
void should_return_22_territoires_when_CantonOuVilleCodeDescendants_code0101_date20250904_typeNull_filtreNomNull(){
void should_return_23_territoires_when_CantonOuVilleCodeDescendants_code0101_date20250904_typeNull_filtreNomNull(){
var response = endpoints.getcogcanvildes("0101", LocalDate.of(2025, 9, 4), null,null);
var result = response.getBody();
Assertions.assertNotNull(result);
var resultItem1= result.getFirst();
assertEquals(22, result.size());
assertEquals(23, result.size());
assertEquals("01002", resultItem1.getCode());
assertEquals("http://id.insee.fr/geo/commune/43018c68-c278-433a-b285-3531e8d5347e", resultItem1.getUri());
assertEquals(TerritoireTousAttributs.TypeEnum.COMMUNE, resultItem1.getType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class GeoCommuneAssocieeQueriesTest extends TestcontainerTest {
private MockMvc mockMvc;

/////////////////////////////////////////////////////////////////////
/// geo/communeAssociee/{code}/ascendants ///
/// geo/communeAssociee/{code}/ascendants ///
/////////////////////////////////////////////////////////////////////

// geo/communeAssociee/59355/ascendants?date=2025-09-04 : renvoie 10 territoires
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ void should_return_1_region_when_DepartementCodeAscendants_code22_date20250904_t
/// geo/departement/{code} ///
/////////////////////////////////////////////////////////

// geo/departement/22?date=2025-09-04
// geo/departement/22?date=2025-09-04
@Test
void should_return_DepartementCode_22_when_code22_date20250904() {
var response = endpoints.getcogdep("22", LocalDate.of(2025, 9, 4));
Expand All @@ -88,6 +88,14 @@ void should_return_DepartementCode_22_when_code22_date20250904() {

}

// geo/departement/99?date=2025-09-04 should return 400
@Test
void should_return_404_when_departement_Code99_date20250904() throws Exception{
mockMvc.perform(get("/geo/departement/99")
.param("date", "2025-09-04"))
.andExpect(status().isBadRequest());
}


/////////////////////////////////////////////////////////
/// geo/departement/{code}/descendants ///
Expand All @@ -112,11 +120,11 @@ void should_return_1_commune_when_DepartementCodeDescendants_code45_date20250904

// geo/departement/22/descendants?date=2025-09-04
@Test
void should_return_523_territoires_when_DepartementCodeDescendants_code45_date20250904_typeNull_filtreNomNull(){
void should_return_540_territoires_when_DepartementCodeDescendants_code45_date20250904_typeNull_filtreNomNull(){
var response = endpoints.getcogdepdesc("45", LocalDate.of(2025, 9, 4), null,null);
var result = response.getBody();
var resultItem1= result.getFirst();
assertEquals(523, result.size());
assertEquals(540, result.size());
assertEquals("451", resultItem1.getCode());
assertEquals("http://id.insee.fr/geo/arrondissement/a9f9ff71-7658-4ef0-98b0-f048c8831be1", resultItem1.getUri());
assertEquals(TerritoireTousAttributs.TypeEnum.ARRONDISSEMENT, resultItem1.getType());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package fr.insee.rmes.magma.diffusion.api.testcontainers.queries;

import fr.insee.rmes.magma.diffusion.api.GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints;
import fr.insee.rmes.magma.diffusion.model.QuartierPrioritaireDeLaPolitiqueDeLaVille2024;
import fr.insee.rmes.magma.diffusion.model.TypeEnumAscendantsCommune;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

import java.time.LocalDate;

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureMockMvc
@Tag("integration")


class GeoQuartiersPrioritairesDeLaPolitiqueDeLaVilleTest extends TestcontainerTest {

@Autowired
GeoQuartierPrioritaireDeLaPolitiqueDeLaVilleEndpoints endpoints;
@Autowired
private MockMvc mockMvc;

/// ///////////////////////////////////////////////////////////////////////
/// geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/{code} ///
/// ///////////////////////////////////////////////////////////////////////

// geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/QN06255M?date=2025-09-04
@Test
void should_return_quartierPrioritaireDeLaVilleCode_QN06255M_when_codeQN06255M_date20250904() {
var response = endpoints.getcogqpv("QN06255M", LocalDate.of(2025, 9, 4));
var result = response.getBody();
Assertions.assertNotNull(result);
assertAll(
() -> assertEquals("QN06255M", result.getCode()),
() -> assertEquals("http://id.insee.fr/geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/23498c07-2891-41e9-b3d5-d8846188ba0c", result.getUri()),
() -> assertEquals(QuartierPrioritaireDeLaPolitiqueDeLaVille2024.TypeEnum.QUARTIER_PRIORITAIRE_DE_LA_POLITIQUE_DE_LA_VILLE2024, result.getType()),
() -> assertEquals(LocalDate.of(2024, 1, 1), result.getDateCreation()),
() -> assertEquals("Ville Centre", result.getIntituleSansArticle()),
() -> assertEquals(QuartierPrioritaireDeLaPolitiqueDeLaVille2024.TypeArticleEnum.X, result.getTypeArticle()),
() -> assertEquals("Ville Centre", result.getIntitule())
);
}

// geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/QN08255M?date=2025-09-04 should return 404
@Test
void should_return_404_when_CommuneCodeAscendants_codeQN08255M_date20250904() throws Exception{
mockMvc.perform(get("/geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/QN08255M")
.param("date", "2025-09-04"))
.andExpect(status().isNotFound());
}

// geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/QJ08255M?date=2025-09-04 should return 400
@Test
void should_return_400_when_CommuneCodeAscendants_codeQJ08255M_date20250904() throws Exception{
mockMvc.perform(get("/geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/QJ08255M")
.param("date", "2025-09-04"))
.andExpect(status().isBadRequest());
}

/// ///////////////////////////////////////////////////////////////////////
/// geo/quartiersPrioritairesDeLaPolitiqueDeLaVille2024 ///
/// ///////////////////////////////////////////////////////////////////////

// geo/quartiersPrioritairesDeLaPolitiqueDeLaVille2024?date=2025-09-04//
@Test
void should_return_1609_QPV_when_quartierPrioritaireDeLaPolitiqueDeLaVille2024_date20250904() {
var response = endpoints.getcogqpvliste(LocalDate.of(2025,9,4));
var result = response.getBody();
Assertions.assertNotNull(result);
var resultItem1= result.getFirst();

assertAll(
() -> assertEquals(1609, result.size()),
() -> assertEquals("QN00101M", resultItem1.getCode()),
() -> assertEquals("http://id.insee.fr/geo/quartierPrioritaireDeLaPolitiqueDeLaVille2024/40526c49-2c78-4856-a4ed-21714bf70cb9", resultItem1.getUri()),
() -> assertEquals(QuartierPrioritaireDeLaPolitiqueDeLaVille2024.TypeEnum.QUARTIER_PRIORITAIRE_DE_LA_POLITIQUE_DE_LA_VILLE2024, resultItem1.getType()),
() -> assertEquals(LocalDate.of(2024,1,1), resultItem1.getDateCreation()),
() -> assertEquals("Grande Reyssouze Terre Des Fleurs", resultItem1.getIntituleSansArticle()),
() -> assertEquals(QuartierPrioritaireDeLaPolitiqueDeLaVille2024.TypeArticleEnum.X, resultItem1.getTypeArticle()),
() -> assertEquals("Grande Reyssouze Terre Des Fleurs", resultItem1.getIntitule())
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@ void should_return_region06_when_regionCode06_date20250904() {

// geo/region/06/descendants?date=2025-09-04 : renvoie 30 territoires
@Test
void should_return_167_territoires_when_RegionCodeDescendants_code06_date20250904_typeNull_filtreNomNull(){
void should_return_209_territoires_when_RegionCodeDescendants_code06_date20250904_typeNull_filtreNomNull(){
var response = endpoints.getcogregdes("06", LocalDate.of(2025, 9, 4), null, null);
var result = response.getBody();
assertNotNull(result);
var resultItem1= result.getFirst();
assertAll(
() -> assertEquals(167, result.size()),
() -> assertEquals(209, result.size()),
() -> assertEquals("97601", resultItem1.getCode()),
() -> assertEquals("http://id.insee.fr/geo/canton/03e01e65-f723-4998-b9e7-2068df3b053a", resultItem1.getUri()),
() -> assertEquals(TerritoireTousAttributs.TypeEnum.CANTON, resultItem1.getType()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ void should_return_uniteUrbaine2415_when_zoneDEmploi2020Code2415_date20250904()

// geo/zoneDEmploi2020/2415/descendants?date=2025-09-04
@Test
void should_return_41_territoires_when_zoneDEmploi2020CodeDescendants_code2415_date20250904_typeNull(){
void should_return_42_territoires_when_zoneDEmploi2020CodeDescendants_code2415_date20250904_typeNull(){
var response = endpoints.getcogzedesc("2415", LocalDate.of(2025, 9, 4), null);
var result = response.getBody();
assertNotNull(result);
var resultItem1= result.getFirst();
assertAll(
() -> assertEquals(41, result.size()),
() -> assertEquals(42, result.size()),
() -> assertEquals("18036", resultItem1.getCode()),
() -> assertEquals("http://id.insee.fr/geo/commune/9d090028-9065-4c75-bb2b-6ea30d430af7", resultItem1.getUri()),
() -> assertEquals(TerritoireTousAttributs.TypeEnum.COMMUNE, resultItem1.getType()),
Expand Down
Loading