/* * 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.Test; import org.patientview.model.Centre; import org.patientview.model.Patient; import org.patientview.model.Sex; import org.patientview.model.Status; import org.patientview.model.enums.NhsNumberType; import org.patientview.model.generic.DiseaseGroup; import org.patientview.radar.dao.DemographicsDao; import org.patientview.radar.dao.DiagnosisDao; import org.patientview.radar.dao.PatientDao; import org.patientview.radar.dao.UserDao; import org.patientview.radar.dao.UtilityDao; import org.patientview.radar.model.Diagnosis; import org.patientview.radar.model.DiagnosisCode; import org.patientview.radar.model.filter.DemographicsFilter; import org.patientview.radar.service.UserManager; import org.patientview.radar.test.TestDataHelper; import javax.inject.Inject; import java.util.ArrayList; import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class DemographicDaoTest extends BaseDaoTest { @Inject private DemographicsDao demographicDao; @Inject private DiagnosisDao diagnosisDao; @Inject private UserDao userDao; @Inject private PatientDao patientDao; @Inject private UserManager userManager; @Inject private UtilityDao utilityDao; @Inject private TestDataHelper testDataHelper; private Centre centre; private DiseaseGroup diseaseGroup; @Before public void setUp() { diseaseGroup = new DiseaseGroup(); diseaseGroup.setId("2"); diseaseGroup.setName("testGroup"); diseaseGroup.setShortName("shortName"); centre = new Centre(); centre.setUnitCode("testCodeA"); testDataHelper.createDiagCode(); testDataHelper.createUnit(); testDataHelper.createConsultant(); } @Test public void testSaveDemographics() throws Exception { createDemographics("Test", "User"); } @Test public void testGetDemographic() throws Exception { Patient patient = createDemographics("Test", "User"); Patient check = patientDao.getById(patient.getId()); // Check it's not null assertNotNull("Demographics was null", check); // Check radar number is correct assertEquals("Wrong radar number", patient.getId(), check.getId()); } @Test public void testGetDemographics() throws Exception { createDemographics("Test", "User"); createDemographics("Test2", "User2"); List<Patient> demographics = demographicDao.getDemographics(new DemographicsFilter(), -1, -1); assertNotNull("List was null", demographics); assertEquals(2, demographics.size()); } @Test public void testGetDemographicsPage1() throws Exception { createDemographics("Test", "User"); createDemographics("Test2", "User2"); List<Patient> demographics = demographicDao.getDemographics(new DemographicsFilter(), 1, 1); assertNotNull(demographics); assertTrue(demographics.size() == 1); } @Test public void testGetDemographicsByNhs() throws Exception { // Note: this only works if you use uppercase nhs numbers createDemographics("Test", "User", "NHS123"); createDemographics("Test2", "User2", "NHS789"); DemographicsFilter demographicsFilter = new DemographicsFilter(); demographicsFilter.addSearchCriteria(DemographicsFilter.UserField.NHSNO.toString(), "NHS123"); List<Patient> demographics = demographicDao.getDemographics(demographicsFilter, -1, -1); assertNotNull("List was null", demographics); assertEquals(1, demographics.size()); } @Test public void testSearchDemographics() throws Exception { addDiagnosisForDemographic(createDemographics("Test", "User"), DiagnosisCode.SRNS_ID); addDiagnosisForDemographic(createDemographics("Test2", "User2"), DiagnosisCode.MPGN_ID); DemographicsFilter demographicsFilter = new DemographicsFilter(); demographicsFilter.addSearchCriteria(DemographicsFilter.UserField.DIAGNOSIS.getDatabaseFieldName(), "srns"); List<Patient> demographics = demographicDao.getDemographics(demographicsFilter, -1, -1); assertNotNull(demographics); assertTrue(demographics.size() == 1); } @Test public void testGetDemographicsByCentre() throws Exception { // Construct centres Centre centre = utilityDao.getCentre(5); Centre centre2 = utilityDao.getCentre(2); String nhsNo1 = getTestNhsNo(); String nhsNo2 = getTestNhsNo(); createDemographics("Test", "User", centre, nhsNo1); createDemographics("Test2", "User2", centre, nhsNo2); createDemographics("Test3", "User3", centre2, null); // Call DAO List<String> unitCodes = new ArrayList<String>(); unitCodes.add(centre.getUnitCode()); List<Patient> demographics = patientDao.getPatientsByUnitCode(unitCodes); assertNotNull("List was null", demographics); assertEquals("Wrong size", 2, demographics.size()); for (Patient de : demographics) { assertTrue("Wrong centre", de.getRenalUnit().getUnitCode().equals("5")); } } @Test public void testGetSexUnknown() throws Exception { Sex sex = demographicDao.getSex(23232L); assertNull("Sex not null for unknown", sex); } @Test public void testGetSexes() throws Exception { testDataHelper.createSex(); List<Sex> sexes = demographicDao.getSexes(); assertNotNull("Sexes was null", sexes); assertEquals("Wrong size", 3, sexes.size()); } @Test public void testGetStatusUnknown() throws Exception { testDataHelper.createSex(); Status status = demographicDao.getStatus(23232L); assertNull("Status not null for unknown", status); } @Test public void testGetStatuses() throws Exception { testDataHelper.createStatus(); List<Status> statuses = demographicDao.getStatuses(); assertNotNull("Statuses was null", statuses); assertEquals("Wrong size", 6, statuses.size()); } private void addDiagnosisForDemographic(Patient patient, Long diagnosisCodeId) { Diagnosis diagnosis = new Diagnosis(); diagnosis.setText("Testing"); diagnosis.setDiagnosisCode(diagnosisDao.getDiagnosisCode(diagnosisCodeId)); diagnosis.setRadarNumber(patient.getId()); diagnosisDao.saveDiagnosis(diagnosis); } private Patient createDemographics(String forename, String surname, Centre centre, String nhsno) throws Exception { Patient patient = new Patient(); patient.setForename(forename); patient.setSurname(surname); patient.setDob(new Date()); patient.setNhsNumberType(NhsNumberType.NHS_NUMBER); patient.setUnitcode(centre.getUnitCode()); if (nhsno != null) { patient.setNhsno(nhsno); } else { patient.setNhsno(getTestNhsNo()); } patient.setRenalUnit(centre); patient.setDiseaseGroup(diseaseGroup); userManager.addPatientUserOrUpdatePatient(patient); assertNotNull(patient.getId()); return patient; } private Patient createDemographics(String forename, String surname) throws Exception { return createDemographics(forename, surname, centre, null); } private Patient createDemographics(String forename, String surname, String nhsno) throws Exception { return createDemographics(forename, surname, centre, nhsno); } }