diff --git a/app/src/main/java/org/simple/clinic/medicalhistory/ui/DiagnosisContainer.kt b/app/src/main/java/org/simple/clinic/medicalhistory/ui/DiagnosisContainer.kt index 03710820dff..a67539ee1ac 100644 --- a/app/src/main/java/org/simple/clinic/medicalhistory/ui/DiagnosisContainer.kt +++ b/app/src/main/java/org/simple/clinic/medicalhistory/ui/DiagnosisContainer.kt @@ -21,7 +21,8 @@ fun DiagnosisContainer( hypertensionAnswer: Answer?, diabetesAnswer: Answer?, showDiabetesDiagnosisView: Boolean, - isScreeningFeatureEnabled: Boolean, + showHypertensionSuspectedOption: Boolean, + showDiabetesSuspectedOption: Boolean, modifier: Modifier = Modifier, onAnswerChange: (MedicalHistoryQuestion, Answer) -> Unit, ) { @@ -31,7 +32,13 @@ fun DiagnosisContainer( .padding(dimensionResource(R.dimen.spacing_16)) ) { - val options = if (isScreeningFeatureEnabled) { + val hypertensionDiagnosisOptions = if (showHypertensionSuspectedOption) { + listOf(Answer.Yes, Answer.No, Answer.Suspected) + } else { + listOf(Answer.Yes, Answer.No) + } + + val diabetesDiagnosisOptions = if (showDiabetesSuspectedOption) { listOf(Answer.Yes, Answer.No, Answer.Suspected) } else { listOf(Answer.Yes, Answer.No) @@ -40,7 +47,7 @@ fun DiagnosisContainer( MedicalHistoryDiagnosisQuestionItem( header = stringResource(R.string.medicalhistorysummaryview_hypertension_diagnosis), question = MedicalHistoryQuestion.DiagnosedWithHypertension, - options = options, + options = hypertensionDiagnosisOptions, selectedAnswer = hypertensionAnswer, onAnswerChange = onAnswerChange ) @@ -56,7 +63,7 @@ fun DiagnosisContainer( MedicalHistoryDiagnosisQuestionItem( header = stringResource(R.string.medicalhistorysummaryview_diabetes_diagnosis), question = MedicalHistoryQuestion.DiagnosedWithDiabetes, - options = options, + options = diabetesDiagnosisOptions, selectedAnswer = diabetesAnswer, onAnswerChange = onAnswerChange ) @@ -73,7 +80,8 @@ fun DiagnosisContainerPreview(modifier: Modifier = Modifier) { hypertensionAnswer = Answer.Yes, diabetesAnswer = Answer.No, showDiabetesDiagnosisView = true, - isScreeningFeatureEnabled = true, + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true, modifier = modifier, onAnswerChange = { _, _ -> } ) diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffect.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffect.kt index 8311e8b4dc2..9908b962d5a 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffect.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffect.kt @@ -9,4 +9,6 @@ data class LoadMedicalHistory(val patientUUID: UUID) : MedicalHistorySummaryEffe data object LoadCurrentFacility : MedicalHistorySummaryEffect() +data class DetermineSuspectedOptionVisibility(val medicalHistory: MedicalHistory) : MedicalHistorySummaryEffect() + data class SaveUpdatedMedicalHistory(val medicalHistory: MedicalHistory) : MedicalHistorySummaryEffect() diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandler.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandler.kt index 5d5770bc1e5..1460952b03b 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandler.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandler.kt @@ -4,6 +4,8 @@ import com.spotify.mobius.rx2.RxMobius import dagger.Lazy import io.reactivex.ObservableTransformer import org.simple.clinic.facility.Facility +import org.simple.clinic.feature.Feature +import org.simple.clinic.feature.Features import org.simple.clinic.medicalhistory.MedicalHistory import org.simple.clinic.medicalhistory.MedicalHistoryRepository import org.simple.clinic.util.UtcClock @@ -17,7 +19,8 @@ class MedicalHistorySummaryEffectHandler @Inject constructor( private val medicalHistoryRepository: MedicalHistoryRepository, private val clock: UtcClock, private val currentFacility: Lazy, - private val uuidGenerator: UuidGenerator + private val uuidGenerator: UuidGenerator, + private val features: Features, ) { fun build(): ObservableTransformer { @@ -25,6 +28,7 @@ class MedicalHistorySummaryEffectHandler @Inject constructor( .subtypeEffectHandler() .addTransformer(LoadMedicalHistory::class.java, loadMedicalHistory()) .addTransformer(LoadCurrentFacility::class.java, loadCurrentFacility()) + .addTransformer(DetermineSuspectedOptionVisibility::class.java, determineSuspectedOptionVisibility()) .addConsumer(SaveUpdatedMedicalHistory::class.java, { updateMedicalHistory(it.medicalHistory) }, schedulers.io()) .build() } @@ -55,4 +59,39 @@ class MedicalHistorySummaryEffectHandler @Inject constructor( private fun updateMedicalHistory(medicalHistory: MedicalHistory) { medicalHistoryRepository.save(medicalHistory, Instant.now(clock)) } + + private fun determineSuspectedOptionVisibility(): + ObservableTransformer { + return ObservableTransformer { effects -> + effects + .observeOn(schedulers.io()) + .map { effect -> + val medicalHistory = effect.medicalHistory + + val isScreeningFeatureEnabled = features.isEnabled(Feature.Screening) + + val showHypertensionSuspectedOption = shouldShowSuspectedOption( + isScreeningFeatureEnabled, + medicalHistory.diagnosedWithHypertension.isAnsweredWithYesOrNo, + ) + + val showDiabetesSuspectedOption = shouldShowSuspectedOption( + isScreeningFeatureEnabled, + medicalHistory.diagnosedWithDiabetes.isAnsweredWithYesOrNo, + ) + + SuspectedOptionVisibilityDetermined( + showHypertensionSuspectedOption = showHypertensionSuspectedOption, + showDiabetesSuspectedOption = showDiabetesSuspectedOption + ) + } + } + } + + private fun shouldShowSuspectedOption( + isScreeningEnabled: Boolean, + hasAnswered: Boolean, + ): Boolean { + return isScreeningEnabled && !hasAnswered + } } diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEvent.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEvent.kt index 7858d0e5492..bb9740a86e7 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEvent.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEvent.kt @@ -18,3 +18,8 @@ data class SummaryMedicalHistoryAnswerToggled( data class MedicalHistoryLoaded(val medicalHistory: MedicalHistory) : MedicalHistorySummaryEvent() data class CurrentFacilityLoaded(val facility: Facility) : MedicalHistorySummaryEvent() + +data class SuspectedOptionVisibilityDetermined( + val showHypertensionSuspectedOption: Boolean, + val showDiabetesSuspectedOption: Boolean +) : MedicalHistorySummaryEvent() diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryModel.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryModel.kt index 6fe53b58fab..f33dd8e34c9 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryModel.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryModel.kt @@ -16,6 +16,9 @@ data class MedicalHistorySummaryModel( val currentFacility: Facility? = null, val showIsSmokingQuestion: Boolean, val showSmokelessTobaccoQuestion: Boolean, + val showHypertensionSuspectedOption: Boolean, + val showDiabetesSuspectedOption: Boolean, + val hasDeterminedSuspectedOptionVisibility: Boolean ) : Parcelable, PatientSummaryChildModel { companion object { @@ -26,7 +29,10 @@ data class MedicalHistorySummaryModel( ): MedicalHistorySummaryModel = MedicalHistorySummaryModel( patientUuid = patientUuid, showIsSmokingQuestion = showIsSmokingQuestion, - showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion + showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion, + showHypertensionSuspectedOption = false, + showDiabetesSuspectedOption = false, + hasDeterminedSuspectedOptionVisibility = false, ) } @@ -51,4 +57,15 @@ data class MedicalHistorySummaryModel( fun answerToggled(question: MedicalHistoryQuestion, answer: Answer): MedicalHistorySummaryModel { return copy(medicalHistory = medicalHistory!!.answered(question, answer)) } + + fun diagnosisSuspectedOptionVisibilityLoaded( + showHypertensionSuspectedOption: Boolean, + showDiabetesSuspectedOption: Boolean + ): MedicalHistorySummaryModel { + return copy( + showHypertensionSuspectedOption = showHypertensionSuspectedOption, + showDiabetesSuspectedOption = showDiabetesSuspectedOption, + hasDeterminedSuspectedOptionVisibility = true + ) + } } diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUi.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUi.kt index 87d2e03f3cc..fd556fbb5e5 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUi.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUi.kt @@ -11,4 +11,6 @@ interface MedicalHistorySummaryUi { fun showSmokelessTobaccoQuestion() fun hideSmokelessTobaccoQuestion() + fun setHypertensionSuspectedOptionVisibility(visible: Boolean) + fun setDiabetesSuspectedOptionVisibility(visible: Boolean) } diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUiRenderer.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUiRenderer.kt index 0e377d26e63..d11dcfd28c8 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUiRenderer.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUiRenderer.kt @@ -16,6 +16,13 @@ class MedicalHistorySummaryUiRenderer( private val smokelessTobaccoQuestionVisibilityChangedCallback = ValueChangedCallback() + private val hypertensionSuspectedVisibilityChangedCallback = + ValueChangedCallback() + + private val diabetesSuspectedVisibilityChangedCallback = + ValueChangedCallback() + + override fun render(model: MedicalHistorySummaryModel) { if (model.hasLoadedMedicalHistory) { medicalHistoryChangedCallback.pass(model.medicalHistory!!, ui::populateMedicalHistory) @@ -40,6 +47,16 @@ class MedicalHistorySummaryUiRenderer( ui.hideSmokelessTobaccoQuestion() } } + + hypertensionSuspectedVisibilityChangedCallback.pass( + model.showHypertensionSuspectedOption, + ui::setHypertensionSuspectedOptionVisibility + ) + + diabetesSuspectedVisibilityChangedCallback.pass( + model.showDiabetesSuspectedOption, + ui::setDiabetesSuspectedOptionVisibility + ) } private fun toggleDiabetesManagementUi(diabetesManagementEnabled: Boolean) { diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdate.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdate.kt index aa332efab28..76847f39c1f 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdate.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdate.kt @@ -11,9 +11,28 @@ class MedicalHistorySummaryUpdate : Update { return when (event) { - is MedicalHistoryLoaded -> next(model.medicalHistoryLoaded(event.medicalHistory)) + is MedicalHistoryLoaded -> medicalHistoryLoaded(model, event) is SummaryMedicalHistoryAnswerToggled -> medicalHistoryAnswerToggled(model, event) is CurrentFacilityLoaded -> next(model.currentFacilityLoaded(event.facility)) + is SuspectedOptionVisibilityDetermined -> next( + model.diagnosisSuspectedOptionVisibilityLoaded( + event.showHypertensionSuspectedOption, + event.showDiabetesSuspectedOption + ) + ) + } + } + + private fun medicalHistoryLoaded( + model: MedicalHistorySummaryModel, + event: MedicalHistoryLoaded + ): Next { + val updatedModel = model.medicalHistoryLoaded(event.medicalHistory) + + return if (updatedModel.hasDeterminedSuspectedOptionVisibility) { + next(updatedModel) + } else { + next(updatedModel, DetermineSuspectedOptionVisibility(event.medicalHistory)) } } diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryView.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryView.kt index 84a355eab3a..9c914f86961 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryView.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryView.kt @@ -50,6 +50,9 @@ class MedicalHistorySummaryView( private var showSmokerQuestion by mutableStateOf(false) private var showSmokelessTobaccoQuestion by mutableStateOf(false) + private var showHypertensionSuspectedOption by mutableStateOf(false) + private var showDiabetesSuspectedOption by mutableStateOf(false) + @Inject lateinit var activity: AppCompatActivity @@ -126,7 +129,8 @@ class MedicalHistorySummaryView( diabetesManagementEnabled = diabetesManagementEnabled, showSmokerQuestion = showSmokerQuestion, showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion, - isScreeningFeatureEnabled = features.isEnabled(Feature.Screening) + showHypertensionSuspectedOption = showHypertensionSuspectedOption, + showDiabetesSuspectedOption = showDiabetesSuspectedOption ) { question, answer -> answerToggled(question, answer) } @@ -184,6 +188,14 @@ class MedicalHistorySummaryView( showSmokelessTobaccoQuestion = false } + override fun setHypertensionSuspectedOptionVisibility(visible: Boolean) { + showHypertensionSuspectedOption = visible + } + + override fun setDiabetesSuspectedOptionVisibility(visible: Boolean) { + showDiabetesSuspectedOption = visible + } + override fun registerSummaryModelUpdateCallback(callback: PatientSummaryModelUpdateCallback?) { modelUpdateCallback = callback } diff --git a/app/src/main/java/org/simple/clinic/summary/medicalhistory/ui/MedicalHistorySummary.kt b/app/src/main/java/org/simple/clinic/summary/medicalhistory/ui/MedicalHistorySummary.kt index 1ed0a47e9e8..3961892cac0 100644 --- a/app/src/main/java/org/simple/clinic/summary/medicalhistory/ui/MedicalHistorySummary.kt +++ b/app/src/main/java/org/simple/clinic/summary/medicalhistory/ui/MedicalHistorySummary.kt @@ -28,7 +28,8 @@ fun MedicalHistorySummary( diabetesManagementEnabled: Boolean, showSmokerQuestion: Boolean, showSmokelessTobaccoQuestion: Boolean, - isScreeningFeatureEnabled: Boolean, + showHypertensionSuspectedOption: Boolean, + showDiabetesSuspectedOption: Boolean, modifier: Modifier = Modifier, onAnswerChange: (MedicalHistoryQuestion, Answer) -> Unit, ) { @@ -43,7 +44,8 @@ fun MedicalHistorySummary( hypertensionAnswer = hypertensionAnswer, diabetesAnswer = diabetesAnswer, showDiabetesDiagnosisView = diabetesManagementEnabled, - isScreeningFeatureEnabled = isScreeningFeatureEnabled, + showHypertensionSuspectedOption = showHypertensionSuspectedOption, + showDiabetesSuspectedOption = showDiabetesSuspectedOption, onAnswerChange = onAnswerChange, ) @@ -82,7 +84,8 @@ private fun MedicalHistorySummaryPreview() { diabetesManagementEnabled = true, showSmokerQuestion = false, showSmokelessTobaccoQuestion = false, - isScreeningFeatureEnabled = true, + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true, onAnswerChange = { _, _ -> // no-op } @@ -105,7 +108,8 @@ private fun MedicalHistorySummaryNoDiabetesManagementPreview() { diabetesManagementEnabled = false, showSmokerQuestion = false, showSmokelessTobaccoQuestion = false, - isScreeningFeatureEnabled = true, + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true, onAnswerChange = { _, _ -> // no-op } @@ -128,7 +132,8 @@ private fun MedicalHistorySummarySmokerPreview() { diabetesManagementEnabled = true, showSmokerQuestion = true, showSmokelessTobaccoQuestion = false, - isScreeningFeatureEnabled = true, + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true, onAnswerChange = { _, _ -> // no-op } @@ -151,7 +156,8 @@ private fun MedicalHistorySummaryTobaccoUsePreview() { diabetesManagementEnabled = true, showSmokerQuestion = true, showSmokelessTobaccoQuestion = true, - isScreeningFeatureEnabled = true, + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true, onAnswerChange = { _, _ -> // no-op } diff --git a/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandlerTest.kt b/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandlerTest.kt index 836420efb89..5afd2989a6b 100644 --- a/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandlerTest.kt +++ b/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryEffectHandlerTest.kt @@ -5,11 +5,17 @@ import org.junit.Test import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.whenever +import org.simple.clinic.TestData +import org.simple.clinic.feature.Feature +import org.simple.clinic.feature.Features +import org.simple.clinic.medicalhistory.Answer import org.simple.clinic.medicalhistory.MedicalHistoryRepository import org.simple.clinic.mobius.EffectHandlerTestCase -import org.simple.clinic.util.scheduler.TestSchedulersProvider -import org.simple.clinic.TestData +import org.simple.clinic.patient.SyncStatus +import org.simple.clinic.remoteconfig.DefaultValueConfigReader +import org.simple.clinic.util.NoOpRemoteConfigService import org.simple.clinic.util.TestUtcClock +import org.simple.clinic.util.scheduler.TestSchedulersProvider import org.simple.clinic.uuid.FakeUuidGenerator import java.util.UUID @@ -19,12 +25,20 @@ class MedicalHistorySummaryEffectHandlerTest { private val medicalHistoryRepository = mock() private val clock = TestUtcClock() private val uuidGenerator = FakeUuidGenerator(uuid = UUID.fromString("e78ec5f7-6fe9-4812-a894-9e34e55c670e")) + + private val features = Features( + remoteConfigService = NoOpRemoteConfigService(DefaultValueConfigReader()), + overrides = mapOf( + Feature.Screening to true, + ) + ) private val effectHandler = MedicalHistorySummaryEffectHandler( schedulers = TestSchedulersProvider.trampoline(), medicalHistoryRepository = medicalHistoryRepository, clock = clock, currentFacility = { facility }, - uuidGenerator = uuidGenerator + uuidGenerator = uuidGenerator, + features = features, ) private val testCase = EffectHandlerTestCase(effectHandler.build()) @@ -49,4 +63,25 @@ class MedicalHistorySummaryEffectHandlerTest { // then testCase.assertOutgoingEvents(MedicalHistoryLoaded(medicalHistory)) } + + @Test + fun `when determine suspected option visibility effect is received, then determine suspected option visibility`() { + // given + val medicalHistory = TestData.medicalHistory( + uuid = uuidGenerator.v4(), + patientUuid = uuidGenerator.v4(), + diagnosedWithHypertension = Answer.Yes, + hasDiabetes = Answer.Unanswered, + syncStatus = SyncStatus.DONE + ) + + // when + testCase.dispatch(DetermineSuspectedOptionVisibility(medicalHistory = medicalHistory)) + + // then + testCase.assertOutgoingEvents(SuspectedOptionVisibilityDetermined( + showHypertensionSuspectedOption = false, + showDiabetesSuspectedOption = true + )) + } } diff --git a/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryLogicTest.kt b/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryLogicTest.kt index ccb402f62ce..f1a91fc154d 100644 --- a/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryLogicTest.kt +++ b/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryLogicTest.kt @@ -11,12 +11,13 @@ import org.junit.runner.RunWith import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import org.mockito.kotlin.verifyNoMoreInteractions import org.mockito.kotlin.whenever import org.simple.clinic.TestData import org.simple.clinic.appconfig.Country import org.simple.clinic.facility.Facility import org.simple.clinic.facility.FacilityConfig +import org.simple.clinic.feature.Feature +import org.simple.clinic.feature.Features import org.simple.clinic.medicalhistory.Answer import org.simple.clinic.medicalhistory.Answer.No import org.simple.clinic.medicalhistory.Answer.Unanswered @@ -30,8 +31,9 @@ import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.HasHadAStroke import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnDiabetesTreatment import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsOnHypertensionTreatment import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsSmoking -import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsUsingSmokelessTobacco import org.simple.clinic.medicalhistory.MedicalHistoryRepository +import org.simple.clinic.remoteconfig.DefaultValueConfigReader +import org.simple.clinic.util.NoOpRemoteConfigService import org.simple.clinic.util.TestUtcClock import org.simple.clinic.util.randomMedicalHistoryAnswer import org.simple.clinic.util.scheduler.TestSchedulersProvider @@ -83,6 +85,13 @@ class MedicalHistorySummaryLogicTest { private lateinit var testFixture: MobiusTestFixture + private val features = Features( + remoteConfigService = NoOpRemoteConfigService(DefaultValueConfigReader()), + overrides = mapOf( + Feature.Screening to true, + ) + ) + @After fun tearDown() { testFixture.dispose() @@ -101,7 +110,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).populateMedicalHistory(medicalHistory) verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -146,7 +156,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -162,7 +173,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).hideDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -182,7 +194,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -202,7 +215,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -222,7 +236,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -242,7 +257,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -262,7 +278,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -282,7 +299,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).showDiagnosisView() verify(ui).showCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -298,7 +316,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).hideDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -314,7 +333,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).hideDiagnosisView() verify(ui).showCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -330,7 +350,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).hideDiagnosisView() verify(ui).hideCurrentSmokerQuestion() verify(ui).hideSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Test @@ -346,7 +367,8 @@ class MedicalHistorySummaryLogicTest { verify(ui).hideDiagnosisView() verify(ui).showCurrentSmokerQuestion() verify(ui).showSmokelessTobaccoQuestion() - verifyNoMoreInteractions(ui) + verify(ui).setHypertensionSuspectedOptionVisibility(true) + verify(ui).setDiabetesSuspectedOptionVisibility(true) } @Suppress("unused") @@ -376,7 +398,8 @@ class MedicalHistorySummaryLogicTest { medicalHistoryRepository = medicalHistoryRepository, clock = clock, currentFacility = { facility }, - uuidGenerator = FakeUuidGenerator.fixed(medicalHistoryUuid) + uuidGenerator = FakeUuidGenerator.fixed(medicalHistoryUuid), + features = features ) val uiRenderer = MedicalHistorySummaryUiRenderer(ui) diff --git a/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdateTest.kt b/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdateTest.kt index 7cd21d09b05..b8959a14574 100644 --- a/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdateTest.kt +++ b/app/src/test/java/org/simple/clinic/summary/medicalhistory/MedicalHistorySummaryUpdateTest.kt @@ -2,6 +2,7 @@ package org.simple.clinic.summary.medicalhistory import com.spotify.mobius.test.NextMatchers.hasEffects import com.spotify.mobius.test.NextMatchers.hasModel +import com.spotify.mobius.test.NextMatchers.hasNoEffects import com.spotify.mobius.test.UpdateSpec import com.spotify.mobius.test.UpdateSpec.assertThatNext import org.junit.Test @@ -42,4 +43,71 @@ class MedicalHistorySummaryUpdateTest { hasEffects(SaveUpdatedMedicalHistory(updatedMedicalHistory)) )) } + + @Test + fun `when medical history is loaded, then update the model and determine the suspected option visibility`() { + val patientUuid = UUID.fromString("b2593f11-158f-45da-9f61-25c9024f8be7") + val medicalHistory = TestData.medicalHistory( + uuid = UUID.fromString("574b45e4-afe5-4303-9c98-57c297f0a072"), + patientUuid = patientUuid, + ) + val defaultModel = MedicalHistorySummaryModel + .create(patientUuid, showIsSmokingQuestion = true, showSmokelessTobaccoQuestion = true) + + UpdateSpec(MedicalHistorySummaryUpdate()) + .given(defaultModel) + .whenEvent(MedicalHistoryLoaded(medicalHistory)) + .then(assertThatNext( + hasModel(defaultModel.medicalHistoryLoaded(medicalHistory)), + hasEffects(DetermineSuspectedOptionVisibility(medicalHistory)) + )) + } + + @Test + fun `when medical history is loaded and suspected option visibility is already determined, then update the model`() { + val patientUuid = UUID.fromString("b2593f11-158f-45da-9f61-25c9024f8be7") + val medicalHistory = TestData.medicalHistory( + uuid = UUID.fromString("574b45e4-afe5-4303-9c98-57c297f0a072"), + patientUuid = patientUuid, + ) + val defaultModel = MedicalHistorySummaryModel + .create(patientUuid, showIsSmokingQuestion = true, showSmokelessTobaccoQuestion = true) + .diagnosisSuspectedOptionVisibilityLoaded(showHypertensionSuspectedOption = true, showDiabetesSuspectedOption = true) + + UpdateSpec(MedicalHistorySummaryUpdate()) + .given(defaultModel) + .whenEvent(MedicalHistoryLoaded(medicalHistory)) + .then(assertThatNext( + hasModel(defaultModel.medicalHistoryLoaded(medicalHistory)), + hasNoEffects() + )) + } + + @Test + fun `when suspected option visibility is determined , then update the model`() { + val patientUuid = UUID.fromString("b2593f11-158f-45da-9f61-25c9024f8be7") + val medicalHistory = TestData.medicalHistory( + uuid = UUID.fromString("574b45e4-afe5-4303-9c98-57c297f0a072"), + patientUuid = patientUuid, + ) + val medicalHistoryLoadedModel = MedicalHistorySummaryModel + .create(patientUuid, showIsSmokingQuestion = true, showSmokelessTobaccoQuestion = true) + .medicalHistoryLoaded(medicalHistory) + + UpdateSpec(MedicalHistorySummaryUpdate()) + .given(medicalHistoryLoadedModel) + .whenEvent(SuspectedOptionVisibilityDetermined( + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true + )) + .then( + assertThatNext( + hasModel(medicalHistoryLoadedModel.diagnosisSuspectedOptionVisibilityLoaded( + showHypertensionSuspectedOption = true, + showDiabetesSuspectedOption = true + )), + hasNoEffects() + ) + ) + } }