1
package org.hisp.dhis.organisationunit;
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.Calendar;
31
import java.util.Collection;
32
import java.util.Date;
33
import java.util.GregorianCalendar;
34
import java.util.Iterator;
35
import java.util.List;
37
import org.hisp.dhis.DhisConvenienceTest;
38
import org.hisp.dhis.system.session.SessionUtil;
41
* @author Kristian Nordal
42
* @version $Id: OrganisationUnitServiceTest.java 6251 2008-11-10 14:37:05Z larshelg $
44
public class OrganisationUnitServiceTest
45
extends DhisConvenienceTest
47
private OrganisationUnitService organisationUnitService;
49
private OrganisationUnitGroupService organisationUnitGroupService;
51
private SessionUtil sessionUtil;
53
public void setUpTest()
56
organisationUnitService = (OrganisationUnitService) getBean( OrganisationUnitService.ID );
58
organisationUnitGroupService = (OrganisationUnitGroupService) getBean( OrganisationUnitGroupService.ID );
60
organisationUnitService.removeOrganisationUnitHierarchies( OrganisationUnitHierarchyVerifier.START_OF_TIME );
62
sessionUtil = (SessionUtil) getBean( SessionUtil.ID );
65
// -------------------------------------------------------------------------
67
// -------------------------------------------------------------------------
69
public void testBasicOrganisationUnitCoarseGrained()
72
// Single OrganisationUnit
73
String organisationUnitName1 = "organisationUnitName1";
74
OrganisationUnit organisationUnit1 = new OrganisationUnit( organisationUnitName1, "shortName1",
75
"organisationUnitCode1", new Date(), new Date(), true, "comment" );
76
OrganisationUnit organisationUnit1b = new OrganisationUnit( organisationUnitName1, "shortName1",
77
"organisationUnitCode1", new Date(), new Date(), true, "comment" );
79
int id1 = organisationUnitService.addOrganisationUnit( organisationUnit1 );
81
// assert getOrganisationUnit
82
assertNotNull( organisationUnitService.getOrganisationUnit( id1 ) );
84
// assert unique constraint
87
organisationUnitService.addOrganisationUnit( organisationUnit1b );
88
fail( "Expected exception" );
90
catch ( Exception ex )
95
assertNull( organisationUnitService.getOrganisationUnit( -1 ) );
97
organisationUnit1 = organisationUnitService.getOrganisationUnit( id1 );
99
// OrganisationUnit with parent
100
String organisationUnitName2 = "organisationUnitName2";
101
OrganisationUnit organisationUnit2 = new OrganisationUnit( organisationUnitName2, organisationUnit1,
102
"shortName2", "organisationUnitCode2", new Date(), new Date(), true, "comment" );
104
int id2 = organisationUnitService.addOrganisationUnit( organisationUnit2 );
106
assertTrue( organisationUnitService.getOrganisationUnit( id2 ).getParent().getId() == id1 );
107
assertTrue( organisationUnitService.getOrganisationUnit( id1 ).getChildren().contains(
108
organisationUnitService.getOrganisationUnit( id2 ) ) );
110
organisationUnitService.deleteOrganisationUnit( organisationUnitService.getOrganisationUnit( id2 ) );
112
organisationUnitService.deleteOrganisationUnit( organisationUnitService.getOrganisationUnit( id1 ) );
114
// assert delOrganisationUnit
115
assertNull( organisationUnitService.getOrganisationUnit( id1 ) );
116
assertNull( organisationUnitService.getOrganisationUnit( id2 ) );
119
public void testUpdateOrganisationUnit()
122
String name = "name";
123
String shortName = "shortName";
124
String updatedName = "updatedName";
125
String updatedShortName = "updatedShortName";
127
OrganisationUnit organisationUnit = new OrganisationUnit( name, shortName, "organisationUnitCode", new Date(),
128
new Date(), true, "comment" );
130
int id = organisationUnitService.addOrganisationUnit( organisationUnit );
132
organisationUnit.setName( updatedName );
133
organisationUnit.setShortName( updatedShortName );
135
organisationUnitService.updateOrganisationUnit( organisationUnit );
137
OrganisationUnit updatedOrganisationUnit = organisationUnitService.getOrganisationUnit( id );
139
assertEquals( updatedOrganisationUnit.getName(), updatedName );
140
assertEquals( updatedOrganisationUnit.getShortName(), updatedShortName );
143
public void testGetOrganisationUnitWithChildren()
146
OrganisationUnit unit1 = new OrganisationUnit( "name1", "shortName1", "organisationUnitCode1", new Date(),
147
new Date(), true, "comment" );
148
OrganisationUnit unit2 = new OrganisationUnit( "name2", unit1, "shortName2", "organisationUnitCode2",
149
new Date(), new Date(), true, "comment" );
150
OrganisationUnit unit3 = new OrganisationUnit( "name3", unit2, "shortName3", "organisationUnitCode3",
151
new Date(), new Date(), true, "comment" );
152
OrganisationUnit unit4 = new OrganisationUnit( "name4", "shortName4", "organisationUnitCode4", new Date(),
153
new Date(), true, "comment" );
155
int id1 = organisationUnitService.addOrganisationUnit( unit1 );
156
unit1.getChildren().add( unit2 );
157
organisationUnitService.addOrganisationUnit( unit2 );
158
unit2.getChildren().add( unit3 );
159
organisationUnitService.addOrganisationUnit( unit3 );
160
organisationUnitService.addOrganisationUnit( unit4 );
162
assertTrue( organisationUnitService.getOrganisationUnitWithChildren( id1 ).size() == 3 );
165
public void testGetOrganisationUnitsByFields()
168
String oU1Name = "OU1name";
169
String oU2Name = "OU2name";
170
String oU3Name = "OU3name";
171
String oU1ShortName = "OU1ShortName";
172
String oU2ShortName = "OU2ShortName";
173
String oU3ShortName = "OU3ShortName";
174
String oU1Code = "OU1Code";
175
String oU2Code = "OU2Code";
176
String oU3Code = "OU3Code";
178
OrganisationUnit organisationUnit1 = new OrganisationUnit( oU1Name, null, oU1ShortName, oU1Code, null, null,
180
OrganisationUnit organisationUnit2 = new OrganisationUnit( oU2Name, null, oU2ShortName, oU2Code, null, null,
182
OrganisationUnit organisationUnit3 = new OrganisationUnit( oU3Name, null, oU3ShortName, oU3Code, null, null,
185
organisationUnitService.addOrganisationUnit( organisationUnit1 );
186
organisationUnitService.addOrganisationUnit( organisationUnit2 );
187
organisationUnitService.addOrganisationUnit( organisationUnit3 );
189
OrganisationUnit unit1 = organisationUnitService.getOrganisationUnitByName( oU1Name );
190
assertEquals( unit1.getName(), oU1Name );
192
OrganisationUnit unit2 = organisationUnitService.getOrganisationUnitByShortName( oU2ShortName );
193
assertEquals( unit2.getShortName(), oU2ShortName );
195
OrganisationUnit unit3 = organisationUnitService.getOrganisationUnitByCode( oU3Code );
196
assertEquals( unit3.getCode(), oU3Code );
198
OrganisationUnit unit4 = organisationUnitService.getOrganisationUnitByName( "foo" );
202
public void testGetOrganisationUnitByUUID()
205
OrganisationUnit unit1 = new OrganisationUnit( "name1", "shortName1", "organisationUnitCode1", new Date(), new Date(), true, "comment" );
206
int id1 = organisationUnitService.addOrganisationUnit( unit1 );
208
unit1 = organisationUnitService.getOrganisationUnit( id1 );
209
String uuid = unit1.getUuid();
211
OrganisationUnit unit2 = organisationUnitService.getOrganisationUnit( uuid );
213
assertEquals( unit1, unit2 );
216
public void testGetOrganisationUnitGraph()
219
OrganisationUnit organisationUnit1 = new OrganisationUnit( "Foo", "shortName1", "organisationUnitCode1",
220
new Date(), new Date(), true, "comment" );
221
OrganisationUnit organisationUnit2 = new OrganisationUnit( "Bar", organisationUnit1, "shortName2",
222
"organisationUnitCode2", new Date(), new Date(), true, "comment" );
223
OrganisationUnit organisationUnit3 = new OrganisationUnit( "Foobar", organisationUnit2, "shortName3",
224
"organisationUnitCode3", new Date(), new Date(), true, "comment" );
226
int orgId1 = organisationUnitService.addOrganisationUnit( organisationUnit1 );
227
int orgId2 = organisationUnitService.addOrganisationUnit( organisationUnit2 );
228
int orgId3 = organisationUnitService.addOrganisationUnit( organisationUnit3 );
230
List<OrganisationUnit> graph = organisationUnitService.getOrganisationUnitBranch( orgId3 );
231
assertNotNull( graph );
232
assertEquals( 3, graph.size() );
233
OrganisationUnit orgUnit = graph.get( 0 );
234
assertEquals( orgId1, orgUnit.getId() );
235
orgUnit = graph.get( 1 );
236
assertEquals( orgId2, orgUnit.getId() );
237
orgUnit = graph.get( 2 );
238
assertEquals( orgId3, orgUnit.getId() );
241
public void testGetAllOrganisationUnitsAndGetRootOrganisationUnit()
244
// creating a tree with two roots ( id1 and id4 )
246
OrganisationUnit unit1 = new OrganisationUnit( "OU1name", "OU1sname", "OU1code", null, null, true, null );
247
OrganisationUnit unit2 = new OrganisationUnit( "OU2name", unit1, "OU2sname", "OU2code", null, null, true, null );
248
OrganisationUnit unit3 = new OrganisationUnit( "OU3name", unit1, "OU3sname", "OU3code", null, null, true, null );
249
OrganisationUnit unit4 = new OrganisationUnit( "OU4name", "OU4sname", "OU4code", null, null, true, null );
250
OrganisationUnit unit5 = new OrganisationUnit( "OU5name", unit4, "OU5sname", "OU5code", null, null, true, null );
252
int id1 = organisationUnitService.addOrganisationUnit( unit1 );
253
int id2 = organisationUnitService.addOrganisationUnit( unit2 );
254
int id3 = organisationUnitService.addOrganisationUnit( unit3 );
255
int id4 = organisationUnitService.addOrganisationUnit( unit4 );
256
int id5 = organisationUnitService.addOrganisationUnit( unit5 );
258
// retrieving the fresh-made organisationUnits
259
Iterator<OrganisationUnit> iterator1 = organisationUnitService.getAllOrganisationUnits().iterator();
261
// assert the list contains the same organisationUnits as the ones added
262
OrganisationUnit organisationUnit1 = iterator1.next();
263
assertTrue( organisationUnit1.getId() == id1 );
265
OrganisationUnit organisationUnit2 = iterator1.next();
266
assertTrue( organisationUnit2.getId() == id2 );
268
OrganisationUnit organisationUnit3 = iterator1.next();
269
assertTrue( organisationUnit3.getId() == id3 );
271
OrganisationUnit organisationUnit4 = iterator1.next();
272
assertTrue( organisationUnit4.getId() == id4 );
274
OrganisationUnit organisationUnit5 = iterator1.next();
275
assertTrue( organisationUnit5.getId() == id5 );
277
// retrieving the root organisationUnits
278
Iterator<OrganisationUnit> iterator2 = organisationUnitService.getRootOrganisationUnits().iterator();
280
OrganisationUnit rootOrganisationUnit1 = iterator2.next();
281
OrganisationUnit rootOrganisationUnit2 = iterator2.next();
283
// assert root organisationUnits not null and id equals id1 and id4
284
assertNotNull( rootOrganisationUnit1 );
285
assertNotNull( rootOrganisationUnit2 );
287
assertTrue( rootOrganisationUnit1.getId() == id1 );
288
assertTrue( rootOrganisationUnit2.getId() == id4 );
291
public void testGetOrganisationUnitsAtLevel()
294
OrganisationUnit unit1 = new OrganisationUnit( "orgUnitName1", "shortName1", "organisationUnitCode1",
295
new Date(), new Date(), true, "comment" );
296
organisationUnitService.addOrganisationUnit( unit1 );
298
OrganisationUnit unit2 = new OrganisationUnit( "orgUnitName2", unit1, "shortName2", "organisationUnitCode2",
299
new Date(), new Date(), true, "comment" );
300
unit1.getChildren().add( unit2 );
301
organisationUnitService.addOrganisationUnit( unit2 );
303
OrganisationUnit unit3 = new OrganisationUnit( "orgUnitName3", unit2, "shortName3", "organisationUnitCode3",
304
new Date(), new Date(), true, "comment" );
305
unit2.getChildren().add( unit3 );
306
organisationUnitService.addOrganisationUnit( unit3 );
308
OrganisationUnit unit4 = new OrganisationUnit( "orgUnitName4", unit2, "shortName4", "organisationUnitCode4",
309
new Date(), new Date(), true, "comment" );
310
unit2.getChildren().add( unit4 );
311
organisationUnitService.addOrganisationUnit( unit4 );
313
OrganisationUnit unit5 = new OrganisationUnit( "orgUnitName5", unit2, "shortName5", "organisationUnitCode5",
314
new Date(), new Date(), true, "comment" );
315
unit2.getChildren().add( unit5 );
316
organisationUnitService.addOrganisationUnit( unit5 );
318
OrganisationUnit unit6 = new OrganisationUnit( "orgUnitName6", unit3, "shortName6", "organisationUnitCode6",
319
new Date(), new Date(), true, "comment" );
320
unit3.getChildren().add( unit6 );
321
organisationUnitService.addOrganisationUnit( unit6 );
323
OrganisationUnit unit7 = new OrganisationUnit( "orgUnitName7", "shortName7", "organisationUnitCode7",
324
new Date(), new Date(), true, "comment" );
325
organisationUnitService.addOrganisationUnit( unit7 );
327
assertTrue( organisationUnitService.getOrganisationUnitsAtLevel( 1 ).size() == 2 );
328
assertTrue( organisationUnitService.getOrganisationUnitsAtLevel( 3 ).size() == 3 );
329
assertTrue( organisationUnitService.getNumberOfOrganisationalLevels() == 4 );
330
assertTrue( organisationUnitService.getLevelOfOrganisationUnit( unit4 ) == 3 );
331
assertTrue( organisationUnitService.getLevelOfOrganisationUnit( unit1 ) == 1 );
332
assertTrue( organisationUnitService.getLevelOfOrganisationUnit( unit6 ) == 4 );
335
public void testGetOrganisationUnitAtLevelAndBranch()
338
OrganisationUnit unitA = createOrganisationUnit( 'A' );
339
OrganisationUnit unitB = createOrganisationUnit( 'B', unitA );
340
OrganisationUnit unitC = createOrganisationUnit( 'C', unitA );
341
OrganisationUnit unitD = createOrganisationUnit( 'D', unitB );
342
OrganisationUnit unitE = createOrganisationUnit( 'E', unitB );
343
OrganisationUnit unitF = createOrganisationUnit( 'F', unitC );
344
OrganisationUnit unitG = createOrganisationUnit( 'G', unitC );
345
OrganisationUnit unitH = createOrganisationUnit( 'H', unitD );
346
OrganisationUnit unitI = createOrganisationUnit( 'I', unitD );
347
OrganisationUnit unitJ = createOrganisationUnit( 'J', unitE );
348
OrganisationUnit unitK = createOrganisationUnit( 'K', unitE );
349
OrganisationUnit unitL = createOrganisationUnit( 'L', unitF );
350
OrganisationUnit unitM = createOrganisationUnit( 'M', unitF );
351
OrganisationUnit unitN = createOrganisationUnit( 'N', unitG );
352
OrganisationUnit unitO = createOrganisationUnit( 'O', unitG );
354
unitA.getChildren().add( unitB );
355
unitA.getChildren().add( unitC );
356
unitB.getChildren().add( unitD );
357
unitB.getChildren().add( unitE );
358
unitC.getChildren().add( unitF );
359
unitC.getChildren().add( unitG );
360
unitD.getChildren().add( unitH );
361
unitD.getChildren().add( unitI );
362
unitE.getChildren().add( unitJ );
363
unitE.getChildren().add( unitK );
364
unitF.getChildren().add( unitL );
365
unitF.getChildren().add( unitM );
366
unitG.getChildren().add( unitN );
367
unitG.getChildren().add( unitO );
369
organisationUnitService.addOrganisationUnit( unitA );
370
organisationUnitService.addOrganisationUnit( unitB );
371
organisationUnitService.addOrganisationUnit( unitC );
372
organisationUnitService.addOrganisationUnit( unitD );
373
organisationUnitService.addOrganisationUnit( unitE );
374
organisationUnitService.addOrganisationUnit( unitF );
375
organisationUnitService.addOrganisationUnit( unitG );
376
organisationUnitService.addOrganisationUnit( unitH );
377
organisationUnitService.addOrganisationUnit( unitI );
378
organisationUnitService.addOrganisationUnit( unitJ );
379
organisationUnitService.addOrganisationUnit( unitK );
380
organisationUnitService.addOrganisationUnit( unitL );
381
organisationUnitService.addOrganisationUnit( unitM );
382
organisationUnitService.addOrganisationUnit( unitN );
383
organisationUnitService.addOrganisationUnit( unitO );
385
assertTrue( equals( organisationUnitService.getOrganisationUnitsAtLevel( 2, unitB ), unitB ) );
386
assertTrue( equals( organisationUnitService.getOrganisationUnitsAtLevel( 3, unitB ), unitD, unitE ) );
387
assertTrue( equals( organisationUnitService.getOrganisationUnitsAtLevel( 4, unitB ), unitH, unitI, unitJ, unitK ) );
390
// -------------------------------------------------------------------------
391
// OrganisationUnitGroup
392
// -------------------------------------------------------------------------
394
public void testAddAndDelOrganisationUnitGroup()
397
OrganisationUnitGroup organisationUnitGroup1 = new OrganisationUnitGroup( "OUGname" );
399
int id1 = organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup1 );
401
// assert getOrganisationUnitGroup
402
assertNotNull( organisationUnitGroupService.getOrganisationUnitGroup( id1 ) );
404
assertEquals( organisationUnitGroupService.getOrganisationUnitGroup( id1 ).getName(), "OUGname" );
406
// assert unique constraint
407
OrganisationUnitGroup organisationUnitGroup2 = new OrganisationUnitGroup( "OUGname" );
411
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup2 );
412
fail( "Expected exception" );
414
catch ( Exception ex )
419
organisationUnitGroupService.deleteOrganisationUnitGroup( organisationUnitGroupService
420
.getOrganisationUnitGroup( id1 ) );
422
// assert delOrganisationUnitGroup
423
assertNull( organisationUnitGroupService.getOrganisationUnitGroup( id1 ) );
426
public void testUpdateOrganisationUnitGroup()
429
OrganisationUnitGroup organisationUnitGroup = new OrganisationUnitGroup( "OUGname" );
431
OrganisationUnit organisationUnit1 = new OrganisationUnit( "OU1name", null, "OU1sname", "OU1code", null, null,
433
OrganisationUnit organisationUnit2 = new OrganisationUnit( "OU2name", null, "OU2sname", "OU2code", null, null,
436
organisationUnitGroup.getMembers().add( organisationUnit1 );
437
organisationUnitGroup.getMembers().add( organisationUnit2 );
439
organisationUnitService.addOrganisationUnit( organisationUnit1 );
440
organisationUnitService.addOrganisationUnit( organisationUnit2 );
442
int ougid = organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup );
444
assertTrue( organisationUnitGroupService.getOrganisationUnitGroup( ougid ).getMembers().size() == 2 );
446
organisationUnitGroup.getMembers().remove( organisationUnit1 );
448
organisationUnitGroupService.updateOrganisationUnitGroup( organisationUnitGroup );
450
assertTrue( organisationUnitGroupService.getOrganisationUnitGroup( ougid ).getMembers().size() == 1 );
453
public void testGetAllOrganisationUnitGroups()
456
OrganisationUnitGroup group1 = new OrganisationUnitGroup( "organisationUnitGroupName1" );
457
int gid1 = organisationUnitGroupService.addOrganisationUnitGroup( group1 );
459
OrganisationUnitGroup group2 = new OrganisationUnitGroup( "organisationUnitGroupName2" );
460
int gid2 = organisationUnitGroupService.addOrganisationUnitGroup( group2 );
462
OrganisationUnitGroup group3 = new OrganisationUnitGroup( "organisationUnitGroupName3" );
463
int gid3 = organisationUnitGroupService.addOrganisationUnitGroup( group3 );
465
OrganisationUnitGroup group4 = new OrganisationUnitGroup( "organisationUnitGroupName4" );
466
int gid4 = organisationUnitGroupService.addOrganisationUnitGroup( group4 );
468
Iterator<OrganisationUnitGroup> iterator = organisationUnitGroupService.getAllOrganisationUnitGroups().iterator();
470
OrganisationUnitGroup organisationUnitGroup1 = iterator.next();
471
assertTrue( organisationUnitGroup1.getId() == gid1 );
473
OrganisationUnitGroup organisationUnitGroup2 = iterator.next();
474
assertTrue( organisationUnitGroup2.getId() == gid2 );
476
OrganisationUnitGroup organisationUnitGroup3 = iterator.next();
477
assertTrue( organisationUnitGroup3.getId() == gid3 );
479
OrganisationUnitGroup organisationUnitGroup4 = iterator.next();
480
assertTrue( organisationUnitGroup4.getId() == gid4 );
483
public void testGetOrganisationUnitGroupByName()
486
String oUG1Name = "OUG1Name";
487
String oUG2Name = "OUG2Name";
489
OrganisationUnitGroup organisationUnitGroup1 = new OrganisationUnitGroup( oUG1Name );
490
OrganisationUnitGroup organisationUnitGroup2 = new OrganisationUnitGroup( oUG2Name );
492
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup1 );
493
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup2 );
495
OrganisationUnitGroup group1 = organisationUnitGroupService.getOrganisationUnitGroupByName( oUG1Name );
496
assertEquals( group1.getName(), oUG1Name );
498
OrganisationUnitGroup group2 = organisationUnitGroupService.getOrganisationUnitGroupByName( oUG2Name );
499
assertEquals( group2.getName(), oUG2Name );
502
public void testGetOrganisationUnitGroupByUUID()
505
OrganisationUnitGroup group1 = new OrganisationUnitGroup( "name1" );
506
int id1 = organisationUnitGroupService.addOrganisationUnitGroup( group1 );
508
group1 = organisationUnitGroupService.getOrganisationUnitGroup( id1 );
509
String uuid = group1.getUuid();
511
OrganisationUnitGroup group2 = organisationUnitGroupService.getOrganisationUnitGroup( uuid );
513
assertEquals( group1, group2 );
516
// -------------------------------------------------------------------------
517
// OrganisationUnitHierarchy
518
// -------------------------------------------------------------------------
520
public void testAddGetOrganisationUnitHierarchy()
524
OrganisationUnit unit1 = new OrganisationUnit( "orgUnitName1", "shortName1", "organisationUnitCode1",
525
new Date(), new Date(), true, "comment" );
526
OrganisationUnit unit2 = new OrganisationUnit( "orgUnitName2", unit1, "shortName2", "organisationUnitCode2",
527
new Date(), new Date(), true, "comment" );
528
OrganisationUnit unit3 = new OrganisationUnit( "orgUnitName3", unit1, "shortName3", "organisationUnitCode3",
529
new Date(), new Date(), true, "comment" );
530
OrganisationUnit unit4 = new OrganisationUnit( "orgUnitName4", unit2, "shortName4", "organisationUnitCode4",
531
new Date(), new Date(), true, "comment" );
532
OrganisationUnit unit5 = new OrganisationUnit( "orgUnitName5", unit2, "shortName5", "organisationUnitCode5",
533
new Date(), new Date(), true, "comment" );
534
OrganisationUnit unit6 = new OrganisationUnit( "orgUnitName6", unit5, "shortName6", "organisationUnitCode6",
535
new Date(), new Date(), true, "comment" );
537
organisationUnitService.addOrganisationUnit( unit1 );
538
int id2 = organisationUnitService.addOrganisationUnit( unit2 );
539
organisationUnitService.addOrganisationUnit( unit3 );
540
int id4 = organisationUnitService.addOrganisationUnit( unit4 );
541
int id5 = organisationUnitService.addOrganisationUnit( unit5 );
542
int id6 = organisationUnitService.addOrganisationUnit( unit6 );
544
Calendar calendar = Calendar.getInstance();
545
calendar.set( 2005, Calendar.JULY, 1 );
546
Date date1 = calendar.getTime();
547
calendar.set( 2005, Calendar.AUGUST, 1 );
548
Date date2 = calendar.getTime();
549
calendar.set( 2005, Calendar.SEPTEMBER, 1 );
550
Date date3 = calendar.getTime();
552
// creates a hierarchy-version
553
organisationUnitService.addOrganisationUnitHierarchy( date2 );
555
// asserts hierarchy-version is created and returns id
556
Collection<OrganisationUnitHierarchy> hierarchies = organisationUnitService.getOrganisationUnitHierarchies(
559
Iterator<OrganisationUnitHierarchy> iterator = hierarchies.iterator();
561
OrganisationUnitHierarchy hierarchy = iterator.next();
563
// retrieves children from hierarchyVersion ver_id and parentId id2
564
Collection<Integer> children1 = organisationUnitService.getChildren( hierarchy, unit2.getId() );
565
Iterator<Integer> iterator1 = children1.iterator();
567
// asserts 4, 5, 6 are children of 2
568
assertTrue( iterator1.next().intValue() == id2 );
569
assertTrue( iterator1.next().intValue() == id4 );
570
assertTrue( iterator1.next().intValue() == id5 );
571
assertTrue( iterator1.next().intValue() == id6 );
572
assertTrue( iterator1.hasNext() == false );
574
// retrieves children from hierarchyVersion ver_id and parentId id1
575
Collection<Integer> children2 = organisationUnitService.getChildren( hierarchy, unit1.getId() );
577
// assert the number of children
578
assertTrue( children2.size() == 6 );
580
// retrieves children from hierarchyVersion ver_id and parentId id5
581
Collection<Integer> children3 = organisationUnitService.getChildren( hierarchy, unit5.getId() );
582
Iterator<Integer> iterator3 = children3.iterator();
584
// assert 6 is children of 5 and the number of children
585
assertTrue( iterator3.next().intValue() == id5 );
586
assertTrue( iterator3.next().intValue() == id6 );
587
assertTrue( children3.size() == 2 );
590
public void testGetLatestOrganisationUnitHierarchy()
592
Calendar cal = Calendar.getInstance();
594
cal.set( 1990, Calendar.JANUARY, 1 );
596
organisationUnitService.addOrganisationUnitHierarchy( cal.getTime() );
598
cal.set( 1995, Calendar.JANUARY, 1 );
600
int idB = organisationUnitService.addOrganisationUnitHierarchy( cal.getTime() );
602
cal.set( 1985, Calendar.JANUARY, 1 );
604
organisationUnitService.addOrganisationUnitHierarchy( cal.getTime() );
606
OrganisationUnitHierarchy hierarchy = organisationUnitService.getLatestOrganisationUnitHierarchy();
608
assertEquals( hierarchy.getId(), idB );
611
public void testAddOrganisationUnitHierarchiesOnSameDate()
614
OrganisationUnit unit1 = new OrganisationUnit( "orgUnitName1", "shortName1", "organisationUnitCode1",
615
new Date(), new Date(), true, "comment" );
616
OrganisationUnit unit2 = new OrganisationUnit( "orgUnitName2", unit1, "shortName2", "organisationUnitCode2",
617
new Date(), new Date(), true, "comment" );
618
organisationUnitService.addOrganisationUnit( unit1 );
619
organisationUnitService.addOrganisationUnit( unit2 );
621
GregorianCalendar calendar = new GregorianCalendar();
622
calendar.set( 2005, Calendar.JULY, 1 );
623
Date startDate = calendar.getTime();
624
calendar.set( 2005, Calendar.SEPTEMBER, 1 );
625
Date endDate = calendar.getTime();
626
calendar.set( 2005, Calendar.AUGUST, 1 );
627
Date date = calendar.getTime();
629
int id1 = organisationUnitService.addOrganisationUnitHierarchy( date );
631
Collection<OrganisationUnitHierarchy> c1 = organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate );
632
Iterator<OrganisationUnitHierarchy> i1 = c1.iterator();
633
OrganisationUnitHierarchy h1 = i1.next();
635
assertTrue( c1.size() == 1 );
636
assertTrue( h1.getId() == id1 );
638
OrganisationUnit unit3 = new OrganisationUnit( "orgUnitName3", "shortName3", "organisationUnitCode3",
639
new Date(), new Date(), true, "comment" );
640
organisationUnitService.addOrganisationUnit( unit3 );
642
organisationUnitService.addOrganisationUnitHierarchy( date );
644
OrganisationUnit unit4 = new OrganisationUnit( "orgUnitName4", "shortName4", "organisationUnitCode4",
645
new Date(), new Date(), true, "comment" );
646
organisationUnitService.addOrganisationUnit( unit4 );
648
int id3 = organisationUnitService.addOrganisationUnitHierarchy( date );
650
Collection<OrganisationUnitHierarchy> c2 = organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate );
651
Iterator<OrganisationUnitHierarchy> i2 = c2.iterator();
652
OrganisationUnitHierarchy h2 = i2.next();
654
assertTrue( c2.size() == 1 );
655
assertTrue( h2.getId() == id3 );
659
public void testGetOrganisationUnitHierarchies()
663
OrganisationUnit unit1 = new OrganisationUnit( "orgUnitName1", "shortName1", "organisationUnitCode1",
664
new Date(), new Date(), true, "comment" );
665
OrganisationUnit unit2 = new OrganisationUnit( "orgUnitName2", unit1, "shortName2", "organisationUnitCode2",
666
new Date(), new Date(), true, "comment" );
667
organisationUnitService.addOrganisationUnit( unit1 );
668
organisationUnitService.addOrganisationUnit( unit2 );
670
// creates a start and end-date for a period
671
GregorianCalendar calendar = new GregorianCalendar();
672
calendar.set( 2005, Calendar.JULY, 1 );
673
Date startDate = calendar.getTime();
674
calendar.set( 2005, Calendar.SEPTEMBER, 1 );
675
Date endDate = calendar.getTime();
677
// creates a HierarchyVersion
678
calendar.set( 2005, Calendar.MAY, 15 );
679
organisationUnitService.addOrganisationUnitHierarchy( calendar.getTime() );
681
// creates a HierarchyVersion
682
calendar.set( 2005, Calendar.JUNE, 15 );
683
Date jun15 = calendar.getTime();
684
int ver_id2 = organisationUnitService.addOrganisationUnitHierarchy( jun15 );
686
// asserts getOrganisationUnitHierarchies
687
Iterator<OrganisationUnitHierarchy> iterator1 = organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate ).iterator();
688
OrganisationUnitHierarchy hierVerA1 = iterator1.next();
689
assertTrue( hierVerA1.getId() == ver_id2 );
690
assertTrue( iterator1.hasNext() == false );
692
// creates a HierarchyVersiony
693
calendar.set( 2005, Calendar.JULY, 15 );
694
Date jul15 = calendar.getTime();
695
int ver_id3 = organisationUnitService.addOrganisationUnitHierarchy( jul15 );
697
// asserts getOrganisationUnitHierarchies
698
Iterator<OrganisationUnitHierarchy> iterator2 = organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate ).iterator();
699
OrganisationUnitHierarchy hierVerB1 = iterator2.next();
700
OrganisationUnitHierarchy hierVerB2 = iterator2.next();
701
assertTrue( hierVerB1.getId() == ver_id2 );
702
assertTrue( hierVerB2.getId() == ver_id3 );
703
assertTrue( iterator2.hasNext() == false );
705
// creates a HierarchyVersion
706
calendar.set( 2005, Calendar.AUGUST, 15 );
707
int ver_id4 = organisationUnitService.addOrganisationUnitHierarchy( calendar.getTime() );
709
// creates a HierarchyVersion
710
calendar.set( 2005, Calendar.SEPTEMBER, 15 );
711
organisationUnitService.addOrganisationUnitHierarchy( calendar.getTime() );
713
// asserts right number of HierarchyVersions are retrieved
714
assertTrue( organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate ).size() == 3 );
716
// asserts getOrganisationUnitHierarchies
717
Iterator<OrganisationUnitHierarchy> iterator3 = organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate ).iterator();
718
OrganisationUnitHierarchy hierVerC1 = iterator3.next();
719
OrganisationUnitHierarchy hierVerC2 = iterator3.next();
720
OrganisationUnitHierarchy hierVerC3 = iterator3.next();
721
assertTrue( hierVerC1.getId() == ver_id2 );
722
assertTrue( hierVerC2.getId() == ver_id3 );
723
assertTrue( hierVerC3.getId() == ver_id4 );
724
assertTrue( iterator3.hasNext() == false );
726
// asserts getOrganisationUnitHierarchy
727
OrganisationUnitHierarchy hierarchy2 = organisationUnitService.getOrganisationUnitHierarchy( ver_id2 );
728
assertTrue( hierarchy2.getDate().equals( jun15 ) );
730
OrganisationUnitHierarchy hierarchy3 = organisationUnitService.getOrganisationUnitHierarchy( ver_id3 );
731
assertTrue( hierarchy3.getDate().equals( jul15 ) );
734
public void testClearOrganisationUnitHierarchyHistory()
737
OrganisationUnit unit1 = new OrganisationUnit( "orgUnitName1", "shortName1", "organisationUnitCode1",
738
new Date(), new Date(), true, "comment" );
739
OrganisationUnit unit2 = new OrganisationUnit( "orgUnitName2", unit1, "shortName2", "organisationUnitCode2",
740
new Date(), new Date(), true, "comment" );
742
organisationUnitService.addOrganisationUnit( unit1 );
743
organisationUnitService.addOrganisationUnit( unit2 );
745
Calendar calendar = Calendar.getInstance();
748
calendar.set( 2005, Calendar.JULY, 1 );
749
organisationUnitService.addOrganisationUnitHierarchy( calendar.getTime() );
752
calendar.set( 2005, Calendar.SEPTEMBER, 1 );
753
organisationUnitService.addOrganisationUnitHierarchy( calendar.getTime() );
756
calendar.set( 2005, Calendar.AUGUST, 1 );
757
organisationUnitService.addOrganisationUnitHierarchy( calendar.getTime() );
759
calendar.set( 2005, Calendar.JUNE, 1 );
760
Date startDate = calendar.getTime();
762
calendar.set( 2005, Calendar.OCTOBER, 1 );
763
Date endDate = calendar.getTime();
765
Collection<OrganisationUnitHierarchy> hierarchies = organisationUnitService.getOrganisationUnitHierarchies(
766
startDate, endDate );
768
assertTrue( hierarchies.size() == 3 );
770
organisationUnitService.clearOrganisationUnitHierarchyHistory();
772
Collection<OrganisationUnitHierarchy> clearedHierarchies = organisationUnitService.getOrganisationUnitHierarchies( startDate, endDate );
774
Iterator<OrganisationUnitHierarchy> iterator = clearedHierarchies.iterator();
776
calendar.set( 1970, Calendar.JANUARY, 1 );
777
Date epoch = calendar.getTime();
779
OrganisationUnitHierarchy clearedHierarchy = iterator.next();
781
assertTrue( clearedHierarchies.size() == 1 );
782
assertTrue( clearedHierarchy.getDate().equals( epoch ) );
785
// -------------------------------------------------------------------------
786
// OrganisationUnitGroupSets
787
// -------------------------------------------------------------------------
789
public void testOrganisationUnitGroupSetsBasic()
792
OrganisationUnitGroup organisationUnitGroup1 = new OrganisationUnitGroup();
793
organisationUnitGroup1.setName( "oug1" );
794
OrganisationUnitGroup organisationUnitGroup2 = new OrganisationUnitGroup();
795
organisationUnitGroup2.setName( "oug2" );
796
OrganisationUnitGroup organisationUnitGroup3 = new OrganisationUnitGroup();
797
organisationUnitGroup3.setName( "oug3" );
798
OrganisationUnitGroup organisationUnitGroup4 = new OrganisationUnitGroup();
799
organisationUnitGroup4.setName( "oug4" );
801
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup1 );
802
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup2 );
803
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup3 );
804
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup4 );
806
OrganisationUnitGroupSet organisationUnitGroupSet1 = new OrganisationUnitGroupSet();
807
organisationUnitGroupSet1.setName( "ougs1" );
808
organisationUnitGroupSet1.setCompulsory( true );
809
organisationUnitGroupSet1.setExclusive( false );
810
organisationUnitGroupSet1.getOrganisationUnitGroups().add( organisationUnitGroup1 );
811
organisationUnitGroupSet1.getOrganisationUnitGroups().add( organisationUnitGroup2 );
812
organisationUnitGroupSet1.getOrganisationUnitGroups().add( organisationUnitGroup3 );
814
int id1 = organisationUnitGroupService.addOrganisationUnitGroupSet( organisationUnitGroupSet1 );
817
assertNotNull( organisationUnitGroupService.getOrganisationUnitGroupSet( id1 ) );
819
assertEquals( organisationUnitGroupService.getOrganisationUnitGroupSet( id1 ).getName(), "ougs1" );
821
assertTrue( organisationUnitGroupService.getOrganisationUnitGroupSet( id1 ).getOrganisationUnitGroups().size() == 3 );
823
organisationUnitGroupSet1.getOrganisationUnitGroups().remove( organisationUnitGroup3 );
825
organisationUnitGroupService.updateOrganisationUnitGroupSet( organisationUnitGroupSet1 );
828
assertTrue( organisationUnitGroupService.getOrganisationUnitGroupSet( id1 ).getOrganisationUnitGroups().size() == 2 );
830
OrganisationUnitGroupSet organisationUnitGroupSet2 = new OrganisationUnitGroupSet();
831
organisationUnitGroupSet2.setName( "ougs2" );
832
organisationUnitGroupSet2.setCompulsory( true );
833
organisationUnitGroupSet2.setExclusive( false );
834
organisationUnitGroupSet2.getOrganisationUnitGroups().add( organisationUnitGroup4 );
836
int id2 = organisationUnitGroupService.addOrganisationUnitGroupSet( organisationUnitGroupSet2 );
839
assertTrue( organisationUnitGroupService.getAllOrganisationUnitGroupSets().size() == 2 );
841
organisationUnitGroupService.deleteOrganisationUnitGroupSet( organisationUnitGroupSet1 );
842
organisationUnitGroupService.deleteOrganisationUnitGroupSet( organisationUnitGroupSet2 );
844
assertNull( organisationUnitGroupService.getOrganisationUnitGroupSet( id1 ) );
845
assertNull( organisationUnitGroupService.getOrganisationUnitGroupSet( id2 ) );
848
public void testGetOrganisationUnitGroupSetsByName()
851
OrganisationUnitGroup organisationUnitGroup1 = new OrganisationUnitGroup();
852
organisationUnitGroup1.setName( "oug1" );
853
OrganisationUnitGroup organisationUnitGroup2 = new OrganisationUnitGroup();
854
organisationUnitGroup2.setName( "oug2" );
855
OrganisationUnitGroup organisationUnitGroup3 = new OrganisationUnitGroup();
856
organisationUnitGroup3.setName( "oug3" );
857
OrganisationUnitGroup organisationUnitGroup4 = new OrganisationUnitGroup();
858
organisationUnitGroup4.setName( "oug4" );
860
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup1 );
861
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup2 );
862
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup3 );
863
organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup4 );
865
String ougs1 = "ougs1";
866
String ougs2 = "ougs2";
868
OrganisationUnitGroupSet organisationUnitGroupSet1 = new OrganisationUnitGroupSet();
869
organisationUnitGroupSet1.setName( ougs1 );
870
organisationUnitGroupSet1.setCompulsory( true );
871
organisationUnitGroupSet1.setExclusive( true );
872
organisationUnitGroupSet1.getOrganisationUnitGroups().add( organisationUnitGroup1 );
873
organisationUnitGroupSet1.getOrganisationUnitGroups().add( organisationUnitGroup2 );
874
organisationUnitGroupSet1.getOrganisationUnitGroups().add( organisationUnitGroup3 );
876
OrganisationUnitGroupSet organisationUnitGroupSet2 = new OrganisationUnitGroupSet();
877
organisationUnitGroupSet2.setName( ougs2 );
878
organisationUnitGroupSet2.setCompulsory( false );
879
organisationUnitGroupSet2.setExclusive( false );
880
organisationUnitGroupSet2.getOrganisationUnitGroups().add( organisationUnitGroup4 );
882
organisationUnitGroupService.addOrganisationUnitGroupSet( organisationUnitGroupSet1 );
883
organisationUnitGroupService.addOrganisationUnitGroupSet( organisationUnitGroupSet2 );
885
OrganisationUnitGroupSet set1 = organisationUnitGroupService.getOrganisationUnitGroupSetByName( ougs1 );
886
OrganisationUnitGroupSet set2 = organisationUnitGroupService.getOrganisationUnitGroupSetByName( ougs2 );
888
assertEquals( set1.getName(), ougs1 );
889
assertEquals( set2.getName(), ougs2 );
891
Collection<OrganisationUnitGroupSet> compulsorySets = organisationUnitGroupService
892
.getCompulsoryOrganisationUnitGroupSets();
893
assertEquals( compulsorySets.size(), 1 );
895
Collection<OrganisationUnitGroupSet> exclusiveSets = organisationUnitGroupService
896
.getExclusiveOrganisationUnitGroupSets();
897
assertEquals( exclusiveSets.size(), 1 );
899
Collection<OrganisationUnitGroupSet> containingSets = organisationUnitGroupService
900
.getExclusiveOrganisationUnitGroupSetsContainingGroup( organisationUnitGroup1 );
901
assertEquals( containingSets.size(), 1 );
904
// -------------------------------------------------------------------------
905
// OrganisationUnitLevel
906
// -------------------------------------------------------------------------
908
public void testAddGetOrganisationUnitLevel()
910
OrganisationUnitLevel levelA = new OrganisationUnitLevel( 1, "National" );
911
OrganisationUnitLevel levelB = new OrganisationUnitLevel( 2, "District" );
913
int idA = organisationUnitService.addOrganisationUnitLevel( levelA );
914
int idB = organisationUnitService.addOrganisationUnitLevel( levelB );
916
assertEquals( levelA, organisationUnitService.getOrganisationUnitLevel( idA ) );
917
assertEquals( levelB, organisationUnitService.getOrganisationUnitLevel( idB ) );
920
public void testGetOrganisationUnitLevels()
922
OrganisationUnitLevel level1 = new OrganisationUnitLevel( 1, "National" );
923
OrganisationUnitLevel level2 = new OrganisationUnitLevel( 2, "District" );
924
OrganisationUnitLevel level4 = new OrganisationUnitLevel( 4, "PHU" );
926
organisationUnitService.addOrganisationUnitLevel( level1 );
927
organisationUnitService.addOrganisationUnitLevel( level2 );
928
organisationUnitService.addOrganisationUnitLevel( level4 );
930
OrganisationUnit unitA = createOrganisationUnit( 'A' );
931
OrganisationUnit unitB = createOrganisationUnit( 'B', unitA );
932
OrganisationUnit unitC = createOrganisationUnit( 'C', unitB );
933
OrganisationUnit unitD = createOrganisationUnit( 'D', unitC );
935
unitA.getChildren().add( unitB );
936
unitB.getChildren().add( unitC );
937
unitC.getChildren().add( unitD );
939
organisationUnitService.addOrganisationUnit( unitA );
940
organisationUnitService.addOrganisationUnit( unitB );
941
organisationUnitService.addOrganisationUnit( unitC );
942
organisationUnitService.addOrganisationUnit( unitD );
944
Iterator<OrganisationUnitLevel> actual = organisationUnitService.getOrganisationUnitLevels().iterator();
946
assertNotNull( actual );
947
assertEquals( level1, actual.next() );
948
assertEquals( level2, actual.next() );
950
OrganisationUnitLevel level3 = actual.next();
952
assertEquals( 3, level3.getLevel() );
953
assertEquals( "Level 3", level3.getName() );
955
assertEquals( level4, actual.next() );
958
public void testRemoveOrganisationUnitLevel()
960
OrganisationUnitLevel levelA = new OrganisationUnitLevel( 1, "National" );
961
OrganisationUnitLevel levelB = new OrganisationUnitLevel( 2, "District" );
963
int idA = organisationUnitService.addOrganisationUnitLevel( levelA );
964
int idB = organisationUnitService.addOrganisationUnitLevel( levelB );
966
assertNotNull( organisationUnitService.getOrganisationUnitLevel( idA ) );
967
assertNotNull( organisationUnitService.getOrganisationUnitLevel( idB ) );
969
organisationUnitService.deleteOrganisationUnitLevel( levelA );
971
assertNull( organisationUnitService.getOrganisationUnitLevel( idA ) );
972
assertNotNull( organisationUnitService.getOrganisationUnitLevel( idB ) );
974
organisationUnitService.deleteOrganisationUnitLevel( levelB );
976
assertNull( organisationUnitService.getOrganisationUnitLevel( idA ) );
977
assertNull( organisationUnitService.getOrganisationUnitLevel( idB ) );
980
public void testRemoveOrganisationUnitLevels()
982
OrganisationUnitLevel levelA = new OrganisationUnitLevel( 1, "National" );
983
OrganisationUnitLevel levelB = new OrganisationUnitLevel( 2, "District" );
985
int idA = organisationUnitService.addOrganisationUnitLevel( levelA );
986
int idB = organisationUnitService.addOrganisationUnitLevel( levelB );
988
assertNotNull( organisationUnitService.getOrganisationUnitLevel( idA ) );
989
assertNotNull( organisationUnitService.getOrganisationUnitLevel( idB ) );
991
organisationUnitService.deleteOrganisationUnitLevels();
993
sessionUtil.clearCurrentSession();
995
assertNull( organisationUnitService.getOrganisationUnitLevel( idA ) );
996
assertNull( organisationUnitService.getOrganisationUnitLevel( idB ) );