org.patientview.test.utils.UnitUtilsTest.java Source code

Java tutorial

Introduction

Here is the source code for org.patientview.test.utils.UnitUtilsTest.java

Source

/*
 * 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.utils;

import org.apache.commons.collections.CollectionUtils;
import org.junit.Before;
import org.junit.Test;
import org.patientview.model.Specialty;
import org.patientview.model.Unit;
import org.patientview.patientview.model.User;
import org.patientview.patientview.model.UserMapping;
import org.patientview.patientview.unit.UnitUtils;
import org.patientview.repository.UnitDao;
import org.patientview.repository.UserMappingDao;
import org.patientview.service.SecurityUserManager;
import org.patientview.test.helpers.SecurityHelpers;
import org.patientview.test.helpers.ServiceHelpers;
import org.patientview.test.service.BaseServiceTest;
import org.springframework.mock.web.MockHttpServletRequest;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class UnitUtilsTest extends BaseServiceTest {

    @Inject
    private ServiceHelpers serviceHelpers;

    @Inject
    private SecurityUserManager securityUserManager;

    @Inject
    private SecurityHelpers securityHelpers;

    @Inject
    private UnitDao unitDao;

    @Inject
    private UserMappingDao userMappingDao;

    // Test suite wide references
    private User unitadmin, superadmin, radaradmin, comboAdmin;
    private Specialty specialty1;

    /**
     * create users and units, set relationships user and unit.
     * 4 users('unitadmin', 'superadmin', 'radaradmin', 'comboAdmin'),
     * 4 units('RADAR1', 'RADAR2', 'RENAL1', 'RENAL2') and 1 specialty
     * 'radaradmin' is in 'RADAR1' unit, 'comboAdmin' in 'RADAR1', 'RENAL1' and 'RENAL2' units, 'unitadmin' in 'RENAL2'
     */
    @Before
    public void initDatas() {
        unitadmin = serviceHelpers.createUser("unitadmin", "username@test.com", "pass", "Test User");
        superadmin = serviceHelpers.createUser("superadmin", "username@test.com", "pass", "Test User");
        radaradmin = serviceHelpers.createUser("radaradmin", "username@test.com", "pass", "Test User");
        comboAdmin = serviceHelpers.createUser("comboAdmin", "username@test.com", "pass", "Test User");

        specialty1 = serviceHelpers.createSpecialty("Specialty 1", "Specialty1", "Test description");

        serviceHelpers.createSpecialtyUserRole(specialty1, superadmin, "superadmin");
        serviceHelpers.createSpecialtyUserRole(specialty1, unitadmin, "unitadmin");
        serviceHelpers.createSpecialtyUserRole(specialty1, comboAdmin, "unitadmin");
        serviceHelpers.createSpecialtyUserRole(specialty1, radaradmin, "radaradmin");

        UserMapping userMapping = new UserMapping();
        userMapping.setNhsno("123");
        userMapping.setUsername("radaradmin");
        userMapping.setSpecialty(specialty1);
        userMapping.setUnitcode("RADAR1");
        userMappingDao.save(userMapping);

        userMapping = new UserMapping();
        userMapping.setNhsno("1234");
        userMapping.setSpecialty(specialty1);
        userMapping.setUsername("comboAdmin");
        userMapping.setUnitcode("RADAR1");
        userMappingDao.save(userMapping);
        userMapping = new UserMapping();
        userMapping.setNhsno("12345");
        userMapping.setSpecialty(specialty1);
        userMapping.setUsername("comboAdmin");
        userMapping.setUnitcode("RENAL2");
        userMappingDao.save(userMapping);
        userMapping = new UserMapping();
        userMapping.setNhsno("12346");
        userMapping.setSpecialty(specialty1);
        userMapping.setUsername("comboAdmin");
        userMapping.setUnitcode("RENAL1");
        userMappingDao.save(userMapping);

        userMapping = new UserMapping();
        userMapping.setNhsno("12347");
        userMapping.setSpecialty(specialty1);
        userMapping.setUsername("unitadmin");
        userMapping.setUnitcode("RENAL2");
        userMappingDao.save(userMapping);

        Unit unit = new Unit();
        unit.setSpecialty(specialty1);
        // required fields
        unit.setUnitcode("RADAR1");
        unit.setName("z");
        unit.setShortname("nam1");
        unit.setSourceType("radargroup");
        unitDao.save(unit);

        unit = new Unit();
        unit.setSpecialty(specialty1);
        // required fields
        unit.setUnitcode("RADAR2");
        unit.setName("y");
        unit.setShortname("nam2");
        unit.setSourceType("radargroup");
        unitDao.save(unit);

        unit = new Unit();
        unit.setSpecialty(specialty1);
        // required fields
        unit.setUnitcode("RENAL1");
        unit.setName("x");
        unit.setShortname("nam3");
        unit.setSourceType("renalunit");
        unitDao.save(unit);

        unit = new Unit();
        unit.setSpecialty(specialty1);
        // required fields
        unit.setUnitcode("RENAL2");
        unit.setName("w");
        unit.setShortname("nam4");
        unit.setSourceType("renalunit");
        unitDao.save(unit);
    }

    /**
     * test UnitUtils.setUserUnits method, this method is used by LogonAddInputAction and UnitAdminAddAction.
     * this method will search units depend on login user's role and sourceType of unit('radargroup', 'renalunit').
     * superadmin will get all 'radargroup' and 'renalunit' units, unitadmin will get all units which he belongs to,
     * other role user won't get any unit, like radaradmin.
     * searching result will be as a attribute in request.
     */
    @Test
    public void testSetUserUnits() {
        //superadmin will get all 4 units.
        loginAsUser(superadmin.getUsername(), specialty1);
        assertTrue("superadmin should be present", securityUserManager.isRolePresent("superadmin"));
        MockHttpServletRequest request = new MockHttpServletRequest();
        UnitUtils.setUserUnits(request);
        List<Unit> units = (List<Unit>) request.getAttribute("units");
        assertEquals("units size is wrong.", 4, units.size());
        List<String> unitcodes = new ArrayList<String>();
        for (Unit unit : units) {
            unitcodes.add(unit.getUnitcode());
        }
        assertEquals("searching result[" + unitcodes.toString() + "] is wrong", 0,
                CollectionUtils
                        .subtract(Arrays.asList(new String[] { "RADAR1", "RADAR2", "RENAL1", "RENAL2" }), unitcodes)
                        .size());
        logout();

        // unitadmin will get one unit.
        loginAsUser(unitadmin.getUsername(), specialty1);
        assertTrue("unitadmin should be present", securityUserManager.isRolePresent("unitadmin"));
        request = new MockHttpServletRequest();
        UnitUtils.setUserUnits(request);
        List<Unit> unitadminUnits = (List<Unit>) request.getAttribute("units");
        assertEquals("units size is wrong.", 1, ((List) request.getAttribute("units")).size());
        assertEquals("searching result is wrong", "RENAL2", unitadminUnits.get(0).getUnitcode());
        logout();

        // comboAdmin will get 3 units.
        loginAsUser(comboAdmin.getUsername(), specialty1);
        assertTrue("comboAdmin should be present", securityUserManager.isRolePresent("unitadmin"));
        request = new MockHttpServletRequest();
        UnitUtils.setUserUnits(request);
        List<Unit> comboAdminUnits = (List<Unit>) request.getAttribute("units");
        assertEquals("units size is wrong.", 3, comboAdminUnits.size());
        List<String> comboAdminUnitcodes = new ArrayList<String>();
        for (Unit unit : comboAdminUnits) {
            comboAdminUnitcodes.add(unit.getUnitcode());
        }
        assertEquals("searching result is wrong", 0,
                CollectionUtils
                        .subtract(Arrays.asList(new String[] { "RADAR1", "RENAL1", "RENAL2" }), comboAdminUnitcodes)
                        .size());
        logout();

        //radaradmin won't get any unit.
        loginAsUser(radaradmin.getUsername(), specialty1);
        assertTrue("radaradmin should be present", securityUserManager.isRolePresent("radaradmin"));
        request = new MockHttpServletRequest();
        UnitUtils.setUserUnits(request);
        assertEquals("units size is wrong.", 0, ((List) request.getAttribute("units")).size());
        logout();
    }

    /**
     * test UnitUtils.setUserRenalUnits method, this method is used by PatientAddInputAction.
     * this method will search units depend on login user's role and 'renalunit' unit
     * superadmin will get all 'renalunit' units, unitadmin will get all 'renalunit' units which he belongs to,
     * other role user won't get any unit, like radaradmin.
     * searching result will be as a attribute in request.
     */
    @Test
    public void testSetUserRenalUnits() {

        //superadmin will get 2 units.
        loginAsUser(superadmin.getUsername(), specialty1);
        assertTrue("superadmin should be present", securityUserManager.isRolePresent("superadmin"));
        MockHttpServletRequest request = new MockHttpServletRequest();
        UnitUtils.setUserRenalUnits(request);
        List<Unit> units = (List<Unit>) request.getAttribute("units");
        assertEquals("units size is wrong.", 2, units.size());
        List<String> unitcodes = new ArrayList<String>();
        for (Unit unit : units) {
            unitcodes.add(unit.getUnitcode());
        }
        assertEquals("searching result is wrong", 0,
                CollectionUtils.subtract(Arrays.asList(new String[] { "RENAL1", "RENAL2" }), unitcodes).size());
        logout();

        // unitadmin will get one unit.
        loginAsUser(unitadmin.getUsername(), specialty1);
        assertTrue("unitadmin should be present", securityUserManager.isRolePresent("unitadmin"));
        request = new MockHttpServletRequest();
        UnitUtils.setUserRenalUnits(request);
        List<Unit> unitadminUnits = (List<Unit>) request.getAttribute("units");
        assertEquals("units size is wrong.", 1, ((List) request.getAttribute("units")).size());
        assertEquals("searching result is wrong", "RENAL2", unitadminUnits.get(0).getUnitcode());
        logout();

        // comboAdmin will get 2 units.
        loginAsUser(comboAdmin.getUsername(), specialty1);
        assertTrue("comboAdmin should be present", securityUserManager.isRolePresent("unitadmin"));
        request = new MockHttpServletRequest();
        UnitUtils.setUserRenalUnits(request);
        List<Unit> comboAdminUnits = (List<Unit>) request.getAttribute("units");
        assertEquals("units size is wrong.", 2, comboAdminUnits.size());
        List<String> comboAdminUnitcodes = new ArrayList<String>();
        for (Unit unit : comboAdminUnits) {
            comboAdminUnitcodes.add(unit.getUnitcode());
        }
        assertEquals("searching result is wrong", 0, CollectionUtils
                .subtract(Arrays.asList(new String[] { "RENAL1", "RENAL2" }), comboAdminUnitcodes).size());
        logout();

        //radaradmin won't get any unit.
        loginAsUser(radaradmin.getUsername(), specialty1);
        assertTrue("radaradmin should be present", securityUserManager.isRolePresent("radaradmin"));
        request = new MockHttpServletRequest();
        UnitUtils.setUserRenalUnits(request);
        assertEquals("units size is wrong.", null, request.getAttribute("units"));
        logout();
    }

    private void loginAsUser(String username, Specialty specialty) {
        securityHelpers.loginAsUser(username, specialty);
    }

    private void logout() {
        securityHelpers.logout();
    }
}