1
package org.hisp.dhis.dataset;
4
* Copyright (c) 2004-2007, University of Oslo
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.
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.
30
import java.util.Collection;
31
import java.util.HashSet;
33
import org.hisp.dhis.DhisConvenienceTest;
34
import org.hisp.dhis.period.MonthlyPeriodType;
35
import org.hisp.dhis.period.PeriodStore;
36
import org.hisp.dhis.period.PeriodType;
37
import org.hisp.dhis.period.WeeklyPeriodType;
38
import org.hisp.dhis.period.YearlyPeriodType;
39
import org.hisp.dhis.source.DummySource;
40
import org.hisp.dhis.source.Source;
41
import org.hisp.dhis.source.SourceStore;
44
* @author Lars Helge Overland
47
public class DataSetServiceTest
48
extends DhisConvenienceTest
50
private PeriodStore periodStore;
52
private DataSetService dataSetService;
54
private SourceStore sourceStore;
56
private PeriodType periodType;
58
public void setUpTest()
61
dataSetService = (DataSetService) getBean( DataSetService.ID );
63
periodStore = (PeriodStore) getBean( PeriodStore.ID );
65
sourceStore = (SourceStore) getBean( SourceStore.ID );
67
periodType = PeriodType.getAvailablePeriodTypes().iterator().next();
70
// -------------------------------------------------------------------------
72
// -------------------------------------------------------------------------
74
private void assertEquals( char uniqueCharacter, DataSet dataSet )
76
assertEquals( "DataSet" + uniqueCharacter, dataSet.getName() );
77
assertEquals( "ShortName" + uniqueCharacter, dataSet.getShortName() );
78
assertEquals( periodType, dataSet.getPeriodType() );
81
// -------------------------------------------------------------------------
83
// -------------------------------------------------------------------------
85
public void testAddDataSet()
87
DataSet dataSetA = createDataSet( 'A', periodType );
88
DataSet dataSetB = createDataSet( 'B', periodType );
90
int idA = dataSetService.addDataSet( dataSetA );
91
int idB = dataSetService.addDataSet( dataSetB );
93
dataSetA = dataSetService.getDataSet( idA );
94
dataSetB = dataSetService.getDataSet( idB );
96
assertEquals( idA, dataSetA.getId() );
97
assertEquals( 'A', dataSetA );
99
assertEquals( idB, dataSetB.getId() );
100
assertEquals( 'B', dataSetB );
103
public void testUpdateDataSet()
105
DataSet dataSet = createDataSet( 'A', periodType );
107
int id = dataSetService.addDataSet( dataSet );
109
dataSet = dataSetService.getDataSet( id );
111
assertEquals( 'A', dataSet );
113
dataSet.setName( "DataSetB" );
115
dataSetService.updateDataSet( dataSet );
117
dataSet = dataSetService.getDataSet( id );
119
assertEquals( dataSet.getName(), "DataSetB" );
122
public void testDeleteAndGetDataSet()
124
DataSet dataSetA = createDataSet( 'A', periodType );
125
DataSet dataSetB = createDataSet( 'B', periodType );
127
int idA = dataSetService.addDataSet( dataSetA );
128
int idB = dataSetService.addDataSet( dataSetB );
130
assertNotNull( dataSetService.getDataSet( idA ) );
131
assertNotNull( dataSetService.getDataSet( idB ) );
133
dataSetService.deleteDataSet( dataSetService.getDataSet( idA ) );
135
assertNull( dataSetService.getDataSet( idA ) );
136
assertNotNull( dataSetService.getDataSet( idB ) );
138
dataSetService.deleteDataSet( dataSetService.getDataSet( idB ) );
140
assertNull( dataSetService.getDataSet( idA ) );
141
assertNull( dataSetService.getDataSet( idB ) );
144
public void testGetDataSetByName()
147
DataSet dataSetA = createDataSet( 'A', periodType );
148
DataSet dataSetB = createDataSet( 'B', periodType );
150
int idA = dataSetService.addDataSet( dataSetA );
151
int idB = dataSetService.addDataSet( dataSetB );
153
assertEquals( dataSetService.getDataSetByName( "DataSetA" ).getId(), idA );
154
assertEquals( dataSetService.getDataSetByName( "DataSetB" ).getId(), idB );
155
assertNull( dataSetService.getDataSetByName( "DataSetC" ) );
158
public void testGetDataSetByShortName()
161
DataSet dataSetA = createDataSet( 'A', periodType );
162
DataSet dataSetB = createDataSet( 'B', periodType );
164
int idA = dataSetService.addDataSet( dataSetA );
165
int idB = dataSetService.addDataSet( dataSetB );
167
assertEquals( dataSetService.getDataSetByShortName( "ShortNameA" ).getId(), idA );
168
assertEquals( dataSetService.getDataSetByShortName( "ShortNameB" ).getId(), idB );
169
assertNull( dataSetService.getDataSetByShortName( "ShortNameC" ) );
172
public void testGetAllDataSets()
174
DataSet dataSetA = createDataSet( 'A', periodType );
175
DataSet dataSetB = createDataSet( 'B', periodType );
177
dataSetService.addDataSet( dataSetA );
178
dataSetService.addDataSet( dataSetB );
180
Collection<DataSet> dataSets = dataSetService.getAllDataSets();
182
assertEquals( dataSets.size(), 2 );
183
assertTrue( dataSets.contains( dataSetA ) );
184
assertTrue( dataSets.contains( dataSetB ) );
187
public void testGetDataSetsBySource()
189
Source sourceA = new DummySource( "A" );
190
Source sourceB = new DummySource( "B" );
191
Source sourceC = new DummySource( "C" );
193
sourceStore.addSource( sourceA );
194
sourceStore.addSource( sourceB );
195
sourceStore.addSource( sourceC );
197
DataSet dataSetA = createDataSet( 'A', periodType );
198
DataSet dataSetB = createDataSet( 'B', periodType );
199
DataSet dataSetC = createDataSet( 'C', periodType );
201
dataSetA.getSources().add( sourceA );
202
dataSetA.getSources().add( sourceB );
204
dataSetB.getSources().add( sourceB );
205
dataSetB.getSources().add( sourceC );
207
dataSetC.getSources().add( sourceA );
208
dataSetC.getSources().add( sourceC );
210
dataSetService.addDataSet( dataSetA );
211
dataSetService.addDataSet( dataSetB );
212
dataSetService.addDataSet( dataSetC );
214
Collection<DataSet> dataSets = dataSetService.getDataSetsBySource( sourceA );
216
assertEquals( 2, dataSets.size() );
217
assertTrue( dataSets.contains( dataSetA ) );
218
assertTrue( dataSets.contains( dataSetC ) );
220
dataSets = dataSetService.getDataSetsBySource( sourceB );
222
assertEquals( 2, dataSets.size() );
223
assertTrue( dataSets.contains( dataSetA ) );
224
assertTrue( dataSets.contains( dataSetB ) );
226
dataSets = dataSetService.getDataSetsBySource( sourceC );
228
assertEquals( 2, dataSets.size() );
229
assertTrue( dataSets.contains( dataSetB ) );
230
assertTrue( dataSets.contains( dataSetC ) );
233
public void testGetDataSetsBySources()
235
Source sourceA = new DummySource( "A" );
236
Source sourceB = new DummySource( "B" );
237
Source sourceC = new DummySource( "C" );
238
Source sourceD = new DummySource( "D" );
240
sourceStore.addSource( sourceA );
241
sourceStore.addSource( sourceB );
242
sourceStore.addSource( sourceC );
243
sourceStore.addSource( sourceD );
245
DataSet dataSetA = createDataSet( 'A', periodType );
246
DataSet dataSetB = createDataSet( 'B', periodType );
247
DataSet dataSetC = createDataSet( 'C', periodType );
248
DataSet dataSetD = createDataSet( 'D', periodType );
250
dataSetA.getSources().add( sourceA );
251
dataSetA.getSources().add( sourceB );
253
dataSetB.getSources().add( sourceB );
254
dataSetB.getSources().add( sourceC );
256
dataSetC.getSources().add( sourceC );
258
dataSetD.getSources().add( sourceD );
260
dataSetService.addDataSet( dataSetA );
261
dataSetService.addDataSet( dataSetB );
262
dataSetService.addDataSet( dataSetC );
263
dataSetService.addDataSet( dataSetD );
265
Collection<Source> sources = new HashSet<Source>();
267
sources.add( sourceA );
268
sources.add( sourceD );
270
Collection<DataSet> dataSets = dataSetService.getDataSetsBySources( sources );
272
assertEquals( 2, dataSets.size() );
273
assertTrue( dataSets.contains( dataSetA ) );
274
assertTrue( dataSets.contains( dataSetD ) );
278
sources.add( sourceB );
279
sources.add( sourceC );
281
dataSets = dataSetService.getDataSetsBySources( sources );
283
assertEquals( 3, dataSets.size() );
284
assertTrue( dataSets.contains( dataSetA ) );
285
assertTrue( dataSets.contains( dataSetB ) );
286
assertTrue( dataSets.contains( dataSetC ) );
289
public void testGetSourcesAssociatedWithDataSet()
291
Source sourceA = new DummySource( "A" );
292
Source sourceB = new DummySource( "B" );
293
Source sourceC = new DummySource( "C" );
294
Source sourceD = new DummySource( "D" );
295
Source sourceE = new DummySource( "E" );
296
Source sourceF = new DummySource( "F" );
298
sourceStore.addSource( sourceA );
299
sourceStore.addSource( sourceB );
300
sourceStore.addSource( sourceC );
301
sourceStore.addSource( sourceD );
302
sourceStore.addSource( sourceE );
303
sourceStore.addSource( sourceF );
305
DataSet dataSetA = createDataSet( 'A', periodType );
306
DataSet dataSetB = createDataSet( 'B', periodType );
308
dataSetA.getSources().add( sourceA );
309
dataSetA.getSources().add( sourceB );
310
dataSetA.getSources().add( sourceC );
312
dataSetB.getSources().add( sourceC );
313
dataSetB.getSources().add( sourceD );
314
dataSetB.getSources().add( sourceE );
316
dataSetService.addDataSet( dataSetA );
317
dataSetService.addDataSet( dataSetB );
319
Collection<Source> sources = new HashSet<Source>();
321
sources.add( sourceA );
322
sources.add( sourceB );
323
sources.add( sourceD );
324
sources.add( sourceE );
326
assertEquals( 2, dataSetService.getSourcesAssociatedWithDataSet( dataSetA, sources ) );
327
assertEquals( 2, dataSetService.getSourcesAssociatedWithDataSet( dataSetB, sources ) );
330
// -------------------------------------------------------------------------
331
// FrequencyOverrideAssociation
332
// -------------------------------------------------------------------------
334
public void testFrequencyOverrideAssociation()
337
PeriodType periodType1 = periodStore.getPeriodType( YearlyPeriodType.class );
338
PeriodType periodType2 = periodStore.getPeriodType( MonthlyPeriodType.class );
339
PeriodType periodType3 = periodStore.getPeriodType( WeeklyPeriodType.class );
341
DataSet dataSet1 = new DataSet( "name1", periodType1 );
342
DataSet dataSet2 = new DataSet( "name2", periodType2 );
344
dataSetService.addDataSet( dataSet1 );
345
dataSetService.addDataSet( dataSet2 );
347
Source source1 = new DummySource( "Source1" );
348
Source source2 = new DummySource( "Source2" );
349
sourceStore.addSource( source1 );
350
sourceStore.addSource( source2 );
352
FrequencyOverrideAssociation association = new FrequencyOverrideAssociation( dataSet1, source1, periodType3 );
354
dataSetService.addFrequencyOverrideAssociation( association );
355
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 1 );
356
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 1 );
357
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 0 );
358
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 0 );
360
dataSetService.addFrequencyOverrideAssociation( new FrequencyOverrideAssociation( dataSet1, source2, periodType3 ) );
361
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 2 );
362
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 1 );
363
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 0 );
364
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 1 );
366
dataSetService.addFrequencyOverrideAssociation( new FrequencyOverrideAssociation( dataSet2, source1, periodType3 ) );
367
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 2 );
368
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 2 );
369
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 1 );
370
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 1 );
372
dataSetService.removeFrequencyOverrideAssociation( association );
373
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet1 ).size(), 1 );
374
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source1 ).size(), 1 );
375
assertEquals( dataSetService.getFrequencyOverrideAssociationsByDataSet( dataSet2 ).size(), 1 );
376
assertEquals( dataSetService.getFrequencyOverrideAssociationsBySource( source2 ).size(), 1 );