Skip to content

Commit

Permalink
test: tidy up functional tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nsenave committed Sep 27, 2023
1 parent 8a6b8cc commit 3d74360
Show file tree
Hide file tree
Showing 3 changed files with 18,288 additions and 144 deletions.
232 changes: 106 additions & 126 deletions eno-core/src/test/java/fr/insee/eno/core/DDIToEnoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@
import fr.insee.eno.core.model.EnoQuestionnaire;
import fr.insee.eno.core.parameter.EnoParameters;
import fr.insee.eno.core.parameter.EnoParameters.ModeParameter;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static fr.insee.eno.core.model.sequence.ItemReference.ItemType.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
Expand All @@ -19,135 +18,116 @@
* */
class DDIToEnoTest {

private final ClassLoader classLoader = this.getClass().getClassLoader();
private EnoParameters enoParameters;

/** The focus is on the mapping part here, so business processing (that may be enabled by default) are disabled. */
@BeforeEach
void parametersWithNoBusinessProcessing() {
enoParameters = EnoParameters.emptyValues();
enoParameters.setModeParameter(ModeParameter.PROCESS);
enoParameters.setSequenceNumbering(false);
enoParameters.setQuestionNumberingMode(EnoParameters.QuestionNumberingMode.NONE);
enoParameters.setArrowCharInQuestions(false);
enoParameters.setIdentificationQuestion(false);
enoParameters.setCommentSection(false);
enoParameters.setResponseTimeQuestion(false);
}

@Test
@DisplayName("DDI 'l20g2ba7' (acceptance test)")
void test01() throws DDIParsingException {
@ParameterizedTest
@ValueSource(strings = {
"l20g2ba7", // acceptance questionnaire
//"l5v3spn0", // contains loops
"kx0a2hn8", // contains loops
"kzy5kbtl", // contains tables
//"l8x6fhtd", // 'sandbox' questionnaire
//"ldodefpq", // contains pairwise question
"lhpz68wp", // designed to test question grouping
"li49zxju" // 'vpp' survey
})
@DisplayName("Large questionnaires, DDI to Eno, transformation should succeed")
void transformQuestionnaire_nonNullOutput(String questionnaireId) throws DDIParsingException {
//
EnoQuestionnaire enoQuestionnaire = DDIToEno.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-l20g2ba7.xml"),
enoParameters);

this.getClass().getClassLoader().getResourceAsStream("end-to-end/ddi/ddi-"+questionnaireId+".xml"),
EnoParameters.of(EnoParameters.Context.DEFAULT, ModeParameter.PROCESS));
//
assertNotNull(enoQuestionnaire);

// Variables
assertEquals(127, enoQuestionnaire.getVariables().size());

// Code lists
//assertEquals(16, enoQuestionnaire.getCodeLists().size()); // Code lists should be refactored at questionnaire level

// Sequences
assertEquals(6, enoQuestionnaire.getSequences().size());
// First sequence
assertEquals(3, enoQuestionnaire.getSequences().get(0).getSequenceItems().size());
assertEquals("jfazsitt", enoQuestionnaire.getSequences().get(0).getSequenceItems().get(0).getId());
assertEquals("jfjhggkx", enoQuestionnaire.getSequences().get(0).getSequenceItems().get(1).getId());
assertEquals("jfjeuskc", enoQuestionnaire.getSequences().get(0).getSequenceItems().get(2).getId());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(0).getSequenceItems().get(0).getType());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(0).getSequenceItems().get(1).getType());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(0).getSequenceItems().get(2).getType());
//
assertEquals(2, enoQuestionnaire.getSequences().get(1).getSequenceItems().size());
//
assertEquals(9, enoQuestionnaire.getSequences().get(2).getSequenceItems().size());
//
assertEquals(5, enoQuestionnaire.getSequences().get(3).getSequenceItems().size());
assertEquals("k6c3ia6n", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(0).getId());
assertEquals("k6c3ia6n-CI-0", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(1).getId());
assertEquals("k6gjzooe", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(2).getId());
assertEquals("k3opeux2", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(3).getId());
assertEquals("kzf8xhgq", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(4).getId());
assertEquals(QUESTION, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(0).getType());
assertEquals(CONTROL, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(1).getType());
assertEquals(QUESTION, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(2).getType());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(3).getType());
assertEquals(FILTER, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(4).getType());
//
assertEquals(3, enoQuestionnaire.getSequences().get(4).getSequenceItems().size());
assertEquals("k6c75pyx", enoQuestionnaire.getSequences().get(4).getSequenceItems().get(0).getId());
assertEquals("l8uayz0h", enoQuestionnaire.getSequences().get(4).getSequenceItems().get(1).getId());
assertEquals("kfs6ox4i", enoQuestionnaire.getSequences().get(4).getSequenceItems().get(2).getId());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(4).getSequenceItems().get(0).getType());
assertEquals(LOOP, enoQuestionnaire.getSequences().get(4).getSequenceItems().get(1).getType());
assertEquals(LOOP, enoQuestionnaire.getSequences().get(4).getSequenceItems().get(2).getType());
// Last sequence
assertEquals(0, enoQuestionnaire.getSequences().get(5).getSequenceItems().size());

// Questions
assertEquals(30, enoQuestionnaire.getSingleResponseQuestions().size());
assertEquals(9, enoQuestionnaire.getMultipleResponseQuestions().size());
}

@Test
@DisplayName("DDI 'l5v3spn0' (contains loops)")
void test02() throws DDIParsingException {
//
EnoQuestionnaire enoQuestionnaire = DDIToEno.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-l5v3spn0.xml"),
enoParameters);
//
assertNotNull(enoQuestionnaire);
}
@Nested
@DisplayName("DDI to Eno, functional test with 'l20g2ba7'")
class FunctionalTest1 {

private static EnoQuestionnaire enoQuestionnaire;

@BeforeAll
static void mapDDI() throws DDIParsingException {
// The focus is on the mapping part here, so business processing (that may be enabled by default) are disabled.
EnoParameters enoParameters = EnoParameters.emptyValues();
enoParameters.setModeParameter(ModeParameter.PROCESS);
enoParameters.setSequenceNumbering(false);
enoParameters.setQuestionNumberingMode(EnoParameters.QuestionNumberingMode.NONE);
enoParameters.setArrowCharInQuestions(false);
enoParameters.setIdentificationQuestion(false);
enoParameters.setCommentSection(false);
enoParameters.setResponseTimeQuestion(false);
//
enoQuestionnaire = DDIToEno.transform(
DDIToEnoTest.class.getClassLoader().getResourceAsStream("end-to-end/ddi/ddi-l20g2ba7.xml"),
enoParameters);
}

@Test
void enoQuestionnaireIsNotNull() {
assertNotNull(enoQuestionnaire);
}
@Test
void variablesCount() {
assertEquals(127, enoQuestionnaire.getVariables().size());
}
@Test
void codeLists() {
assertEquals(16, enoQuestionnaire.getCodeLists().size()); // Code lists should be refactored at questionnaire level
}
@Test
void sequencesCount() {
// Sequences
assertEquals(6, enoQuestionnaire.getSequences().size());
}
@Test
void sequenceSizes() {
assertEquals(3, enoQuestionnaire.getSequences().get(0).getSequenceItems().size());
assertEquals(2, enoQuestionnaire.getSequences().get(1).getSequenceItems().size());
assertEquals(9, enoQuestionnaire.getSequences().get(2).getSequenceItems().size());
assertEquals(5, enoQuestionnaire.getSequences().get(3).getSequenceItems().size());
assertEquals(3, enoQuestionnaire.getSequences().get(4).getSequenceItems().size());
assertEquals(0, enoQuestionnaire.getSequences().get(5).getSequenceItems().size());
}
@Test
void sequenceItemTypes() {
//
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(0).getSequenceItems().get(0).getType());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(0).getSequenceItems().get(1).getType());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(0).getSequenceItems().get(2).getType());
//
assertEquals(QUESTION, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(0).getType());
assertEquals(CONTROL, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(1).getType());
assertEquals(QUESTION, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(2).getType());
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(3).getType());
assertEquals(FILTER, enoQuestionnaire.getSequences().get(3).getSequenceItems().get(4).getType());
//
assertEquals(SUBSEQUENCE, enoQuestionnaire.getSequences().get(4).getSequenceItems().get(0).getType());
assertEquals(LOOP, enoQuestionnaire.getSequences().get(4).getSequenceItems().get(1).getType());
assertEquals(LOOP, enoQuestionnaire.getSequences().get(4).getSequenceItems().get(2).getType());
}
@Test
void sequenceItemIds() {
//
assertEquals("jfazsitt", enoQuestionnaire.getSequences().get(0).getSequenceItems().get(0).getId());
assertEquals("jfjhggkx", enoQuestionnaire.getSequences().get(0).getSequenceItems().get(1).getId());
assertEquals("jfjeuskc", enoQuestionnaire.getSequences().get(0).getSequenceItems().get(2).getId());
//
assertEquals("k6c3ia6n", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(0).getId());
assertEquals("k6c3ia6n-CI-0", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(1).getId());
assertEquals("k6gjzooe", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(2).getId());
assertEquals("k3opeux2", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(3).getId());
assertEquals("kzf8xhgq", enoQuestionnaire.getSequences().get(3).getSequenceItems().get(4).getId());
//
assertEquals("k6c75pyx", enoQuestionnaire.getSequences().get(4).getSequenceItems().get(0).getId());
assertEquals("l8uayz0h", enoQuestionnaire.getSequences().get(4).getSequenceItems().get(1).getId());
assertEquals("kfs6ox4i", enoQuestionnaire.getSequences().get(4).getSequenceItems().get(2).getId());
}
@Test
void questionsCount() {
assertEquals(30, enoQuestionnaire.getSingleResponseQuestions().size());
assertEquals(9, enoQuestionnaire.getMultipleResponseQuestions().size());
}

@Test
@DisplayName("DDI 'kx0a2hn8' (contains loops)")
void test03() throws DDIParsingException {
//
EnoQuestionnaire enoQuestionnaire = DDIToEno.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-kx0a2hn8.xml"),
enoParameters);
//
assertNotNull(enoQuestionnaire);
}

@Test
@DisplayName("DDI 'kzy5kbtl' (contains tables)")
void test04() throws DDIParsingException {
//
EnoQuestionnaire enoQuestionnaire = DDIToEno.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-kzy5kbtl.xml"),
enoParameters);
//
assertNotNull(enoQuestionnaire);
}

@Test
@DisplayName("DDI 'l8x6fhtd' ('sandbox' questionnaire)")
void test05() throws DDIParsingException {
//
EnoQuestionnaire enoQuestionnaire = DDIToEno.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-l8x6fhtd.xml"),
enoParameters);
//
assertNotNull(enoQuestionnaire);
}

@Test
@DisplayName("DDI 'ldodefpq' (contains pairwise question)")
@Disabled("Bug identified on the date type of question conversion. + Must be re-generated with loop spec in DDI.")
void test06() throws DDIParsingException {
//
EnoQuestionnaire enoQuestionnaire = DDIToEno.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-ldodefpq.xml"),
enoParameters);
//
assertNotNull(enoQuestionnaire);
}

}
29 changes: 11 additions & 18 deletions eno-core/src/test/java/fr/insee/eno/core/DDIToLunaticTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,45 +23,37 @@
*/
class DDIToLunaticTest {

private final ClassLoader classLoader = this.getClass().getClassLoader();
private EnoParameters enoParameters;

@BeforeEach
void setupParameters() {
enoParameters = EnoParameters.of(Context.DEFAULT, ModeParameter.CAWI, Format.LUNATIC);
}

@ParameterizedTest
@ValueSource(strings = {
"lhpz68wp",
"l20g2ba7",
//"l5v3spn0",
"kx0a2hn8",
//"kzy5kbtl",
"kzy5kbtl",
//"l8x6fhtd",
//"ldodefpq",
"lhpz68wp",
"li49zxju"
})
@DisplayName("Many questionnaires, non null output")
void testAll(String questionnaireId) throws DDIParsingException {
@DisplayName("Large questionnaires, DDI to Lunatic, transformation should succeed")
void transformQuestionnaire_nonNullOutput(String questionnaireId) throws DDIParsingException {
//
Questionnaire lunaticQuestionnaire = DDIToLunatic.transform(
classLoader.getResourceAsStream("end-to-end/ddi/ddi-"+questionnaireId+".xml"),
enoParameters);
this.getClass().getClassLoader().getResourceAsStream("end-to-end/ddi/ddi-"+questionnaireId+".xml"),
EnoParameters.of(Context.DEFAULT, ModeParameter.CAWI, Format.LUNATIC));
//
assertNotNull(lunaticQuestionnaire);
}

@Nested
@DisplayName("DDI 'l20g2ba7' to Lunatic (acceptance test)")
class AcceptanceTest {
@DisplayName("DDI to Lunatic, functional test with 'l20g2ba7'")
class FunctionalTest1 {

static Questionnaire lunaticQuestionnaire;
private static Questionnaire lunaticQuestionnaire;

@BeforeAll
static void mapLunaticQuestionnaire() throws DDIParsingException {
lunaticQuestionnaire = DDIToLunatic.transform(
AcceptanceTest.class.getClassLoader().getResourceAsStream("end-to-end/ddi/ddi-l20g2ba7.xml"),
DDIToLunaticTest.class.getClassLoader().getResourceAsStream("end-to-end/ddi/ddi-l20g2ba7.xml"),
EnoParameters.of(Context.DEFAULT, ModeParameter.CAWI, Format.LUNATIC));
}

Expand Down Expand Up @@ -102,4 +94,5 @@ void testLoopComponentTypes() {
}

}

}
Loading

0 comments on commit 3d74360

Please sign in to comment.