diff --git a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonOuVilleQueriesTest.java b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonOuVilleQueriesTest.java index e35acdb0..8b37e6c1 100644 --- a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonOuVilleQueriesTest.java +++ b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonOuVilleQueriesTest.java @@ -1,10 +1,7 @@ package fr.insee.rmes.magma.diffusion.api.testcontainers.queries; import fr.insee.rmes.magma.diffusion.api.GeoCantonOuVilleEndpoints; -import fr.insee.rmes.magma.diffusion.model.CantonOuVille; -import fr.insee.rmes.magma.diffusion.model.TerritoireTousAttributs; -import fr.insee.rmes.magma.diffusion.model.TypeEnumAscendantsCantonOuVille; -import fr.insee.rmes.magma.diffusion.model.TypeEnumDescendantsCantonOuVille; +import fr.insee.rmes.magma.diffusion.model.*; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -71,7 +68,7 @@ void should_return_1_region_when_CantonOuVilleCodeAscendants_code0101_date202509 } ///////////////////////////////////////////////////////////////////// - /// geo/cantonOuVille/{code} /// + /// geo/cantonOuVille/{code} /// ///////////////////////////////////////////////////////////////////// // geo/cantonOuVille/0101?date=2025-09-04 @@ -89,6 +86,21 @@ void should_return_CantonOuVille_When_code0101_date20250904() throws Exception { assertEquals("Ambérieu-en-Bugey", result.getIntitule()); } +// geo/cantonOuVille/2B05?date=2025-09-04 + @Test + void should_return_CantonCode_2B05_when_code2B05_date20250904() { + var response = endpoints.getcogcanvil("2B05", LocalDate.of(2025, 9, 4)); + var result = response.getBody(); + assertNotNull(result); + assertEquals("2B05", result.getCode()); + assertEquals("http://id.insee.fr/geo/cantonOuVille/3a6d53ee-51bb-41d7-91e9-44557fa11791", result.getUri()); + assertEquals(CantonOuVille.TypeEnum.CANTON_OU_VILLE, result.getType()); + assertEquals(LocalDate.of(2016, 1, 1), result.getDateCreation()); + assertEquals("Biguglia-Nebbio", result.getIntituleSansArticle()); + assertEquals(CantonOuVille.TypeArticleEnum._0, result.getTypeArticle()); + assertEquals("Biguglia-Nebbio", result.getIntitule()); + } + // geo/cantonOuVille/0100?date=2025-09-04 renvoie 404 @Test void should_return_404_when_CantonOuVilleCode_code0100_date20250904() throws Exception{ @@ -201,6 +213,14 @@ void should_return_404_when_CantonOuVilleCodePrecedents_code0104_date19450101() .andExpect(status().isNotFound()); } +// geo/cantonOuVille/2B05/precedents?date=2025-09-04 + @Test + void should_return_404_when_CantonOuVilleCodePrecedents_code2B05_date20250904() throws Exception{ + mockMvc.perform(get("/geo/cantonOuVille/2B05/precedents") + .param("date", "2025-09-04")) + .andExpect(status().isNotFound()); + } + //////////////////////////////////////////////////////////////////// /// geo/cantonOuVille/{code}/projetes /// //////////////////////////////////////////////////////////////////// @@ -223,6 +243,24 @@ void should_return_3_cantonsOuVilles_when_CantonsOuVillesCodeProjetes_code0104_d assertEquals("Belley", resultItem1.getIntitule()); } + + // geo/cantonOuVille/2B05/projetes?date=2025-09-04&dateProjection=2016-01-01 renvoie 1 cantonOuVilles + @Test + void should_return_1_cantonsOuVilles_when_CantonsOuVillesCodeProjetes_code2B05_date20250904_dateProjection20160101(){ + var response = endpoints.getcogcanvilproj ("2B05", LocalDate.of(2016,1,1),LocalDate.of(2025, 9, 4)); + var result = response.getBody(); + assertNotNull(result); + var resultItem1= result.getFirst(); + assertEquals(1, result.size()); + assertEquals("2B05", resultItem1.getCode()); + assertEquals("http://id.insee.fr/geo/cantonOuVille/3a6d53ee-51bb-41d7-91e9-44557fa11791", resultItem1.getUri()); + assertEquals(TerritoireTousAttributs.TypeEnum.CANTON_OU_VILLE, resultItem1.getType()); + assertEquals(LocalDate.of(2016,1,1), resultItem1.getDateCreation()); + assertEquals("Biguglia-Nebbio", resultItem1.getIntituleSansArticle()); + assertEquals(TerritoireTousAttributs.TypeArticleEnum._0, resultItem1.getTypeArticle()); + assertEquals("Biguglia-Nebbio", resultItem1.getIntitule()); + } + // geo/cantonOuVille/0104/projetes?date=2025-09-01 @Test void should_return_400_when_CantonOuVilleCodeProjetes_dateProjectionNull() throws Exception{ @@ -263,10 +301,18 @@ void should_return_1_cantonOuVille_when_CantonOuVIlleCodeSuivants_code0103_date2 // geo/cantonOuVille/0103/suivants?date=2025-09-04 @Test - void should_return_404_when_CantonOuVIlleCodeSuivants_code0103_date20250904() throws Exception{ + void should_return_404_when_CantonOuVilleCodeSuivants_code0103_date20250904() throws Exception{ mockMvc.perform(get("/geo/cantonOuVille/0103/suivants") .param("date", "2025-09-04")) .andExpect(status().isNotFound()); } + // geo/cantonOuVille/2B05/suivants?date=2025-09-04 + @Test + void should_return_404_when_CantonOuVilleCodeSuivants_code2B05_date20250904() throws Exception{ + mockMvc.perform(get("/geo/cantonOuVille/2B05/suivants") + .param("date", "2025-09-04")) + .andExpect(status().isNotFound()); + } + } diff --git a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonQueriesTest.java b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonQueriesTest.java index f8d1fc01..1eb2a044 100644 --- a/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonQueriesTest.java +++ b/magma-diffusion-impl/src/test/java/fr/insee/rmes/magma/diffusion/api/testcontainers/queries/GeoCantonQueriesTest.java @@ -13,7 +13,6 @@ import java.time.LocalDate; import static org.junit.jupiter.api.Assertions.*; -import static org.junit.Assert.assertEquals; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -78,6 +77,8 @@ void should_return_CantonCode_0101_when_code22_date20250904() { var response = endpoints.getcogcan("0101", LocalDate.of(2025, 9, 4)); var result = response.getBody(); assertNotNull(result); + assertEquals("0101", result.getCode()); + assertEquals("http://id.insee.fr/geo/canton/f96a2438-478f-4ebb-b659-434305dff18f", result.getUri()); assertEquals(Canton.TypeEnum.CANTON, result.getType()); assertEquals(LocalDate.of(2016, 1, 1), result.getDateCreation()); assertEquals("Ambérieu-en-Bugey", result.getIntituleSansArticle()); @@ -86,6 +87,22 @@ void should_return_CantonCode_0101_when_code22_date20250904() { assertEquals("01004", result.getChefLieu()); } + // geo/canton/2B05?date=2025-09-04 (in addition to Metadata-API) + @Test + void should_return_CantonCode_2B05_when_code2B05_date20250904() { + var response = endpoints.getcogcan("2B05", LocalDate.of(2025, 9, 4)); + var result = response.getBody(); + assertNotNull(result); + assertEquals("2B05", result.getCode()); + assertEquals("http://id.insee.fr/geo/canton/7d8565df-5f17-4a13-9a19-10792df227e1", result.getUri()); + assertEquals(Canton.TypeEnum.CANTON, result.getType()); + assertEquals(LocalDate.of(2016, 1, 1), result.getDateCreation()); + assertEquals("Biguglia-Nebbio", result.getIntituleSansArticle()); + assertEquals(Canton.TypeArticleEnum._0, result.getTypeArticle()); + assertEquals("Biguglia-Nebbio", result.getIntitule()); + assertEquals("2B037", result.getChefLieu()); + } + // geo/canton/01011?date=2025-09-04 return 404 @Test @@ -259,15 +276,15 @@ void should_return_19_territoires_when_CantonCodeIntersections_code0101_date2025 var resultItem1= result.getFirst(); assertAll( - () -> Assertions.assertEquals(19, result.size()), - () -> Assertions.assertEquals("01", resultItem1.getCode()), - () -> Assertions.assertEquals("http://id.insee.fr/geo/departement/84680e6f-2e99-44c9-a9ba-2e96a2ae48b7", resultItem1.getUri()), - () -> Assertions.assertEquals(TerritoireBaseRelation.TypeEnum.DEPARTEMENT, resultItem1.getType()), - () -> Assertions.assertEquals(LocalDate.of(1967,12,31), resultItem1.getDateCreation()), - () -> Assertions.assertEquals("Ain", resultItem1.getIntituleSansArticle()), - () -> Assertions.assertEquals(TerritoireBaseRelation.TypeArticleEnum._5, resultItem1.getTypeArticle()), - () -> Assertions.assertEquals("Ain", resultItem1.getIntitule()), - () -> Assertions.assertEquals("inclus", resultItem1.getRelation()) + () -> assertEquals(19, result.size()), + () -> assertEquals("01", resultItem1.getCode()), + () -> assertEquals("http://id.insee.fr/geo/departement/84680e6f-2e99-44c9-a9ba-2e96a2ae48b7", resultItem1.getUri()), + () -> assertEquals(TerritoireBaseRelation.TypeEnum.DEPARTEMENT, resultItem1.getType()), + () -> assertEquals(LocalDate.of(1967,12,31), resultItem1.getDateCreation()), + () -> assertEquals("Ain", resultItem1.getIntituleSansArticle()), + () -> assertEquals(TerritoireBaseRelation.TypeArticleEnum._5, resultItem1.getTypeArticle()), + () -> assertEquals("Ain", resultItem1.getIntitule()), + () -> assertEquals("inclus", resultItem1.getRelation()) ); } @@ -282,23 +299,23 @@ void should_return_18_communes_when_CantonCodeIntersections_code0101_date2025090 assertAll( () -> Assertions.assertEquals(18, result.size()), - () -> Assertions.assertEquals("01002", resultItem1.getCode()), - () -> Assertions.assertEquals("http://id.insee.fr/geo/commune/43018c68-c278-433a-b285-3531e8d5347e", resultItem1.getUri()), - () -> Assertions.assertEquals(TerritoireBaseRelation.TypeEnum.COMMUNE, resultItem1.getType()), - () -> Assertions.assertEquals(LocalDate.of(1943,1,1), resultItem1.getDateCreation()), - () -> Assertions.assertEquals("Abergement-de-Varey", resultItem1.getIntituleSansArticle()), - () -> Assertions.assertEquals(TerritoireBaseRelation.TypeArticleEnum._5, resultItem1.getTypeArticle()), - () -> Assertions.assertEquals("L'Abergement-de-Varey", resultItem1.getIntitule()), - () -> Assertions.assertEquals("contient", resultItem1.getRelation()), - - () -> Assertions.assertEquals("01004", resultItem2.getCode()), - () -> Assertions.assertEquals("http://id.insee.fr/geo/commune/9957029c-4f49-4183-8c94-f6001a6e5a92", resultItem2.getUri()), - () -> Assertions.assertEquals(TerritoireBaseRelation.TypeEnum.COMMUNE, resultItem2.getType()), - () -> Assertions.assertEquals(LocalDate.of(1955,3,31), resultItem2.getDateCreation()), - () -> Assertions.assertEquals("Ambérieu-en-Bugey", resultItem2.getIntituleSansArticle()), - () -> Assertions.assertEquals(TerritoireBaseRelation.TypeArticleEnum._1, resultItem2.getTypeArticle()), - () -> Assertions.assertEquals("Ambérieu-en-Bugey", resultItem2.getIntitule()), - () -> Assertions.assertEquals("contient", resultItem2.getRelation()) + () -> assertEquals("01002", resultItem1.getCode()), + () -> assertEquals("http://id.insee.fr/geo/commune/43018c68-c278-433a-b285-3531e8d5347e", resultItem1.getUri()), + () -> assertEquals(TerritoireBaseRelation.TypeEnum.COMMUNE, resultItem1.getType()), + () -> assertEquals(LocalDate.of(1943,1,1), resultItem1.getDateCreation()), + () -> assertEquals("Abergement-de-Varey", resultItem1.getIntituleSansArticle()), + () -> assertEquals(TerritoireBaseRelation.TypeArticleEnum._5, resultItem1.getTypeArticle()), + () -> assertEquals("L'Abergement-de-Varey", resultItem1.getIntitule()), + () -> assertEquals("contient", resultItem1.getRelation()), + + () -> assertEquals("01004", resultItem2.getCode()), + () -> assertEquals("http://id.insee.fr/geo/commune/9957029c-4f49-4183-8c94-f6001a6e5a92", resultItem2.getUri()), + () -> assertEquals(TerritoireBaseRelation.TypeEnum.COMMUNE, resultItem2.getType()), + () -> assertEquals(LocalDate.of(1955,3,31), resultItem2.getDateCreation()), + () -> assertEquals("Ambérieu-en-Bugey", resultItem2.getIntituleSansArticle()), + () -> assertEquals(TerritoireBaseRelation.TypeArticleEnum._1, resultItem2.getTypeArticle()), + () -> assertEquals("Ambérieu-en-Bugey", resultItem2.getIntitule()), + () -> assertEquals("contient", resultItem2.getRelation()) ); } diff --git a/magma-oas/src/main/resources/openapi-diffusion.yaml b/magma-oas/src/main/resources/openapi-diffusion.yaml index bf41ea5e..21acb2df 100644 --- a/magma-oas/src/main/resources/openapi-diffusion.yaml +++ b/magma-oas/src/main/resources/openapi-diffusion.yaml @@ -7674,7 +7674,7 @@ components: CodeCanton: description: 'Code d''un canton' - pattern: '[0-9]{4}|[0-9]{5}|2[ABab][0-9]{2}' + pattern: '[0-9][0-9AB][0-9]{2,3}' type: string xml: attribute: true @@ -7763,7 +7763,7 @@ components: CodeCantonOuVille: description: 'Code d''un canton-ou-ville' - pattern: '[0-9]{4,5}' + pattern: '[0-9][0-9AB][0-9]{2,3}' type: string xml: attribute: true @@ -7789,7 +7789,7 @@ components: CodeCantonOuVillePrec: description: 'Code d''un canton-ou-ville' - pattern: '[0-9]{4,5}' + pattern: '[0-9][0-9AB][0-9]{2,3}' type: string xml: attribute: true @@ -7806,7 +7806,7 @@ components: CodeCantonOuVilleSuivants: description: 'Code d''un canton-ou-ville' - pattern: '[0-9]{4,5}' + pattern: '[0-9][0-9AB][0-9]{2,3}' type: string xml: attribute: true