/* * 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.radar.test.dao; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.patientview.model.Centre; import org.patientview.model.Patient; import org.patientview.model.enums.NhsNumberType; import org.patientview.model.generic.DiseaseGroup; import org.patientview.radar.dao.PatientDao; import org.patientview.radar.dao.UserDao; import org.patientview.radar.dao.UtilityDao; import org.patientview.radar.model.filter.PatientUserFilter; import org.patientview.radar.model.filter.ProfessionalUserFilter; import org.patientview.radar.model.user.AdminUser; import org.patientview.radar.model.user.PatientUser; import org.patientview.radar.model.user.ProfessionalUser; import org.patientview.radar.model.user.User; import org.patientview.radar.test.TestDataHelper; import org.patientview.radar.util.RadarUtility; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class UserDaoTest extends BaseDaoTest { private static final Logger LOGGER = LoggerFactory.getLogger(UserDaoTest.class); @Inject private UserDao userDao; @Inject private PatientDao patientDao; @Inject private UtilityDao utilityDao; @Inject private TestDataHelper testDataHelper; private DiseaseGroup diseaseGroup; private Centre centre; @Before public void setUp() { diseaseGroup = new DiseaseGroup(); diseaseGroup.setId("1"); diseaseGroup.setName("testGroup"); diseaseGroup.setShortName("shortName"); centre = new Centre(); centre.setUnitCode("testCodeA"); testDataHelper.createUnit(); testDataHelper.createSpecialty(); } @Test public void testAddGetUser() throws Exception { AdminUser adminUser = new AdminUser(); adminUser.setEmail("admin@radar101.com"); adminUser.setUsername("admin@radar101.com"); adminUser.setName("Admin"); adminUser.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); userDao.saveAdminUser(adminUser); User checkUser = userDao.getUser(adminUser.getEmail()); assertNotNull(checkUser); assertTrue("Not an admin user", checkUser instanceof AdminUser); } @Test public void testAddGetAdminUser() throws Exception { AdminUser adminUser = new AdminUser(); adminUser.setEmail("admin@radar101.com"); adminUser.setUsername("admin@radar101.com"); adminUser.setName("Admin"); adminUser.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); userDao.saveAdminUser(adminUser); AdminUser checkAdminUser = userDao.getAdminUser(adminUser.getEmail()); assertNotNull(checkAdminUser); assertTrue("Does not have a valid ID", checkAdminUser.hasValidId()); assertEquals("Email not persisted", checkAdminUser.getEmail(), adminUser.getEmail()); assertEquals("Username not persisted", checkAdminUser.getUsername(), adminUser.getUsername()); assertEquals("Name not persisted", checkAdminUser.getName(), adminUser.getName()); assertEquals("Password not persisted", checkAdminUser.getPassword(), adminUser.getPassword()); } @Test public void testAddGetProfessionalUser() throws Exception { ProfessionalUser professionalUser = new ProfessionalUser(); professionalUser.setEmail("professional@radar101.com"); professionalUser.setUsername("professional@radar101.com"); professionalUser.setForename("Eddard"); professionalUser.setSurname("Stark"); professionalUser.setRole("Centre role"); professionalUser.setGmc("testGmc"); professionalUser.setCentre(utilityDao.getCentre(1)); professionalUser.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser); ProfessionalUser checkProfessionalUser = userDao.getProfessionalUser(professionalUser.getEmail()); assertNotNull(checkProfessionalUser); assertTrue("Does not have a valid radar ID", checkProfessionalUser.hasValidId()); assertTrue("Does not have a valid user ID", checkProfessionalUser.hasValidUserId()); assertEquals("Email not persisted", checkProfessionalUser.getEmail(), professionalUser.getEmail()); assertEquals("Username not persisted", checkProfessionalUser.getUsername(), professionalUser.getUsername()); assertEquals("Forename not persisted", checkProfessionalUser.getForename(), professionalUser.getForename()); assertEquals("Surname not persisted", checkProfessionalUser.getSurname(), professionalUser.getSurname()); assertEquals("Password not persisted", checkProfessionalUser.getPassword(), professionalUser.getPassword()); assertEquals("Role not persisted", checkProfessionalUser.getRole(), professionalUser.getRole()); assertEquals("GMC not persisted", checkProfessionalUser.getGmc(), professionalUser.getGmc()); } @Test public void testGetProfessionalUserById() throws Exception { ProfessionalUser professionalUser = new ProfessionalUser(); professionalUser.setEmail("professional@radar101.com"); professionalUser.setUsername("professional@radar101.com"); professionalUser.setForename("Eddard"); professionalUser.setSurname("Stark"); professionalUser.setRole("Centre role"); professionalUser.setGmc("testGmc"); professionalUser.setCentre(utilityDao.getCentre(1)); professionalUser.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser); ProfessionalUser checkProfessionalUser = userDao.getProfessionalUser(professionalUser.getId()); assertNotNull(checkProfessionalUser); } @Ignore @Test public void testSavePatientUser() throws Exception { // Construct the user PatientUser patientUser = new PatientUser(); patientUser.setUsername("test_user"); patientUser.setEmail("test_user@test.com"); patientUser.setName("Test Name"); patientUser.setRadarNumber(123); patientUser.setDateOfBirth(new Date()); patientUser.setPassword(User.getPasswordHash("password12")); // Save userDao.savePatientUser(patientUser); // Make sure we have an ID and a date registered assertTrue("Saved user doesn't have an ID", patientUser.getId() > 0); // Make sure it has a date registered assertNotNull("No date registered", patientUser.getDateRegistered()); // Try and get the patient user - should get our new user PatientUser checkUser = userDao.getPatientUser("test_user@test.com"); assertNotNull("Saved user was null on getting from DAO", checkUser); assertEquals("patient name is incorrect", checkUser.getName(), patientUser.getName()); } private PatientUser createPatientUser(String username, long radarNo) throws Exception { PatientUser patientUser = new PatientUser(); patientUser.setUsername(username); patientUser.setRadarNumber(radarNo); patientUser.setDateOfBirth(new Date()); patientUser.setPassword(User.getPasswordHash("password12")); // Save userDao.savePatientUser(patientUser); return patientUser; } @Ignore @Test public void testGetPatientUsers() throws Exception { // need to have tbl_Patient_Users that join to tbl_Demographics for this to work Patient patient = createDemographics("forename", "surname"); createPatientUser("surname01", patient.getId()); Patient patient2 = createDemographics("forename2", "surname2"); createPatientUser("surname02", patient2.getId()); List<PatientUser> patientUsers = userDao.getPatientUsers(new PatientUserFilter(), -1, -1); assertNotNull(patientUsers); assertTrue(patientUsers.size() == 2); } @Ignore @Test public void testGetPatientUsersPage1() throws Exception { Patient patient = createDemographics("forename", "surname"); createPatientUser("surname01", patient.getId()); Patient patient2 = createDemographics("forename2", "surname2"); createPatientUser("surname02", patient2.getId()); List<PatientUser> patientUsers = userDao.getPatientUsers(new PatientUserFilter(), 1, 1); assertNotNull(patientUsers); assertTrue(patientUsers.size() == 1); } @Test public void testDeleteProfessionalUser() throws Exception { ProfessionalUser professionalUser = new ProfessionalUser(); professionalUser.setEmail("professional@radar101.com"); professionalUser.setUsername("professional@radar101.com"); professionalUser.setForename("Eddard"); professionalUser.setSurname("Stark"); professionalUser.setRole("Centre role"); professionalUser.setGmc("testGmc"); professionalUser.setCentre(utilityDao.getCentre(1)); professionalUser.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser); // delete the user and try to pull back userDao.deleteProfessionalUser(professionalUser); ProfessionalUser checkProfessionalUser = userDao.getProfessionalUser(professionalUser.getEmail()); assertNull(checkProfessionalUser); } @Test public void testGetProfessionalUsersInOrder() throws Exception { ProfessionalUser professionalUser1 = new ProfessionalUser(); professionalUser1.setEmail("professional1@radar101.com"); professionalUser1.setUsername("professional1@radar101.com"); professionalUser1.setForename("Eddard"); professionalUser1.setSurname("Stark"); professionalUser1.setCentre(utilityDao.getCentre(1)); professionalUser1.setRole("Centre role"); professionalUser1.setGmc("testGmc"); professionalUser1.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser1); ProfessionalUser professionalUser2 = new ProfessionalUser(); professionalUser2.setEmail("professional2@radar101.com"); professionalUser2.setUsername("professional2@radar101.com"); professionalUser2.setForename("Tyrion"); professionalUser2.setSurname("Lannister"); professionalUser2.setCentre(utilityDao.getCentre(1)); professionalUser2.setRole("Centre role"); professionalUser2.setGmc("testGmc"); professionalUser2.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser2); List<ProfessionalUser> checkProfessionalUsers = userDao.getProfessionalUsers(new ProfessionalUserFilter(), -1, -1); assertTrue("No professional users found", !checkProfessionalUsers.isEmpty() && checkProfessionalUsers.size() > 0); assertTrue("To many professional users found", checkProfessionalUsers.size() == 2); // first one should Tyrion assertEquals("First user in list is not correct", checkProfessionalUsers.get(0).getId(), professionalUser2.getId()); } @Test public void testSearchProfessionalUsers() throws Exception { ProfessionalUser professionalUser1 = new ProfessionalUser(); professionalUser1.setEmail("professional1@radar101.com"); professionalUser1.setUsername("professional1@radar101.com"); professionalUser1.setForename("Eddard"); professionalUser1.setSurname("Stark"); professionalUser1.setRole("Centre role"); professionalUser1.setGmc("testGmc"); professionalUser1.setCentre(utilityDao.getCentre(1)); professionalUser1.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser1); ProfessionalUser professionalUser2 = new ProfessionalUser(); professionalUser2.setEmail("professional2@radar101.com"); professionalUser2.setUsername("professional2@radar101.com"); professionalUser2.setForename("Tyrion"); professionalUser2.setSurname("Lannister"); professionalUser2.setRole("Centre role"); professionalUser2.setCentre(utilityDao.getCentre(1)); professionalUser2.setGmc("testGmc"); professionalUser2.setPassword(RadarUtility.generateNewPassword()); userDao.saveProfessionalUser(professionalUser2); ProfessionalUserFilter professionalUserFilter = new ProfessionalUserFilter(); professionalUserFilter.addSearchCriteria(ProfessionalUserFilter.UserField.EMAIL.getDatabaseFieldName(), professionalUser2.getEmail()); List<ProfessionalUser> checkProfessionalUsers = userDao.getProfessionalUsers(professionalUserFilter, -1, -1); assertTrue("No professional users found", !checkProfessionalUsers.isEmpty() && checkProfessionalUsers.size() > 0); assertTrue("To many professional users found", checkProfessionalUsers.size() == 1); // first one should Tyrion assertEquals("First user in list is not correct", checkProfessionalUsers.get(0).getId(), professionalUser2.getId()); } @Ignore @Test public void testAddGetPatientUser() throws Exception { PatientUser patientUser = new PatientUser(); patientUser.setRadarNumber(1); patientUser.setEmail("patient@radar101.com"); patientUser.setUsername("patient@radar101.com"); patientUser.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); patientUser.setDateOfBirth(new Date()); patientUser.setDateRegistered(new Date()); userDao.savePatientUser(patientUser); PatientUser checkPatientUser = userDao.getPatientUser(patientUser.getEmail()); assertNotNull(checkPatientUser); assertTrue("Does not have a valid radar ID", checkPatientUser.hasValidId()); assertTrue("Does not have a valid user ID", checkPatientUser.hasValidUserId()); assertEquals("Email not persisted", checkPatientUser.getEmail(), patientUser.getEmail()); assertEquals("Radar no not persisted", checkPatientUser.getRadarNumber(), patientUser.getRadarNumber()); assertEquals("Username not persisted", checkPatientUser.getUsername(), patientUser.getUsername()); assertEquals("Password not persisted", checkPatientUser.getPassword(), patientUser.getPassword()); } @Ignore @Test public void testGetPatientUserById() throws Exception { PatientUser patientUser = new PatientUser(); patientUser.setRadarNumber(1); patientUser.setEmail("patient@radar101.com"); patientUser.setUsername("patient@radar101.com"); patientUser.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); patientUser.setDateOfBirth(new Date()); patientUser.setDateRegistered(new Date()); userDao.savePatientUser(patientUser); PatientUser checkPatientUser = userDao.getPatientUser(patientUser.getId()); assertNotNull(checkPatientUser); } @Test public void testDeletePatientUser() throws Exception { PatientUser patientUser = new PatientUser(); patientUser.setRadarNumber(1); patientUser.setEmail("patient@radar101.com"); patientUser.setUsername("patient@radar101.com"); patientUser.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); patientUser.setDateOfBirth(new Date()); patientUser.setDateRegistered(new Date()); patientUser.setClinician(true); userDao.savePatientUser(patientUser); // delete the user and try to pull back userDao.deletePatientUser(patientUser); PatientUser checkPatientUser = userDao.getPatientUser(patientUser.getEmail()); assertNull(checkPatientUser); } @Ignore @Test public void testSearchPatientUsers() throws Exception { PatientUser patientUser1 = new PatientUser(); patientUser1.setRadarNumber(1); patientUser1.setEmail("patient1@radar101.com"); patientUser1.setUsername("patient1@radar101.com"); patientUser1.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); patientUser1.setDateOfBirth(new Date()); patientUser1.setDateRegistered(new Date()); userDao.savePatientUser(patientUser1); PatientUser patientUser2 = new PatientUser(); patientUser2.setRadarNumber(2); patientUser2.setEmail("patient2@radar101.com"); patientUser2.setUsername("patient2@radar101.com"); patientUser2.setPassword(User.getPasswordHash(RadarUtility.generateNewPassword())); patientUser2.setDateOfBirth(new Date()); patientUser2.setDateRegistered(new Date()); userDao.savePatientUser(patientUser2); PatientUserFilter patientUserFilter = new PatientUserFilter(); patientUserFilter.addSearchCriteria(PatientUserFilter.UserField.USERNAME.getDatabaseFieldName(), patientUser2.getUsername()); List<PatientUser> checkPatientUsers = userDao.getPatientUsers(patientUserFilter, -1, -1); assertTrue("No patient users found", !checkPatientUsers.isEmpty() && checkPatientUsers.size() > 0); assertTrue("To many patient users found", checkPatientUsers.size() == 1); // first one should patient 2 assertEquals("First user in list is not correct", checkPatientUsers.get(0).getId(), patientUser2.getId()); } @Test public void testUserExistsInPatientView() { // just test the sql is valid - i.e. stop pvdbschema changes breaking this simple query in future assertFalse(userDao.userExistsInPatientView("1234xyz")); } private Patient createDemographics(String forename, String surname) { Patient patient = new Patient(); patient.setForename(forename); patient.setSurname(surname); patient.setNhsNumberType(NhsNumberType.NHS_NUMBER); patient.setUnitcode("unitcodeA"); patient.setNhsno(getTestNhsNo()); patient.setDiseaseGroup(diseaseGroup); patient.setRenalUnit(centre); patientDao.save(patient); assertNotNull(patient.getId()); return patient; } }