/* * PatientView * * Copyright (c) Worth Solutions Limited 2004-2013 * * This file is part of PatientView. * * PatientView is free software: you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * PatientView is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License along with PatientView in a file * titled COPYING. If not, see <http://www.gnu.org/licenses/>. * * @package PatientView * @link http://www.patientview.org * @author PatientView <info@patientview.org> * @copyright Copyright (c) 2004-2013, Worth Solutions Limited * @license http://www.gnu.org/licenses/gpl-3.0.html The GNU General Public License V3.0 */ package org.patientview.test.repository; import org.apache.commons.collections.CollectionUtils; import org.patientview.patientview.logon.UnitAdmin; import org.patientview.model.Specialty; import org.patientview.model.Unit; import org.patientview.patientview.model.UnitStat; import org.patientview.patientview.model.User; import org.patientview.repository.UnitDao; import org.patientview.repository.UnitStatDao; import org.patientview.test.helpers.RepositoryHelpers; import org.junit.Before; import org.junit.Test; import org.patientview.test.helpers.SecurityHelpers; import javax.inject.Inject; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; /** * */ public class UnitDaoTest extends BaseDaoTest { @Inject private UnitDao unitDao; @Inject private UnitStatDao unitStatDao; @Inject private RepositoryHelpers repositoryHelpers; @Inject private SecurityHelpers securityHelpers; private Specialty specialty; @Test public void testAddGetUnitStatByUnitCode() { // NOTE: the unit codes need to be uppercase! UnitStat unitStat = new UnitStat(); unitStat.setAction("action1"); unitStat.setCount(1); unitStat.setUnitcode("UNITCODE1"); unitStat.setYearmonth("1207"); unitStatDao.save(unitStat); unitStat = new UnitStat(); unitStat.setAction("action1"); unitStat.setCount(1); unitStat.setUnitcode("UNITCODE1"); unitStat.setYearmonth("1207"); unitStatDao.save(unitStat); // different unit unitStat = new UnitStat(); unitStat.setAction("action2"); unitStat.setCount(1); unitStat.setUnitcode("UNITCODE2"); unitStat.setYearmonth("1207"); unitStatDao.save(unitStat); List<UnitStat> unitStats = unitStatDao.get("UNITCODE1"); assertEquals("Wrong number of unitstats", 2, unitStats.size()); assertEquals("Wrong sample yearmonth", "1207", unitStats.get(0).getYearmonth()); } @Before public void createUnits() { specialty = repositoryHelpers.createSpecialty("Specialty1", "Specialty1", "A test specialty"); Unit unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE1"); unit.setName("z"); unit.setShortname("nam1"); // not required unit.setUnituser("user1"); unitDao.save(unit); unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE2"); unit.setName("y"); unit.setShortname("nam2"); // not required unit.setUnituser("user1"); unitDao.save(unit); unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE3"); unit.setName("x"); unit.setShortname("nam3"); // not required unit.setUnituser("user2"); unitDao.save(unit); unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE4"); unit.setName("w"); unit.setShortname("nam4"); // not required unit.setUnituser(""); // no user unitDao.save(unit); } @Test public void testAddGetUnit() { Unit unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE5"); unit.setName("nameA"); unit.setShortname("namA"); // not required unit.setUnituser("userA"); unitDao.save(unit); Unit checkUnit = unitDao.get(unit.getId()); assertTrue("Unit not found with id", checkUnit != null && checkUnit.getId() > 0); assertEquals("Unitname incorrect", "nameA", checkUnit.getName()); checkUnit = unitDao.get(unit.getUnitcode(), specialty); assertTrue("Unit not found with unitcode", checkUnit != null && checkUnit.getId() > 0); } @Test public void testGetAllSort() { List<Unit> units = unitDao.getAll(false, specialty); assertEquals("Incorrect number of units found", 4, units.size()); assertEquals("Incorrect first unit", "UNITCODE1", units.get(0).getUnitcode()); units = unitDao.getAll(true, specialty); assertEquals("Incorrect number of units found", 4, units.size()); assertEquals("Incorrect first unit", "UNITCODE4", units.get(0).getUnitcode()); } @Test public void testGetUnitsWIthUser() { assertEquals("Incorrect number of units with user", 3, unitDao.getUnitsWithUser(specialty).size()); } @Test public void testWithUnitCodes() { List<String> unitCodes = new ArrayList<String>(); unitCodes.add("UNITCODE2"); unitCodes.add("UNITCODE4"); List<Unit> units = unitDao.get(unitCodes, specialty); assertEquals("Incorrect number of units", 2, units.size()); } @Test public void testNotTheseUnitCodes() { List<String> unitCodes = new ArrayList<String>(); String[] notTheseUnitCodes = new String[] {"UNITCODE2", "UNITCODE4"}; List<Unit> units = unitDao.get(unitCodes, notTheseUnitCodes, new String[]{}, specialty); assertEquals("Incorrect number of units", 2, units.size()); assertEquals("Incorrect first unit", "UNITCODE3", units.get(0).getUnitcode()); assertEquals("Incorrect last unit", "UNITCODE1", units.get(1).getUnitcode()); } @Test public void testNotTheseUnitCodesPlusUnitCode() { Unit unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE5"); unit.setName("za"); unit.setShortname("nam5"); // not required unit.setUnituser("user5"); unitDao.save(unit); List<String> unitCodes = new ArrayList<String>(); String[] notTheseUnitCodes = new String[] {"UNITCODE2", "UNITCODE4"}; String[] plusUnitCodes = new String[] {"UNITCODE5"}; List<Unit> units = unitDao.get(unitCodes, notTheseUnitCodes, plusUnitCodes, specialty); assertEquals("Incorrect number of units", 3, units.size()); assertEquals("Incorrect first unit", "UNITCODE3", units.get(0).getUnitcode()); assertEquals("Incorrect last unit", "UNITCODE5", units.get(2).getUnitcode()); } @Test public void testGetUnitCodesNotTheseUnitCodesPlusUnitCode() { Unit unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODE5"); unit.setName("za"); unit.setShortname("nam5"); // not required unit.setUnituser("user5"); unitDao.save(unit); List<String> unitCodes = new ArrayList<String>(); unitCodes.add("UNITCODE3"); String[] notTheseUnitCodes = new String[] {"UNITCODE2", "UNITCODE4"}; String[] plusUnitCodes = new String[] {"UNITCODE5"}; List<Unit> units = unitDao.get(unitCodes, notTheseUnitCodes, plusUnitCodes, specialty); assertEquals("Incorrect number of units", 2, units.size()); assertEquals("Incorrect first unit", "UNITCODE3", units.get(0).getUnitcode()); assertEquals("Incorrect last unit", "UNITCODE5", units.get(1).getUnitcode()); } @Test public void testGetUnitUsers() { // create 2 unit, one with 2 users, one with 1 user // with usermappings and check the users can be pulled back Unit unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODEA"); unit.setName("unit 1"); unit.setShortname("unit 1"); unitDao.save(unit); User user = repositoryHelpers.createUserWithMapping("paulc", "paul@test.com", "p", "Paul", "UNITCODEA", "nhs1", specialty); repositoryHelpers.createSpecialtyUserRole(specialty, user, "unitadmin"); user = repositoryHelpers.createUserWithMapping("deniz", "deniz@test.com", "d", "Deniz", "UNITCODEA", "nhs2", specialty); repositoryHelpers.createSpecialtyUserRole(specialty, user, "unitadmin"); unit = new Unit(); unit.setSpecialty(specialty); // required fields unit.setUnitcode("UNITCODEB"); unit.setName("unit 2"); unit.setShortname("unit 2"); unitDao.save(unit); user = repositoryHelpers.createUserWithMapping("dave", "dave@test.com", "d", "Dave", "UNITCODEB", "nhs3", specialty); repositoryHelpers.createSpecialtyUserRole(specialty, user, "unitadmin"); securityHelpers.loginAsUser("paulc", specialty); List<UnitAdmin> users = unitDao.getUnitUsers("UNITCODEA", specialty); assertEquals("Wrong number of users in unit A", 2, users.size()); users = unitDao.getUnitUsers("UNITCODEB", specialty); assertEquals("Wrong number of users in unit B", 1, users.size()); } /** * test UnitDao.getAllUnitUsers method, this method is used by UnitUsersController. * this method will be used when searching all unit users whose role is 'unitadmin' or 'unitstaff'. */ @Test public void testGetAllUnitUsers() { // create 2 units('UNITCODEA' and 'UNITCODEB') and 3 users('paulc', 'deniz', 'dave') //'paulc' and 'deniz' are in same unit 'UNITCODEA', //'dave' is in 'UNITCODEB'. //'deniz'' role is radaradmin, 'paulc' is 'unitadmin' and 'dave' is 'unitstaff'. // so excuting getAllUnitUsers method will return 2 users, which are 'unitadmin' and 'dave'. Unit unit = new Unit(); unit.setSpecialty(specialty); unit.setUnitcode("UNITCODEA"); unit.setName("unit 1"); unit.setShortname("unit 1"); unitDao.save(unit); unit = new Unit(); unit.setSpecialty(specialty); unit.setUnitcode("UNITCODEB"); unit.setName("unit 2"); unit.setShortname("unit 2"); unitDao.save(unit); User user = repositoryHelpers.createUserWithMapping("paulc", "paul@test.com", "p", "Paul", "UNITCODEA", "nhs1", specialty); repositoryHelpers.createSpecialtyUserRole(specialty, user, "unitadmin"); //this user's role is radaradmin, and he won't be in result list. user = repositoryHelpers.createUserWithMapping("deniz", "deniz@test.com", "d", "Deniz", "UNITCODEA", "nhs2", specialty); repositoryHelpers.createSpecialtyUserRole(specialty, user, "radaradmin"); user = repositoryHelpers.createUserWithMapping("dave", "dave@test.com", "d", "Dave", "UNITCODEB", "nhs3", specialty); repositoryHelpers.createSpecialtyUserRole(specialty, user, "unitstaff"); securityHelpers.loginAsUser("paulc", specialty); List<UnitAdmin> users = unitDao.getAllUnitUsers(specialty); assertEquals("Wrong number of users in unit A", 2, users.size()); List<String> usernames = new ArrayList<String>(); for (UnitAdmin unitAdmin : users) { usernames.add(unitAdmin.getUsername()); } assertEquals("searching result is wrong", 0, CollectionUtils.subtract(Arrays.asList(new String[]{"paulc", "dave"}), usernames).size()); } }