diff --git a/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt b/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt index 0b60fdfb25e..a0e85ac6b74 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt @@ -5,7 +5,6 @@ import org.dhis2.usescases.datasets.DataSetTest import org.dhis2.usescases.enrollment.EnrollmentTest import org.dhis2.usescases.event.EventTest import org.dhis2.usescases.filters.FilterTest -import org.dhis2.usescases.form.FormTest import org.dhis2.usescases.jira.JiraTest import org.dhis2.usescases.login.LoginTest import org.dhis2.usescases.main.MainTest @@ -15,6 +14,7 @@ import org.dhis2.usescases.searchte.SearchTETest import org.dhis2.usescases.settings.SettingsTest import org.dhis2.usescases.sync.SyncActivityTest import org.dhis2.usescases.teidashboard.TeiDashboardTest +import org.dhis2.usescases.teidashboard.dialogs.scheduling.SchedulingDialogUiTest import org.junit.runner.RunWith import org.junit.runners.Suite @@ -33,6 +33,7 @@ import org.junit.runners.Suite SearchTETest::class, SettingsTest::class, SyncActivityTest::class, - TeiDashboardTest::class + TeiDashboardTest::class, + SchedulingDialogUiTest::class, ) class UseCaseTestsSuite diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataContracts.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataContracts.kt index ea2116b6fad..a3bd60f3d11 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataContracts.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataContracts.kt @@ -21,7 +21,9 @@ import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstance class TEIDataContracts { interface View : AbstractActivityContracts.View { fun setEvents(events: List, canAddEvents: Boolean) - fun displayGenerateEvent(): Consumer + fun displayScheduleEvent() + + fun showDialogCloseProgram() fun areEventsCompleted(): Consumer> fun enrollmentCompleted(): Consumer fun switchFollowUp(followUp: Boolean) diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataFragment.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataFragment.kt index ec89c857695..1906e46a9e5 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataFragment.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataFragment.kt @@ -391,28 +391,23 @@ class TEIDataFragment : FragmentGlobalAbstract(), TEIDataContracts.View { } } - override fun displayGenerateEvent(): Consumer { - return Consumer { programStageModel: ProgramStage -> - programStageFromEvent = programStageModel - if (programStageModel.displayGenerateEventBox() == true || programStageModel.allowGenerateNextVisit() == true) { - SchedulingDialog( - enrollment = dashboardModel.currentEnrollment, - programStages = eventAdapter?.currentList - ?.filter { it.type == EventViewModelType.STAGE && it.canAddNewEvent } - ?.mapNotNull { it.stage } - ?: emptyList(), - onScheduled = { - showToast(getString(R.string.event_created)) - binding.isGrouping?.let { - presenter.onGroupingChanged(it) - } - }, - ).show(childFragmentManager, SCHEDULING_DIALOG) - } else if (java.lang.Boolean.TRUE == programStageModel.remindCompleted()) showDialogCloseProgram() - } + override fun displayScheduleEvent() { + SchedulingDialog( + enrollment = dashboardModel.currentEnrollment, + programStages = eventAdapter?.currentList + ?.filter { it.type == EventViewModelType.STAGE && it.canAddNewEvent } + ?.mapNotNull { it.stage } + ?: emptyList(), + onScheduled = { + showToast(getString(R.string.event_created)) + binding.isGrouping?.let { + presenter.onGroupingChanged(it) + } + }, + ).show(childFragmentManager, SCHEDULING_DIALOG) } - private fun showDialogCloseProgram() { + override fun showDialogCloseProgram() { dialog = CustomDialog( requireContext(), getString(R.string.event_completed), diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataPresenter.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataPresenter.kt index cb65dff8a32..3698d102bb2 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/teidata/TEIDataPresenter.kt @@ -312,7 +312,13 @@ class TEIDataPresenter( dashboardRepository.displayGenerateEvent(eventUid) .subscribeOn(schedulerProvider.io()) .observeOn(schedulerProvider.ui()) - .subscribe(view.displayGenerateEvent(), Timber.Forest::d), + .subscribe({ programStage -> + if (programStage.displayGenerateEventBox() == true || programStage.allowGenerateNextVisit() == true) { + view.displayScheduleEvent() + } else if (programStage.remindCompleted() == true) { + view.showDialogCloseProgram() + } + }, Timber.Forest::d), ) } diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/data/TeiDataPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/data/TeiDataPresenterTest.kt index a0e3d67478b..d7ae9200aa5 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/data/TeiDataPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/data/TeiDataPresenterTest.kt @@ -1,5 +1,6 @@ package org.dhis2.usescases.teiDashboard.dashboardfragments.data +import io.reactivex.Observable import io.reactivex.Single import org.dhis2.commons.data.EventViewModel import org.dhis2.commons.data.EventViewModelType @@ -143,6 +144,36 @@ class TeiDataPresenterTest { assert(stage.applyHideStage(true) == stage) } + @Test + fun `Should display schedule events dialogs when configured`() { + val programStage = ProgramStage.builder() + .uid("programStage") + .allowGenerateNextVisit(true) + .displayGenerateEventBox(true) + .remindCompleted(false) + .build() + whenever( + dashboardRepository.displayGenerateEvent("eventUid"), + ) doReturn Observable.just(programStage) + teiDataPresenter.displayGenerateEvent("eventUid") + verify(view).displayScheduleEvent() + } + + @Test + fun `Should display close program dialogs when configured`() { + val programStage = ProgramStage.builder() + .uid("programStage") + .allowGenerateNextVisit(false) + .displayGenerateEventBox(false) + .remindCompleted(true) + .build() + whenever( + dashboardRepository.displayGenerateEvent("eventUid"), + ) doReturn Observable.just(programStage) + teiDataPresenter.displayGenerateEvent("eventUid") + verify(view).showDialogCloseProgram() + } + private fun fakeModel(eventCount: Int = 0, type: EventViewModelType = EventViewModelType.STAGE): EventViewModel { val dataElements = mutableListOf>() dataElements.add(