Skip to content

Commit 11ed6f0

Browse files
authored
Pack repeated groups recursively (#2675)
* Fix packing repeated groups * Add test to pack repeated groups recursively
1 parent e7c8c33 commit 11ed6f0

File tree

2 files changed

+117
-10
lines changed

2 files changed

+117
-10
lines changed

datacapture/src/main/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponses.kt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,8 @@ private fun List<QuestionnaireResponse.QuestionnaireResponseItemComponent>.packR
6767

6868
val questionnaireItem = questionnaireItems.single()
6969

70-
questionnaireResponseItems.forEach { it ->
71-
if (questionnaireItem.type == Questionnaire.QuestionnaireItemType.GROUP) {
72-
if (questionnaireItem.repeats) {
73-
it.answer.forEach { it.item = it.item.packRepeatedGroups(questionnaireItem.item) }
74-
} else {
75-
it.item = it.item.packRepeatedGroups(questionnaireItem.item)
76-
}
77-
} else {
78-
it.answer.forEach { it.item = it.item.packRepeatedGroups(questionnaireItem.item) }
79-
}
70+
questionnaireResponseItems.forEach {
71+
it.item = it.item.packRepeatedGroups(questionnaireItem.item)
8072
}
8173

8274
if (

datacapture/src/test/java/com/google/android/fhir/datacapture/extensions/MoreQuestionnaireResponsesTest.kt

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,121 @@ class MoreQuestionnaireResponsesTest {
260260
assertResourceEquals(questionnaireResponse, packedQuestionnaireResponse)
261261
}
262262

263+
@Test
264+
fun `should pack repeated groups recursively`() {
265+
val questionnaire =
266+
Questionnaire().apply {
267+
addItem(
268+
QuestionnaireItemComponent().apply {
269+
linkId = "repeated-group"
270+
type = Questionnaire.QuestionnaireItemType.GROUP
271+
repeats = true
272+
addItem(
273+
QuestionnaireItemComponent().apply {
274+
linkId = "nested-repeated-group"
275+
type = Questionnaire.QuestionnaireItemType.GROUP
276+
repeats = true
277+
addItem(
278+
QuestionnaireItemComponent().apply {
279+
linkId = "nested-nested-question"
280+
type = Questionnaire.QuestionnaireItemType.BOOLEAN
281+
},
282+
)
283+
},
284+
)
285+
},
286+
)
287+
}
288+
289+
val questionnaireResponse =
290+
QuestionnaireResponse().apply {
291+
addItem(
292+
QuestionnaireResponseItemComponent().apply {
293+
linkId = "repeated-group"
294+
addItem(
295+
QuestionnaireResponseItemComponent().apply {
296+
linkId = "nested-repeated-group"
297+
addItem(
298+
QuestionnaireResponseItemComponent().apply {
299+
linkId = "nested-nested-question"
300+
addAnswer(
301+
QuestionnaireResponseItemAnswerComponent().apply {
302+
value = BooleanType(true)
303+
},
304+
)
305+
},
306+
)
307+
},
308+
)
309+
addItem(
310+
QuestionnaireResponseItemComponent().apply {
311+
linkId = "nested-repeated-group"
312+
addItem(
313+
QuestionnaireResponseItemComponent().apply {
314+
linkId = "nested-nested-question"
315+
addAnswer(
316+
QuestionnaireResponseItemAnswerComponent().apply {
317+
value = BooleanType(false)
318+
},
319+
)
320+
},
321+
)
322+
},
323+
)
324+
},
325+
)
326+
}
327+
328+
val packedQuestionnaireResponse =
329+
QuestionnaireResponse().apply {
330+
addItem(
331+
QuestionnaireResponseItemComponent().apply {
332+
linkId = "repeated-group"
333+
addAnswer(
334+
QuestionnaireResponseItemAnswerComponent().apply {
335+
addItem(
336+
QuestionnaireResponseItemComponent().apply {
337+
linkId = "nested-repeated-group"
338+
addAnswer(
339+
QuestionnaireResponseItemAnswerComponent().apply {
340+
addItem(
341+
QuestionnaireResponseItemComponent().apply {
342+
linkId = "nested-nested-question"
343+
addAnswer(
344+
QuestionnaireResponseItemAnswerComponent().apply {
345+
value = BooleanType(true)
346+
},
347+
)
348+
},
349+
)
350+
},
351+
)
352+
addAnswer(
353+
QuestionnaireResponseItemAnswerComponent().apply {
354+
addItem(
355+
QuestionnaireResponseItemComponent().apply {
356+
linkId = "nested-nested-question"
357+
addAnswer(
358+
QuestionnaireResponseItemAnswerComponent().apply {
359+
value = BooleanType(false)
360+
},
361+
)
362+
},
363+
)
364+
},
365+
)
366+
},
367+
)
368+
},
369+
)
370+
},
371+
)
372+
}
373+
374+
questionnaireResponse.packRepeatedGroups(questionnaire)
375+
assertResourceEquals(questionnaireResponse, packedQuestionnaireResponse)
376+
}
377+
263378
@Test
264379
fun `should not modify non-repeated groups while packing repeated groups`() {
265380
val questionnaire =

0 commit comments

Comments
 (0)