diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponses.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponses.kt index fa0f4c545d..0d9b3cd194 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponses.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponses.kt @@ -67,16 +67,8 @@ private fun List.packR val questionnaireItem = questionnaireItems.single() - questionnaireResponseItems.forEach { it -> - if (questionnaireItem.type == Questionnaire.QuestionnaireItemType.GROUP) { - if (questionnaireItem.repeats) { - it.answer.forEach { it.item = it.item.packRepeatedGroups(questionnaireItem.item) } - } else { - it.item = it.item.packRepeatedGroups(questionnaireItem.item) - } - } else { - it.answer.forEach { it.item = it.item.packRepeatedGroups(questionnaireItem.item) } - } + questionnaireResponseItems.forEach { + it.item = it.item.packRepeatedGroups(questionnaireItem.item) } if ( diff --git a/datacapture/src/test/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponsesTest.kt b/datacapture/src/test/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponsesTest.kt index 165d95fe45..236ed8796a 100644 --- a/datacapture/src/test/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponsesTest.kt +++ b/datacapture/src/test/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponsesTest.kt @@ -260,6 +260,121 @@ class MoreQuestionnaireResponsesTest { assertResourceEquals(questionnaireResponse, packedQuestionnaireResponse) } + @Test + fun `should pack repeated groups recursively`() { + val questionnaire = + Questionnaire().apply { + addItem( + QuestionnaireItemComponent().apply { + linkId = "repeated-group" + type = Questionnaire.QuestionnaireItemType.GROUP + repeats = true + addItem( + QuestionnaireItemComponent().apply { + linkId = "nested-repeated-group" + type = Questionnaire.QuestionnaireItemType.GROUP + repeats = true + addItem( + QuestionnaireItemComponent().apply { + linkId = "nested-nested-question" + type = Questionnaire.QuestionnaireItemType.BOOLEAN + }, + ) + }, + ) + }, + ) + } + + val questionnaireResponse = + QuestionnaireResponse().apply { + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "repeated-group" + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-repeated-group" + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-nested-question" + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + value = BooleanType(true) + }, + ) + }, + ) + }, + ) + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-repeated-group" + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-nested-question" + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + value = BooleanType(false) + }, + ) + }, + ) + }, + ) + }, + ) + } + + val packedQuestionnaireResponse = + QuestionnaireResponse().apply { + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "repeated-group" + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-repeated-group" + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-nested-question" + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + value = BooleanType(true) + }, + ) + }, + ) + }, + ) + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + addItem( + QuestionnaireResponseItemComponent().apply { + linkId = "nested-nested-question" + addAnswer( + QuestionnaireResponseItemAnswerComponent().apply { + value = BooleanType(false) + }, + ) + }, + ) + }, + ) + }, + ) + }, + ) + }, + ) + } + + questionnaireResponse.packRepeatedGroups(questionnaire) + assertResourceEquals(questionnaireResponse, packedQuestionnaireResponse) + } + @Test fun `should not modify non-repeated groups while packing repeated groups`() { val questionnaire =