From f487c4863e439417f536b54f0302c183fbeb7ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20S=C3=A9nave?= <59770457+nsenave@users.noreply.github.com> Date: Tue, 30 Jan 2024 11:57:53 +0100 Subject: [PATCH] fix: remove prefix in questionnaire id (#890) * fix: add ddi step to remove prefix in questionnaire id * test: unit test * chore: bump version --- build.gradle | 2 +- .../core/processing/in/DDIInProcessing.java | 1 + .../steps/ddi/DDICleanUpQuestionnaireId.java | 28 +++++++++++++ .../ddi/DDICleanUpQuestionnaireIdTest.java | 39 +++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 eno-core/src/main/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireId.java create mode 100644 eno-core/src/test/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireIdTest.java diff --git a/build.gradle b/build.gradle index 40191ac43..0592ab5b9 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ tasks.withType(JavaCompile).configureEach { allprojects { group = 'fr.insee.eno' - version = '3.16.0' + version = '3.16.1' } subprojects { diff --git a/eno-core/src/main/java/fr/insee/eno/core/processing/in/DDIInProcessing.java b/eno-core/src/main/java/fr/insee/eno/core/processing/in/DDIInProcessing.java index 8534a4ea5..7d9bf420c 100644 --- a/eno-core/src/main/java/fr/insee/eno/core/processing/in/DDIInProcessing.java +++ b/eno-core/src/main/java/fr/insee/eno/core/processing/in/DDIInProcessing.java @@ -11,6 +11,7 @@ public void applyProcessing(EnoQuestionnaire enoQuestionnaire) { // ProcessingPipeline processingPipeline = new ProcessingPipeline<>(); processingPipeline.start(enoQuestionnaire) + .then(new DDICleanUpQuestionnaireId()) .then(new DDIMoveUnitInQuestions()) .then(new DDIInsertResponseInTableCells()) .then(new DDIResolveVariableReferencesInExpressions()) diff --git a/eno-core/src/main/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireId.java b/eno-core/src/main/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireId.java new file mode 100644 index 000000000..e4550975c --- /dev/null +++ b/eno-core/src/main/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireId.java @@ -0,0 +1,28 @@ +package fr.insee.eno.core.processing.in.steps.ddi; + +import fr.insee.eno.core.exceptions.technical.MappingException; +import fr.insee.eno.core.model.EnoQuestionnaire; +import fr.insee.eno.core.processing.ProcessingStep; +import lombok.extern.slf4j.Slf4j; + +/** + * For some reason, an "Insee" prefix is added in the questionnaire identifier by the current Pogues to DDI + * transformation. This processing removes this prefix. + */ +@Slf4j +public class DDICleanUpQuestionnaireId implements ProcessingStep { + + private static final String INSEE_PREFIX = "INSEE-"; + + /** + * Removes the "Insee" prefix in the given questionnaire's id. + * @param enoQuestionnaire A Eno questionnaire. + */ + @Override + public void apply(EnoQuestionnaire enoQuestionnaire) { + if (enoQuestionnaire.getId() == null) // Shouldn't happen but you never know... + throw new MappingException("Questionnaire as a null identifier."); + enoQuestionnaire.setId(enoQuestionnaire.getId().replace(INSEE_PREFIX, "")); + } + +} diff --git a/eno-core/src/test/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireIdTest.java b/eno-core/src/test/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireIdTest.java new file mode 100644 index 000000000..681af670b --- /dev/null +++ b/eno-core/src/test/java/fr/insee/eno/core/processing/in/steps/ddi/DDICleanUpQuestionnaireIdTest.java @@ -0,0 +1,39 @@ +package fr.insee.eno.core.processing.in.steps.ddi; + +import fr.insee.eno.core.model.EnoQuestionnaire; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class DDICleanUpQuestionnaireIdTest { + + @Test + void questionnaireWithNullId_shouldThrowException() { + EnoQuestionnaire enoQuestionnaire = new EnoQuestionnaire(); + assertThrows(Exception.class, () -> new DDICleanUpQuestionnaireId().apply(enoQuestionnaire)); + } + + @Test + void questionnaireWithRegularId_shouldNotBeModified() { + // + EnoQuestionnaire enoQuestionnaire = new EnoQuestionnaire(); + enoQuestionnaire.setId("abcde1234"); + // + new DDICleanUpQuestionnaireId().apply(enoQuestionnaire); + // + assertEquals("abcde1234", enoQuestionnaire.getId()); + } + + @Test + void questionnaireWithInseePrefix_shouldBeModified() { + // + EnoQuestionnaire enoQuestionnaire = new EnoQuestionnaire(); + enoQuestionnaire.setId("INSEE-abcde1234"); + // + new DDICleanUpQuestionnaireId().apply(enoQuestionnaire); + // + assertEquals("abcde1234", enoQuestionnaire.getId()); + } + +}