Skip to content

Commit 8ace1f8

Browse files
committed
Fix QuestionnaireViewItem answers change not updating state
By implement custom equals and hashcode, that on top of structural equality also checks that two questionnaireViewItems have the same response
1 parent e200e1c commit 8ace1f8

File tree

4 files changed

+150
-0
lines changed

4 files changed

+150
-0
lines changed

datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextDecimalViewHolderFactoryInstrumentedTest.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,4 +498,41 @@ class EditTextDecimalViewHolderFactoryInstrumentedTest {
498498
.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG, useUnmergedTree = true)
499499
.assertTextEquals("")
500500
}
501+
502+
@Test
503+
fun displaysCorrectTextOnQuestionnaireViewItemAnswerUpdate() {
504+
val questionnaireViewItem =
505+
QuestionnaireViewItem(
506+
Questionnaire.QuestionnaireItemComponent().apply { text = "Weight" },
507+
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
508+
answer =
509+
listOf(
510+
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
511+
value = DecimalType("124.5")
512+
},
513+
)
514+
},
515+
validationResult = NotValidated,
516+
answersChangedCallback = { _, _, _, _ -> },
517+
)
518+
519+
viewHolder.bind(questionnaireViewItem)
520+
composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("124.5")
521+
522+
val questionnaireViewItemUpdatedAnswer =
523+
questionnaireViewItem.copy(
524+
questionnaireResponseItem =
525+
questionnaireViewItem.getQuestionnaireResponseItem().apply {
526+
answer =
527+
listOf(
528+
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
529+
value = DecimalType("124.578")
530+
},
531+
)
532+
},
533+
)
534+
viewHolder.bind(questionnaireViewItemUpdatedAnswer)
535+
536+
composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("124.578")
537+
}
501538
}

datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextIntegerViewHolderFactoryInstrumentedTest.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,4 +431,41 @@ class EditTextIntegerViewHolderFactoryInstrumentedTest {
431431
.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG, useUnmergedTree = true)
432432
.assertTextEquals("")
433433
}
434+
435+
@Test
436+
fun displaysCorrectTextOnQuestionnaireViewItemAnswerUpdate() {
437+
val questionnaireViewItem =
438+
QuestionnaireViewItem(
439+
Questionnaire.QuestionnaireItemComponent().apply { text = "Age" },
440+
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
441+
answer =
442+
listOf(
443+
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
444+
value = IntegerType("12")
445+
},
446+
)
447+
},
448+
validationResult = NotValidated,
449+
answersChangedCallback = { _, _, _, _ -> },
450+
)
451+
452+
viewHolder.bind(questionnaireViewItem)
453+
composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("12")
454+
455+
val questionnaireViewItemUpdatedAnswer =
456+
questionnaireViewItem.copy(
457+
questionnaireResponseItem =
458+
questionnaireViewItem.getQuestionnaireResponseItem().apply {
459+
answer =
460+
listOf(
461+
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
462+
value = IntegerType("120")
463+
},
464+
)
465+
},
466+
)
467+
viewHolder.bind(questionnaireViewItemUpdatedAnswer)
468+
469+
composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("120")
470+
}
434471
}

datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextSingleLineViewHolderFactoryInstrumentedTest.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,4 +378,41 @@ class EditTextSingleLineViewHolderFactoryInstrumentedTest {
378378

379379
composeTestRule.onNodeWithText("Optional").assertDoesNotExist()
380380
}
381+
382+
@Test
383+
fun displaysCorrectTextOnQuestionnaireViewItemAnswerUpdate() {
384+
val questionnaireViewItem =
385+
QuestionnaireViewItem(
386+
Questionnaire.QuestionnaireItemComponent().apply { text = "First Name" },
387+
QuestionnaireResponse.QuestionnaireResponseItemComponent().apply {
388+
answer =
389+
listOf(
390+
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
391+
value = StringType("Jane")
392+
},
393+
)
394+
},
395+
validationResult = NotValidated,
396+
answersChangedCallback = { _, _, _, _ -> },
397+
)
398+
399+
viewHolder.bind(questionnaireViewItem)
400+
composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("Jane")
401+
402+
val questionnaireViewItemUpdatedAnswer =
403+
questionnaireViewItem.copy(
404+
questionnaireResponseItem =
405+
questionnaireViewItem.getQuestionnaireResponseItem().apply {
406+
answer =
407+
listOf(
408+
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply {
409+
value = StringType("Janette")
410+
},
411+
)
412+
},
413+
)
414+
viewHolder.bind(questionnaireViewItemUpdatedAnswer)
415+
416+
composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("Janette")
417+
}
381418
}

datacapture/src/main/java/com/google/android/fhir/datacapture/views/QuestionnaireViewItem.kt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,4 +267,43 @@ data class QuestionnaireViewItem(
267267
}
268268
return validationResult == other.validationResult
269269
}
270+
271+
override fun equals(other: Any?): Boolean {
272+
if (this === other) return true
273+
if (javaClass != other?.javaClass) return false
274+
275+
other as QuestionnaireViewItem
276+
277+
// Structural equality
278+
if (isHelpCardOpen != other.isHelpCardOpen) return false
279+
if (questionnaireItem != other.questionnaireItem) return false
280+
if (questionnaireResponseItem != other.questionnaireResponseItem) return false
281+
if (validationResult != other.validationResult) return false
282+
if (answersChangedCallback != other.answersChangedCallback) return false
283+
if (enabledAnswerOptions != other.enabledAnswerOptions) return false
284+
if (minAnswerValue != other.minAnswerValue) return false
285+
if (maxAnswerValue != other.maxAnswerValue) return false
286+
if (draftAnswer != other.draftAnswer) return false
287+
if (enabledDisplayItems != other.enabledDisplayItems) return false
288+
if (questionViewTextConfiguration != other.questionViewTextConfiguration) return false
289+
if (helpCardStateChangedCallback != other.helpCardStateChangedCallback) return false
290+
291+
return hasTheSameResponse(other)
292+
}
293+
294+
override fun hashCode(): Int {
295+
var result = isHelpCardOpen.hashCode()
296+
result = 31 * result + questionnaireItem.hashCode()
297+
result = 31 * result + questionnaireResponseItem.hashCode()
298+
result = 31 * result + validationResult.hashCode()
299+
result = 31 * result + answersChangedCallback.hashCode()
300+
result = 31 * result + enabledAnswerOptions.hashCode()
301+
result = 31 * result + (minAnswerValue?.hashCode() ?: 0)
302+
result = 31 * result + (maxAnswerValue?.hashCode() ?: 0)
303+
result = 31 * result + (draftAnswer?.hashCode() ?: 0)
304+
result = 31 * result + enabledDisplayItems.hashCode()
305+
result = 31 * result + questionViewTextConfiguration.hashCode()
306+
result = 31 * result + helpCardStateChangedCallback.hashCode()
307+
return result
308+
}
270309
}

0 commit comments

Comments
 (0)