~mortenoh/+junk/dhis2-detailed-import-export

« back to all changes in this revision

Viewing changes to dhis-2/dhis-services/dhis-service-datamart-default/src/test/java/org/hisp/dhis/datamart/DataMartServiceMultiDimensionTest.java

  • Committer: larshelge at gmail
  • Date: 2009-03-03 16:46:36 UTC
  • Revision ID: larshelge@gmail.com-20090303164636-2sjlrquo7ib1gf7r
Initial check-in

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.hisp.dhis.datamart;
 
2
 
 
3
/*
 
4
 * Copyright (c) 2004-2007, University of Oslo
 
5
 * All rights reserved.
 
6
 *
 
7
 * Redistribution and use in source and binary forms, with or without
 
8
 * modification, are permitted provided that the following conditions are met:
 
9
 * * Redistributions of source code must retain the above copyright notice, this
 
10
 *   list of conditions and the following disclaimer.
 
11
 * * Redistributions in binary form must reproduce the above copyright notice,
 
12
 *   this list of conditions and the following disclaimer in the documentation
 
13
 *   and/or other materials provided with the distribution.
 
14
 * * Neither the name of the HISP project nor the names of its contributors may
 
15
 *   be used to endorse or promote products derived from this software without
 
16
 *   specific prior written permission.
 
17
 *
 
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 
19
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 
20
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 
21
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 
22
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
23
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 
24
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 
25
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
26
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 
27
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
28
 */
 
29
 
 
30
import java.util.Collection;
 
31
import java.util.Date;
 
32
import java.util.HashSet;
 
33
import java.util.Iterator;
 
34
 
 
35
import org.hisp.dhis.DhisConvenienceTest;
 
36
import org.hisp.dhis.dataelement.DataElement;
 
37
import org.hisp.dhis.dataelement.DataElementCategory;
 
38
import org.hisp.dhis.dataelement.DataElementCategoryCombo;
 
39
import org.hisp.dhis.dataelement.DataElementCategoryComboService;
 
40
import org.hisp.dhis.dataelement.DataElementCategoryOption;
 
41
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
 
42
import org.hisp.dhis.dataelement.DataElementCategoryOptionComboService;
 
43
import org.hisp.dhis.dataelement.DataElementCategoryOptionService;
 
44
import org.hisp.dhis.dataelement.DataElementCategoryService;
 
45
import org.hisp.dhis.dataelement.DataElementService;
 
46
import org.hisp.dhis.datavalue.DataValueService;
 
47
import org.hisp.dhis.expression.Expression;
 
48
import org.hisp.dhis.indicator.Indicator;
 
49
import org.hisp.dhis.indicator.IndicatorService;
 
50
import org.hisp.dhis.indicator.IndicatorType;
 
51
import org.hisp.dhis.organisationunit.OrganisationUnit;
 
52
import org.hisp.dhis.organisationunit.OrganisationUnitService;
 
53
import org.hisp.dhis.period.Period;
 
54
import org.hisp.dhis.period.PeriodService;
 
55
import org.hisp.dhis.period.PeriodType;
 
56
 
 
57
/**
 
58
 * @author Lars Helge Overland
 
59
 * @version $Id$
 
60
 */
 
61
public class DataMartServiceMultiDimensionTest
 
62
    extends DhisConvenienceTest
 
63
{
 
64
    private final String T = "true";
 
65
    private final String F = "false";
 
66
    
 
67
    private DataMartInternalProcess dataMartInternalProcess;
 
68
 
 
69
    private DataMartStore dataMartStore;
 
70
 
 
71
    private DataElementCategoryOption categoryOptionA;
 
72
    private DataElementCategoryOption categoryOptionB;
 
73
    
 
74
    private DataElementCategory categoryA;
 
75
    
 
76
    private DataElementCategoryCombo categoryComboA;
 
77
    
 
78
    private DataElementCategoryOptionCombo categoryOptionComboA;
 
79
    private DataElementCategoryOptionCombo categoryOptionComboB;  
 
80
    
 
81
    private Collection<Integer> dataElementIds;
 
82
    private Collection<Integer> indicatorIds;
 
83
    private Collection<Integer> periodIds;
 
84
    private Collection<Integer> organisationUnitIds;
 
85
    
 
86
    private DataElement dataElementA;
 
87
    private DataElement dataElementB;
 
88
    
 
89
    private Period periodA;
 
90
    private Period periodB;
 
91
    private Period periodC;
 
92
    
 
93
    private OrganisationUnit unitA;
 
94
    private OrganisationUnit unitB;
 
95
    private OrganisationUnit unitC;
 
96
    
 
97
    @Override
 
98
    public void setUpTest()
 
99
    {   
 
100
        // ---------------------------------------------------------------------
 
101
        // Dependencies
 
102
        // ---------------------------------------------------------------------
 
103
        
 
104
        dataMartInternalProcess = (DataMartInternalProcess) getBean( DataMartInternalProcess.ID );
 
105
 
 
106
        dataMartStore = (DataMartStore) getBean( DataMartStore.ID );
 
107
        
 
108
        categoryService = (DataElementCategoryService) getBean( DataElementCategoryService.ID );
 
109
        
 
110
        categoryComboService = (DataElementCategoryComboService) getBean( DataElementCategoryComboService.ID );
 
111
        
 
112
        categoryOptionService = (DataElementCategoryOptionService) getBean( DataElementCategoryOptionService.ID );
 
113
        
 
114
        categoryOptionComboService = (DataElementCategoryOptionComboService) getBean( DataElementCategoryOptionComboService.ID );
 
115
        
 
116
        dataElementService = (DataElementService) getBean( DataElementService.ID );
 
117
        
 
118
        indicatorService = (IndicatorService) getBean( IndicatorService.ID );
 
119
        
 
120
        periodService = (PeriodService) getBean( PeriodService.ID );
 
121
        
 
122
        organisationUnitService = (OrganisationUnitService) getBean( OrganisationUnitService.ID );
 
123
        
 
124
        dataValueService = (DataValueService) getBean( DataValueService.ID );
 
125
 
 
126
        // ---------------------------------------------------------------------
 
127
        // Setup identifier Collections
 
128
        // ---------------------------------------------------------------------
 
129
 
 
130
        dataElementIds = new HashSet<Integer>();
 
131
        indicatorIds = new HashSet<Integer>();
 
132
        periodIds = new HashSet<Integer>();
 
133
        organisationUnitIds = new HashSet<Integer>();
 
134
        
 
135
        // ---------------------------------------------------------------------
 
136
        // Setup Dimensions
 
137
        // ---------------------------------------------------------------------
 
138
 
 
139
        categoryOptionA = new DataElementCategoryOption( "Male" );
 
140
        categoryOptionB = new DataElementCategoryOption( "Female" );
 
141
        
 
142
        categoryOptionService.addDataElementCategoryOption( categoryOptionA );
 
143
        categoryOptionService.addDataElementCategoryOption( categoryOptionB );
 
144
 
 
145
        categoryA = new DataElementCategory( "Gender" );
 
146
        categoryA.getCategoryOptions().add( categoryOptionA );
 
147
        categoryA.getCategoryOptions().add( categoryOptionB );
 
148
 
 
149
        categoryService.addDataElementCategory( categoryA );
 
150
 
 
151
        categoryComboA = new DataElementCategoryCombo( "Gender" );
 
152
        categoryComboA.getCategories().add( categoryA );        
 
153
        
 
154
        categoryComboService.addDataElementCategoryCombo( categoryComboA );
 
155
        
 
156
        categoryOptionComboService.generateOptionCombos( categoryComboA );
 
157
 
 
158
        Iterator<DataElementCategoryOptionCombo> categoryOptionCombos = categoryOptionComboService.getAllDataElementCategoryOptionCombos().iterator();
 
159
        
 
160
        categoryOptionCombos.next(); // Omit default
 
161
        categoryOptionComboA = categoryOptionCombos.next();
 
162
        categoryOptionComboB = categoryOptionCombos.next();     
 
163
        
 
164
        // ---------------------------------------------------------------------
 
165
        // Setup DataElements
 
166
        // ---------------------------------------------------------------------
 
167
 
 
168
        dataElementA = createDataElement( 'A', categoryComboA );
 
169
        dataElementB = createDataElement( 'B', categoryComboA );
 
170
 
 
171
        dataElementIds.add( dataElementService.addDataElement( dataElementA ) );
 
172
        dataElementIds.add( dataElementService.addDataElement( dataElementB ) );
 
173
 
 
174
        // ---------------------------------------------------------------------
 
175
        // Setup Periods
 
176
        // ---------------------------------------------------------------------
 
177
 
 
178
        PeriodType periodType = periodService.getAllPeriodTypes().iterator().next();
 
179
        
 
180
        Date jul01 = getDate( 2005, 7, 1 );
 
181
        Date jul31 = getDate( 2005, 7, 31 );
 
182
        Date aug01 = getDate( 2005, 8, 1 );
 
183
        Date aug31 = getDate( 2005, 8, 31 );
 
184
        
 
185
        periodA = createPeriod( periodType, jul01, jul31 );
 
186
        periodB = createPeriod( periodType, aug01, aug31 );
 
187
        periodC = createPeriod( periodType, jul01, aug31 );
 
188
        
 
189
        periodIds.add( periodService.addPeriod( periodA ) );
 
190
        periodIds.add( periodService.addPeriod( periodB ) );
 
191
        periodIds.add( periodService.addPeriod( periodC ) );
 
192
        
 
193
        // ---------------------------------------------------------------------
 
194
        // Setup OrganisationUnits
 
195
        // ---------------------------------------------------------------------
 
196
 
 
197
        unitA = createOrganisationUnit( 'A' );
 
198
        unitB = createOrganisationUnit( 'B', unitA );
 
199
        unitC = createOrganisationUnit( 'C', unitA );
 
200
        
 
201
        organisationUnitIds.add( organisationUnitService.addOrganisationUnit( unitA ) );
 
202
        organisationUnitIds.add( organisationUnitService.addOrganisationUnit( unitB ) );
 
203
        organisationUnitIds.add( organisationUnitService.addOrganisationUnit( unitC ) );
 
204
 
 
205
        organisationUnitService.addOrganisationUnitHierarchy( new Date() ); //TODO
 
206
    }
 
207
    
 
208
    public void testSumIntDataElementDataMart()
 
209
    {
 
210
        dataElementA.setType( DataElement.TYPE_INT );
 
211
        dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );        
 
212
        dataElementService.updateDataElement( dataElementA );
 
213
        
 
214
        // ---------------------------------------------------------------------
 
215
        // Setup DataValues
 
216
        // ---------------------------------------------------------------------
 
217
 
 
218
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "40", categoryOptionComboA ) );
 
219
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "20", categoryOptionComboB ) );
 
220
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "90", categoryOptionComboA ) );
 
221
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "10", categoryOptionComboB ) );
 
222
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "25", categoryOptionComboA ) );
 
223
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "20", categoryOptionComboB ) );
 
224
 
 
225
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "40", categoryOptionComboA ) );
 
226
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "80", categoryOptionComboB ) );
 
227
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "70", categoryOptionComboA ) );
 
228
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "30", categoryOptionComboB ) );
 
229
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "65", categoryOptionComboA ) );
 
230
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "40", categoryOptionComboB ) );
 
231
        
 
232
        // ---------------------------------------------------------------------
 
233
        // Test
 
234
        // ---------------------------------------------------------------------
 
235
 
 
236
        dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
 
237
        
 
238
        assertEquals( 90.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
 
239
        assertEquals( 70.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
 
240
        assertEquals( 160.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
 
241
        assertEquals( 10.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
 
242
        assertEquals( 30.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
 
243
        assertEquals( 40.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
 
244
 
 
245
        assertEquals( 25.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
 
246
        assertEquals( 65.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
 
247
        assertEquals( 90.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
 
248
        assertEquals( 20.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
 
249
        assertEquals( 40.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
 
250
        assertEquals( 60.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
 
251
 
 
252
        assertEquals( 155.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
 
253
        assertEquals( 175.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
 
254
        assertEquals( 330.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
 
255
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
 
256
        assertEquals( 150.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
 
257
        assertEquals( 200.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
 
258
    }
 
259
    
 
260
    public void testAverageIntDataElementDataMart()
 
261
    {
 
262
        dataElementA.setType( DataElement.TYPE_INT );
 
263
        dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_AVERAGE );        
 
264
        dataElementService.updateDataElement( dataElementA );
 
265
        
 
266
        // ---------------------------------------------------------------------
 
267
        // Setup DataValues
 
268
        // ---------------------------------------------------------------------
 
269
 
 
270
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "40", categoryOptionComboA ) );
 
271
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, "20", categoryOptionComboB ) );
 
272
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "90", categoryOptionComboA ) );
 
273
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "10", categoryOptionComboB ) );
 
274
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "25", categoryOptionComboA ) );
 
275
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "20", categoryOptionComboB ) );
 
276
 
 
277
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "40", categoryOptionComboA ) );
 
278
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, "80", categoryOptionComboB ) );
 
279
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "70", categoryOptionComboA ) );
 
280
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "30", categoryOptionComboB ) );
 
281
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "65", categoryOptionComboA ) );
 
282
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "40", categoryOptionComboB ) );
 
283
        
 
284
        // ---------------------------------------------------------------------
 
285
        // Test
 
286
        // ---------------------------------------------------------------------
 
287
 
 
288
        dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
 
289
 
 
290
        assertEquals( 90.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
 
291
        assertEquals( 70.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
 
292
        assertEquals( 80.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
 
293
        assertEquals( 10.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
 
294
        assertEquals( 30.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
 
295
        assertEquals( 20.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
 
296
 
 
297
        assertEquals( 25.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
 
298
        assertEquals( 65.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
 
299
        assertEquals( 45.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
 
300
        assertEquals( 20.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
 
301
        assertEquals( 40.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
 
302
        assertEquals( 30.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
 
303
 
 
304
        assertEquals( 155.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
 
305
        assertEquals( 175.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
 
306
        assertEquals( 165.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
 
307
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
 
308
        assertEquals( 150.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
 
309
        assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
 
310
    }
 
311
    
 
312
    public void testSumBoolDataElement()
 
313
    {
 
314
        dataElementA.setType( DataElement.TYPE_BOOL );
 
315
        dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );        
 
316
        dataElementService.updateDataElement( dataElementA );
 
317
        
 
318
        // ---------------------------------------------------------------------
 
319
        // Setup DataValues
 
320
        // ---------------------------------------------------------------------
 
321
 
 
322
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, T, categoryOptionComboA ) );
 
323
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, F, categoryOptionComboB ) );
 
324
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, T, categoryOptionComboA ) );
 
325
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, F, categoryOptionComboB ) );
 
326
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, F, categoryOptionComboA ) );
 
327
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, T, categoryOptionComboB ) );
 
328
 
 
329
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboA ) );
 
330
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboB ) );
 
331
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, F, categoryOptionComboA ) );
 
332
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, T, categoryOptionComboB ) );
 
333
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboA ) );
 
334
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboB ) );
 
335
        
 
336
        // ---------------------------------------------------------------------
 
337
        // Test
 
338
        // ---------------------------------------------------------------------
 
339
 
 
340
        dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
 
341
 
 
342
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
 
343
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
 
344
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
 
345
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
 
346
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
 
347
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
 
348
 
 
349
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
 
350
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
 
351
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
 
352
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
 
353
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
 
354
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
 
355
 
 
356
        assertEquals( 2.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
 
357
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
 
358
        assertEquals( 3.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
 
359
        assertEquals( 1.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
 
360
        assertEquals( 2.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
 
361
        assertEquals( 3.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
 
362
    }
 
363
    
 
364
    public void testAverageBoolDataElement()
 
365
    {
 
366
        dataElementA.setType( DataElement.TYPE_BOOL );
 
367
        dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_AVERAGE );        
 
368
        dataElementService.updateDataElement( dataElementA );
 
369
        
 
370
        // ---------------------------------------------------------------------
 
371
        // Setup DataValues
 
372
        // ---------------------------------------------------------------------
 
373
 
 
374
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, T, categoryOptionComboA ) );
 
375
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitA, F, categoryOptionComboB ) );
 
376
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, T, categoryOptionComboA ) );
 
377
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, F, categoryOptionComboB ) );
 
378
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, F, categoryOptionComboA ) );
 
379
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, T, categoryOptionComboB ) );
 
380
 
 
381
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboA ) );
 
382
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitA, T, categoryOptionComboB ) );
 
383
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, F, categoryOptionComboA ) );
 
384
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, T, categoryOptionComboB ) );
 
385
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboA ) );
 
386
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, F, categoryOptionComboB ) );
 
387
        
 
388
        // ---------------------------------------------------------------------
 
389
        // Test
 
390
        // ---------------------------------------------------------------------
 
391
 
 
392
        dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
 
393
 
 
394
        assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitB ) );
 
395
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitB ) );
 
396
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitB ) );
 
397
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitB ) );
 
398
        assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitB ) );
 
399
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitB ) );
 
400
 
 
401
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitC ) );
 
402
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitC ) );
 
403
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitC ) );
 
404
        assertEquals( 100.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitC ) );
 
405
        assertEquals( 0.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitC ) );
 
406
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitC ) );
 
407
 
 
408
        assertEquals( 66.7, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodA, unitA ) );
 
409
        assertEquals( 33.3, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodB, unitA ) );
 
410
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboA, periodC, unitA ) );
 
411
        assertEquals( 33.3, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodA, unitA ) );
 
412
        assertEquals( 66.7, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodB, unitA ) );
 
413
        assertEquals( 50.0, dataMartStore.getAggregatedValue( dataElementA, categoryOptionComboB, periodC, unitA ) );
 
414
    }
 
415
    
 
416
    public void testIndicator()
 
417
    {
 
418
        dataElementA.setType( DataElement.TYPE_INT );
 
419
        dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );        
 
420
        dataElementService.updateDataElement( dataElementA );
 
421
        
 
422
        // ---------------------------------------------------------------------
 
423
        // Setup DataValues
 
424
        // ---------------------------------------------------------------------
 
425
 
 
426
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "9", categoryOptionComboA ) );
 
427
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "3", categoryOptionComboB ) );
 
428
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "1", categoryOptionComboA ) );
 
429
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "5", categoryOptionComboB ) );
 
430
        
 
431
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "3", categoryOptionComboA ) );
 
432
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "2", categoryOptionComboB ) );
 
433
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "7", categoryOptionComboA ) );
 
434
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "9", categoryOptionComboB ) );
 
435
        
 
436
        // ---------------------------------------------------------------------
 
437
        // Setup Indicators
 
438
        // ---------------------------------------------------------------------
 
439
 
 
440
        IndicatorType indicatorType = createIndicatorType( 'A' ); // Factor = 100
 
441
        
 
442
        indicatorService.addIndicatorType( indicatorType );
 
443
        
 
444
        Indicator indicatorA = createIndicator( 'A', indicatorType );
 
445
 
 
446
        String suffixA = Expression.SEPARATOR + categoryOptionComboA.getId();
 
447
        String suffixB = Expression.SEPARATOR + categoryOptionComboB.getId();
 
448
        
 
449
        indicatorA.setNumerator( "[" + dataElementA.getId() + suffixA + "]*[" + dataElementA.getId() + suffixB + "]" );
 
450
        indicatorA.setNumeratorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
 
451
        
 
452
        indicatorA.setDenominator( "1" );
 
453
        indicatorA.setDenominatorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
 
454
        
 
455
        indicatorIds.add( indicatorService.addIndicator( indicatorA ) );
 
456
 
 
457
        // ---------------------------------------------------------------------
 
458
        // Test
 
459
        // ---------------------------------------------------------------------
 
460
 
 
461
        dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
 
462
        
 
463
        assertEquals( 2700.0, dataMartStore.getAggregatedValue( indicatorA, periodA, unitB ) );
 
464
        assertEquals( 600.0, dataMartStore.getAggregatedValue( indicatorA, periodB, unitB ) );
 
465
        assertEquals( 6000.0, dataMartStore.getAggregatedValue( indicatorA, periodC, unitB ) );
 
466
        
 
467
        assertEquals( 500.0, dataMartStore.getAggregatedValue( indicatorA, periodA, unitC ) );
 
468
        assertEquals( 6300.0, dataMartStore.getAggregatedValue( indicatorA, periodB, unitC ) );
 
469
        assertEquals( 11200.0, dataMartStore.getAggregatedValue( indicatorA, periodC, unitC ) );
 
470
        
 
471
        assertEquals( 8000.0, dataMartStore.getAggregatedValue( indicatorA, periodA, unitA ) );
 
472
        assertEquals( 11000.0, dataMartStore.getAggregatedValue( indicatorA, periodB, unitA ) );
 
473
        assertEquals( 38000.0, dataMartStore.getAggregatedValue( indicatorA, periodC, unitA ) );   
 
474
    }
 
475
 
 
476
    public void testAnnualizedIndicator()
 
477
    {
 
478
        dataElementA.setType( DataElement.TYPE_INT );
 
479
        dataElementA.setAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );        
 
480
        dataElementService.updateDataElement( dataElementA );
 
481
        
 
482
        // ---------------------------------------------------------------------
 
483
        // Setup DataValues
 
484
        // ---------------------------------------------------------------------
 
485
 
 
486
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "9", categoryOptionComboA ) );
 
487
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitB, "3", categoryOptionComboB ) );
 
488
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "1", categoryOptionComboA ) );
 
489
        dataValueService.addDataValue( createDataValue( dataElementA, periodA, unitC, "5", categoryOptionComboB ) );
 
490
        
 
491
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "3", categoryOptionComboA ) );
 
492
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitB, "2", categoryOptionComboB ) );
 
493
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "7", categoryOptionComboA ) );
 
494
        dataValueService.addDataValue( createDataValue( dataElementA, periodB, unitC, "9", categoryOptionComboB ) );
 
495
        
 
496
        // ---------------------------------------------------------------------
 
497
        // Setup Indicators
 
498
        // ---------------------------------------------------------------------
 
499
 
 
500
        IndicatorType indicatorType = createIndicatorType( 'A' ); // Factor = 100
 
501
        
 
502
        indicatorService.addIndicatorType( indicatorType );
 
503
        
 
504
        Indicator indicatorA = createIndicator( 'A', indicatorType );
 
505
 
 
506
        indicatorA.setAnnualized( true );
 
507
        
 
508
        String suffixA = Expression.SEPARATOR + categoryOptionComboA.getId();
 
509
        String suffixB = Expression.SEPARATOR + categoryOptionComboB.getId();
 
510
        
 
511
        indicatorA.setNumerator( "[" + dataElementA.getId() + suffixA + "]*[" + dataElementA.getId() + suffixB + "]" );
 
512
        indicatorA.setNumeratorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
 
513
        
 
514
        indicatorA.setDenominator( "1" );
 
515
        indicatorA.setDenominatorAggregationOperator( DataElement.AGGREGATION_OPERATOR_SUM );
 
516
        
 
517
        indicatorIds.add( indicatorService.addIndicator( indicatorA ) );
 
518
 
 
519
        // ---------------------------------------------------------------------
 
520
        // Test
 
521
        // ---------------------------------------------------------------------
 
522
 
 
523
        dataMartInternalProcess.export( dataElementIds, indicatorIds, periodIds, organisationUnitIds );
 
524
        
 
525
        assertEquals( 31790.3, dataMartStore.getAggregatedValue( indicatorA, periodA, unitB ) );
 
526
        assertEquals( 7064.5, dataMartStore.getAggregatedValue( indicatorA, periodB, unitB ) );
 
527
        assertEquals( 35322.6, dataMartStore.getAggregatedValue( indicatorA, periodC, unitB ) );
 
528
        
 
529
        assertEquals( 5887.1, dataMartStore.getAggregatedValue( indicatorA, periodA, unitC ) );
 
530
        assertEquals( 74177.4, dataMartStore.getAggregatedValue( indicatorA, periodB, unitC ) );
 
531
        assertEquals( 65935.5, dataMartStore.getAggregatedValue( indicatorA, periodC, unitC ) );
 
532
        
 
533
        assertEquals( 94193.5, dataMartStore.getAggregatedValue( indicatorA, periodA, unitA ) );
 
534
        assertEquals( 129516.1, dataMartStore.getAggregatedValue( indicatorA, periodB, unitA ) );
 
535
        assertEquals( 223709.7, dataMartStore.getAggregatedValue( indicatorA, periodC, unitA ) );        
 
536
    }
 
537
}