1
1
package org.dhis2.form.data
2
2
3
- import io.reactivex.Single
3
+ import org.dhis2.form.data.metadata.EnrollmentConfiguration
4
4
import org.dhis2.form.model.EnrollmentMode
5
5
import org.dhis2.form.model.SectionUiModelImpl
6
- import org.dhis2.form.ui.FieldViewModelFactory
6
+ import org.dhis2.form.ui.FieldViewModelFactoryImpl
7
+ import org.dhis2.form.ui.provider.AutoCompleteProvider
7
8
import org.dhis2.form.ui.provider.DisplayNameProvider
8
9
import org.dhis2.form.ui.provider.EnrollmentFormLabelsProvider
10
+ import org.dhis2.form.ui.provider.HintProvider
11
+ import org.dhis2.form.ui.provider.KeyboardActionProvider
12
+ import org.dhis2.form.ui.provider.LayoutProvider
9
13
import org.dhis2.form.ui.provider.LegendValueProvider
14
+ import org.dhis2.form.ui.provider.UiEventTypesProvider
15
+ import org.dhis2.form.ui.provider.UiStyleProvider
10
16
import org.dhis2.form.ui.validation.FieldErrorMessageProvider
11
- import org.hisp.dhis.android.core.D2
17
+ import org.hisp.dhis.android.core.common.FeatureType
18
+ import org.hisp.dhis.android.core.common.ObjectStyle
19
+ import org.hisp.dhis.android.core.common.ObjectWithUid
20
+ import org.hisp.dhis.android.core.common.ValueType
12
21
import org.hisp.dhis.android.core.enrollment.Enrollment
13
22
import org.hisp.dhis.android.core.program.Program
23
+ import org.hisp.dhis.android.core.program.ProgramTrackedEntityAttribute
24
+ import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttribute
25
+ import org.hisp.dhis.android.core.trackedentity.TrackedEntityType
14
26
import org.junit.Assert.assertTrue
27
+ import org.junit.Before
15
28
import org.junit.Test
16
- import org.mockito.Mockito
17
29
import org.mockito.kotlin.any
18
30
import org.mockito.kotlin.doReturn
19
31
import org.mockito.kotlin.mock
20
32
import org.mockito.kotlin.whenever
33
+ import java.util.Date
21
34
22
35
class FormRepositoryIntegrationTest {
23
36
private val rulesUtilsProvider: RulesUtilsProvider = mock()
24
37
private val ruleEngineRepository: RuleEngineRepository = mock()
25
38
private val formValueStore: FormValueStore = mock()
26
39
private val fieldErrorMessageProvider: FieldErrorMessageProvider = mock()
27
- private val displayNameProvider: DisplayNameProvider = mock()
28
- private val legendValueProvider: LegendValueProvider = mock()
29
- private val fieldViewModelFactory: FieldViewModelFactory = mock()
30
- private val enrollmentUid = " enrollmentUid"
31
- private val d2: D2 = Mockito .mock(D2 ::class .java, Mockito .RETURNS_DEEP_STUBS )
32
- private val enrollmentFormLabelsProvider: EnrollmentFormLabelsProvider = mock()
40
+ private val conf: EnrollmentConfiguration = mock()
41
+ private val enrollmentFormLabelsProvider: EnrollmentFormLabelsProvider = mock {
42
+ on { provideEnrollmentOrgUnitLabel() } doReturn " OrgUnit label"
43
+ }
44
+
45
+ private val program: Program = mock {
46
+ on { description() } doReturn " program description"
47
+ on { enrollmentDateLabel() } doReturn " enrollment date label"
48
+ on { selectEnrollmentDatesInFuture() } doReturn false
49
+ on { displayIncidentDate() } doReturn false
50
+ on { access() } doReturn mock()
51
+ on { access().data() } doReturn mock()
52
+ on { access().data().write() } doReturn true
53
+ on { featureType() } doReturn FeatureType .NONE
54
+ }
55
+
56
+ private val teType: TrackedEntityType = mock {
57
+ on { access() } doReturn mock()
58
+ on { access().data() } doReturn mock()
59
+ on { access().data().write() } doReturn true
60
+ on { featureType() } doReturn FeatureType .NONE
61
+ }
62
+
63
+ @Before
64
+ fun setUp () {
65
+ whenever(conf.sections()) doReturn emptyList()
66
+ val programAttribute: ProgramTrackedEntityAttribute = mock {
67
+ on { trackedEntityAttribute() } doReturn ObjectWithUid .create(" teAttributeUid" )
68
+ on { mandatory() } doReturn false
69
+ }
70
+ whenever(conf.programAttributes()) doReturn listOf (programAttribute)
71
+ val teAttribute: TrackedEntityAttribute = mock {
72
+ on { uid() } doReturn " teAttributeUid"
73
+ on { valueType() } doReturn ValueType .TEXT
74
+ on { optionSet() } doReturn null
75
+ on { generated() } doReturn false
76
+ on { style() } doReturn ObjectStyle .builder().build()
77
+ on { fieldMask() } doReturn null
78
+ }
79
+ whenever(conf.trackedEntityAttribute(" teAttributeUid" )) doReturn teAttribute
80
+ whenever(conf.attributeValue(any())) doReturn null
81
+ whenever(conf.conflicts()) doReturn emptyList()
82
+ whenever(conf.program()) doReturn program
83
+ whenever(conf.trackedEntityType()) doReturn teType
84
+ whenever(conf.captureOrgUnitsCount()) doReturn 1
85
+
86
+ whenever(enrollmentFormLabelsProvider.provideSingleSectionLabel()) doReturn " single section label"
87
+ }
88
+
89
+ @Test
90
+ fun shouldOpenEnrollmentDetailSectionIfIsNewAndNotCompleted () {
91
+ mockUncompletedEnrollment()
92
+ whenever(conf.disableCollapsableSectionsInProgram(any())) doReturn false
93
+
94
+ val repository = mockFormRepository()
95
+
96
+ val fields = repository.fetchFormItems()
97
+ assertTrue((fields.first { it.isSection() } as SectionUiModelImpl ).isOpen == true )
98
+ }
99
+
100
+ @Test
101
+ fun shouldOpenEnrollmentDetailSectionIfIsNewAndCompleted () {
102
+ mockCompletedEnrollment()
103
+ whenever(conf.disableCollapsableSectionsInProgram(any())) doReturn false
104
+
105
+ val repository = mockFormRepository(EnrollmentMode .NEW )
106
+
107
+ val fields = repository.fetchFormItems()
108
+ assertTrue((fields.first { it.isSection() } as SectionUiModelImpl ).isOpen == true )
109
+ }
110
+
111
+ @Test
112
+ fun shouldOpenEnrollmentDetailSectionIfNotCompleted () {
113
+ mockUncompletedEnrollment()
114
+ whenever(conf.disableCollapsableSectionsInProgram(any())) doReturn false
115
+
116
+ val repository = mockFormRepository(EnrollmentMode .CHECK )
117
+
118
+ val fields = repository.fetchFormItems()
119
+ assertTrue((fields.first { it.isSection() } as SectionUiModelImpl ).isOpen == true )
120
+ }
33
121
34
122
@Test
35
- fun shouldOpenEnrollmentDetailSection () {
123
+ fun shouldNotOpenEnrollmentDetailSectionIfCompleted () {
124
+ mockCompletedEnrollment()
125
+ whenever(conf.disableCollapsableSectionsInProgram(any())) doReturn false
126
+
127
+ val repository = mockFormRepository(EnrollmentMode .CHECK )
128
+
129
+ val fields = repository.fetchFormItems()
130
+ assertTrue(
131
+ (fields.filter { it.isSection() }[1 ] as SectionUiModelImpl ).isOpen == true ,
132
+ )
133
+ }
134
+
135
+ private fun mockUncompletedEnrollment () {
36
136
val enrollment: Enrollment = mock {
137
+ on { enrollmentDate() } doReturn null
138
+ on { organisationUnit() } doReturn " orgUnitUid"
37
139
}
140
+ whenever(conf.enrollment()) doReturn enrollment
141
+ }
38
142
39
- val program: Program = mock {
40
- on { uid() } doReturn " programUid"
143
+ private fun mockCompletedEnrollment () {
144
+ val enrollment: Enrollment = mock {
145
+ on { enrollmentDate() } doReturn Date ()
146
+ on { organisationUnit() } doReturn " orgUnitUid"
41
147
}
148
+ whenever(conf.enrollment()) doReturn enrollment
149
+ }
150
+
151
+ private fun mockFormRepository (enrollmentMode : EnrollmentMode = EnrollmentMode .NEW ): FormRepositoryImpl {
152
+ val styleProvider: UiStyleProvider = mock()
153
+ val layoutProvider: LayoutProvider = mock()
154
+ val hintProvider: HintProvider = mock()
155
+ val displayNameProvider: DisplayNameProvider = mock()
156
+ val uiEventTypesProvider: UiEventTypesProvider = mock()
157
+ val keyboardActionProvider: KeyboardActionProvider = mock()
158
+ val legendValueProvider: LegendValueProvider = mock()
159
+ val autoCompleteProvider: AutoCompleteProvider = mock()
42
160
43
- whenever(d2.enrollmentModule().enrollments().uid(" enrollmentUid" )) doReturn mock()
44
- whenever(
45
- d2.enrollmentModule().enrollments().uid(" enrollmentUid" ).blockingGet(),
46
- ) doReturn enrollment
47
- whenever(d2.programModule().programs().uid(any()).get()) doReturn Single .just(program)
48
- whenever(d2.programModule().programSections().byProgramUid()) doReturn mock()
49
- whenever(d2.programModule().programSections().byProgramUid().eq(any())) doReturn mock()
50
- whenever(
51
- d2.programModule().programSections().byProgramUid().eq(any()).withAttributes(),
52
- ) doReturn mock()
53
- whenever(
54
- d2.programModule().programSections().byProgramUid().eq(any()).withAttributes().get(),
55
- ) doReturn Single .just(mockedProgramSections)
161
+ val fieldFactory = FieldViewModelFactoryImpl (
162
+ false ,
163
+ styleProvider,
164
+ layoutProvider,
165
+ hintProvider,
166
+ displayNameProvider,
167
+ uiEventTypesProvider,
168
+ keyboardActionProvider,
169
+ legendValueProvider,
170
+ autoCompleteProvider,
171
+ )
56
172
57
173
val dataEntryRepository = EnrollmentRepository (
58
- fieldViewModelFactory,
59
- enrollmentUid,
60
- d2,
61
- EnrollmentMode .NEW ,
174
+ fieldFactory,
175
+ conf,
176
+ enrollmentMode,
62
177
enrollmentFormLabelsProvider,
63
178
)
64
179
@@ -72,12 +187,6 @@ class FormRepositoryIntegrationTest {
72
187
legendValueProvider,
73
188
false ,
74
189
)
75
-
76
- whenever(d2.programModule())
77
-
78
- val fields = repository.fetchFormItems()
79
- assertTrue((fields.first { it.isSection() } as SectionUiModelImpl ).isOpen == true )
190
+ return repository
80
191
}
81
192
}
82
-
83
- const val mockedProgramSections = listOf ()
0 commit comments