Skip to content

Commit

Permalink
Remove deep copy for answers in question view item. (#2576)
Browse files Browse the repository at this point in the history
* delete operation on updated answers.

* Remove deep copy for answers.

* unit test.

* unit test.

* link the issue to added test.

---------

Co-authored-by: Santosh Pingle <spingle@google.com>
  • Loading branch information
santosh-pingle and Santosh Pingle authored Jun 27, 2024
1 parent be4221c commit 4c1d702
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ data class QuestionnaireViewItem(
* carried out for the [RecyclerView.Adapter] to decide which items need to be updated.
*/
val answers: List<QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent> =
questionnaireResponseItem.answer.map { it.copy() }
questionnaireResponseItem.answer

/** Updates the answers. This will override any existing answers and removes the draft answer. */
suspend fun setAnswer(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -922,4 +922,85 @@ class QuestionnaireViewItemTest {

assertThat(enabledOptions.map { it.valueCoding.code }).containsExactly("option1", "option2")
}

// https://github.com/google/android-fhir/pull/2576
@Test
fun `answers property should match response item component answers`() {
val questionnaireItem =
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "repeated-group-1"
type = Questionnaire.QuestionnaireItemType.GROUP
repeats = true
item =
listOf(
Questionnaire.QuestionnaireItemComponent().apply {
linkId = "1"
type = Questionnaire.QuestionnaireItemType.STRING
},
)
}

val responseItem1 =
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
linkId = "1"
answer =
listOf(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = StringType("Answer 1")
},
)
}

val responseItem2 =
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
linkId = "1"
answer =
listOf(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
value = StringType("Answer 2")
},
)
}

val questionnaireResponseItem =
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
linkId = "repeated-group-1"
answer =
listOf(
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
item = listOf(responseItem1)
},
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
item = listOf(responseItem2)
},
)
}

val questionnaireViewItem =
QuestionnaireViewItem(
questionnaireItem = questionnaireItem,
questionnaireResponseItem = questionnaireResponseItem,
validationResult = NotValidated,
answersChangedCallback = { _, _, _, _ -> },
)

assertThat(questionnaireViewItem.answers.size).isEqualTo(2)
assertThat(
questionnaireViewItem.answers.first().item.first().answer.first().valueStringType.value,
)
.isEqualTo("Answer 1")
assertThat(questionnaireViewItem.answers[1].item.first().answer.first().valueStringType.value)
.isEqualTo("Answer 2")

assertThat(
questionnaireViewItem.answers.first().item.first().answer.first() ===
questionnaireResponseItem.answer.first().item.first().answer.first(),
)
.isTrue()
assertThat(
questionnaireViewItem.answers[1].item.first().answer.first() ===
questionnaireResponseItem.answer[1].item.first().answer.first(),
)
.isTrue()
}
}

0 comments on commit 4c1d702

Please sign in to comment.