diff --git a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextDecimalViewHolderFactoryInstrumentedTest.kt b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextDecimalViewHolderFactoryInstrumentedTest.kt index ad201e7635..d0da5f8cf7 100644 --- a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextDecimalViewHolderFactoryInstrumentedTest.kt +++ b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextDecimalViewHolderFactoryInstrumentedTest.kt @@ -498,4 +498,41 @@ class EditTextDecimalViewHolderFactoryInstrumentedTest { .onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG, useUnmergedTree = true) .assertTextEquals("") } + + @Test + fun displaysCorrectTextOnQuestionnaireViewItemAnswerUpdate() { + val questionnaireViewItem = + QuestionnaireViewItem( + Questionnaire.QuestionnaireItemComponent().apply { text = "Weight" }, + QuestionnaireResponse.QuestionnaireResponseItemComponent().apply { + answer = + listOf( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply { + value = DecimalType("124.5") + }, + ) + }, + validationResult = NotValidated, + answersChangedCallback = { _, _, _, _ -> }, + ) + + viewHolder.bind(questionnaireViewItem) + composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("124.5") + + val questionnaireViewItemUpdatedAnswer = + questionnaireViewItem.copy( + questionnaireResponseItem = + questionnaireViewItem.getQuestionnaireResponseItem().apply { + answer = + listOf( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply { + value = DecimalType("124.578") + }, + ) + }, + ) + viewHolder.bind(questionnaireViewItemUpdatedAnswer) + + composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("124.578") + } } diff --git a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextIntegerViewHolderFactoryInstrumentedTest.kt b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextIntegerViewHolderFactoryInstrumentedTest.kt index 11abebf1d5..f59f11d041 100644 --- a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextIntegerViewHolderFactoryInstrumentedTest.kt +++ b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextIntegerViewHolderFactoryInstrumentedTest.kt @@ -431,4 +431,41 @@ class EditTextIntegerViewHolderFactoryInstrumentedTest { .onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG, useUnmergedTree = true) .assertTextEquals("") } + + @Test + fun displaysCorrectTextOnQuestionnaireViewItemAnswerUpdate() { + val questionnaireViewItem = + QuestionnaireViewItem( + Questionnaire.QuestionnaireItemComponent().apply { text = "Age" }, + QuestionnaireResponse.QuestionnaireResponseItemComponent().apply { + answer = + listOf( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply { + value = IntegerType("12") + }, + ) + }, + validationResult = NotValidated, + answersChangedCallback = { _, _, _, _ -> }, + ) + + viewHolder.bind(questionnaireViewItem) + composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("12") + + val questionnaireViewItemUpdatedAnswer = + questionnaireViewItem.copy( + questionnaireResponseItem = + questionnaireViewItem.getQuestionnaireResponseItem().apply { + answer = + listOf( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply { + value = IntegerType("120") + }, + ) + }, + ) + viewHolder.bind(questionnaireViewItemUpdatedAnswer) + + composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("120") + } } diff --git a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextSingleLineViewHolderFactoryInstrumentedTest.kt b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextSingleLineViewHolderFactoryInstrumentedTest.kt index d4d1802de2..2617201870 100644 --- a/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextSingleLineViewHolderFactoryInstrumentedTest.kt +++ b/datacapture/src/androidTest/java/com/google/android/fhir/datacapture/test/views/EditTextSingleLineViewHolderFactoryInstrumentedTest.kt @@ -378,4 +378,41 @@ class EditTextSingleLineViewHolderFactoryInstrumentedTest { composeTestRule.onNodeWithText("Optional").assertDoesNotExist() } + + @Test + fun displaysCorrectTextOnQuestionnaireViewItemAnswerUpdate() { + val questionnaireViewItem = + QuestionnaireViewItem( + Questionnaire.QuestionnaireItemComponent().apply { text = "First Name" }, + QuestionnaireResponse.QuestionnaireResponseItemComponent().apply { + answer = + listOf( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply { + value = StringType("Jane") + }, + ) + }, + validationResult = NotValidated, + answersChangedCallback = { _, _, _, _ -> }, + ) + + viewHolder.bind(questionnaireViewItem) + composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("Jane") + + val questionnaireViewItemUpdatedAnswer = + questionnaireViewItem.copy( + questionnaireResponseItem = + questionnaireViewItem.getQuestionnaireResponseItem().apply { + answer = + listOf( + QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent().apply { + value = StringType("Janette") + }, + ) + }, + ) + viewHolder.bind(questionnaireViewItemUpdatedAnswer) + + composeTestRule.onNodeWithTag(EDIT_TEXT_FIELD_TEST_TAG).assertTextEquals("Janette") + } } diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/views/QuestionnaireViewItem.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/views/QuestionnaireViewItem.kt index acb7b55777..efc7c3d9e5 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/views/QuestionnaireViewItem.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/views/QuestionnaireViewItem.kt @@ -267,4 +267,43 @@ data class QuestionnaireViewItem( } return validationResult == other.validationResult } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as QuestionnaireViewItem + + // Structural equality + if (isHelpCardOpen != other.isHelpCardOpen) return false + if (questionnaireItem != other.questionnaireItem) return false + if (questionnaireResponseItem != other.questionnaireResponseItem) return false + if (validationResult != other.validationResult) return false + if (answersChangedCallback != other.answersChangedCallback) return false + if (enabledAnswerOptions != other.enabledAnswerOptions) return false + if (minAnswerValue != other.minAnswerValue) return false + if (maxAnswerValue != other.maxAnswerValue) return false + if (draftAnswer != other.draftAnswer) return false + if (enabledDisplayItems != other.enabledDisplayItems) return false + if (questionViewTextConfiguration != other.questionViewTextConfiguration) return false + if (helpCardStateChangedCallback != other.helpCardStateChangedCallback) return false + + return hasTheSameResponse(other) + } + + override fun hashCode(): Int { + var result = isHelpCardOpen.hashCode() + result = 31 * result + questionnaireItem.hashCode() + result = 31 * result + questionnaireResponseItem.hashCode() + result = 31 * result + validationResult.hashCode() + result = 31 * result + answersChangedCallback.hashCode() + result = 31 * result + enabledAnswerOptions.hashCode() + result = 31 * result + (minAnswerValue?.hashCode() ?: 0) + result = 31 * result + (maxAnswerValue?.hashCode() ?: 0) + result = 31 * result + (draftAnswer?.hashCode() ?: 0) + result = 31 * result + enabledDisplayItems.hashCode() + result = 31 * result + questionViewTextConfiguration.hashCode() + result = 31 * result + helpCardStateChangedCallback.hashCode() + return result + } }