=== added file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/events/RegistrationSingleEventServiceTest.java 2013-09-23 07:49:39 +0000 @@ -0,0 +1,201 @@ +package org.hisp.dhis.dxf2.events; + +/* + * Copyright (c) 2004-2013, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import org.hamcrest.CoreMatchers; +import org.hisp.dhis.DhisTest; +import org.hisp.dhis.common.IdentifiableObjectManager; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dxf2.events.enrollment.EnrollmentService; +import org.hisp.dhis.dxf2.events.event.DataValue; +import org.hisp.dhis.dxf2.events.event.Event; +import org.hisp.dhis.dxf2.events.event.EventService; +import org.hisp.dhis.dxf2.events.person.Person; +import org.hisp.dhis.dxf2.events.person.PersonService; +import org.hisp.dhis.dxf2.importsummary.ImportStatus; +import org.hisp.dhis.dxf2.importsummary.ImportSummary; +import org.hisp.dhis.i18n.I18nFormat; +import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.patient.Patient; +import org.hisp.dhis.program.Program; +import org.hisp.dhis.program.ProgramInstance; +import org.hisp.dhis.program.ProgramInstanceService; +import org.hisp.dhis.program.ProgramStage; +import org.hisp.dhis.program.ProgramStageDataElement; +import org.hisp.dhis.program.ProgramStageDataElementService; +import org.hisp.dhis.program.ProgramStageInstanceService; +import org.hisp.dhis.user.UserService; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Date; +import java.util.HashSet; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * @author Morten Olav Hansen + */ +public class RegistrationSingleEventServiceTest + extends DhisTest +{ + @Autowired + private EventService eventService; + + @Autowired + private PersonService personService; + + @Autowired + private ProgramStageDataElementService programStageDataElementService; + + @Autowired + private EnrollmentService enrollmentService; + + @Autowired + private ProgramInstanceService programInstanceService; + + @Autowired + private ProgramStageInstanceService programStageInstanceService; + + @Autowired + private IdentifiableObjectManager manager; + + @Autowired + private UserService userService; + + private Patient maleA; + private Patient maleB; + private Patient femaleA; + private Patient femaleB; + + private Person personMaleA; + private Person personMaleB; + private Person personFemaleA; + private Person personFemaleB; + + private OrganisationUnit organisationUnitA; + private OrganisationUnit organisationUnitB; + private DataElement dataElementA; + private Program programA; + private ProgramStage programStageA; + + @Override + protected void setUpTest() throws Exception + { + organisationUnitA = createOrganisationUnit( 'A' ); + organisationUnitB = createOrganisationUnit( 'B' ); + manager.save( organisationUnitA ); + manager.save( organisationUnitB ); + + maleA = createPatient( 'A', Patient.MALE, organisationUnitA ); + maleB = createPatient( 'B', Patient.MALE, organisationUnitB ); + femaleA = createPatient( 'C', Patient.FEMALE, organisationUnitA ); + femaleB = createPatient( 'D', Patient.FEMALE, organisationUnitB ); + + manager.save( maleA ); + manager.save( maleB ); + manager.save( femaleA ); + manager.save( femaleB ); + + personMaleA = personService.getPerson( maleA ); + personMaleB = personService.getPerson( maleB ); + personFemaleA = personService.getPerson( femaleA ); + personFemaleB = personService.getPerson( femaleB ); + + dataElementA = createDataElement( 'A' ); + dataElementA.setType( DataElement.VALUE_TYPE_INT ); + manager.save( dataElementA ); + + programStageA = createProgramStage( 'A', 0 ); + manager.save( programStageA ); + + programA = createProgram( 'A', new HashSet(), organisationUnitA ); + programA.setType( Program.SINGLE_EVENT_WITH_REGISTRATION ); + manager.save( programA ); + + ProgramStageDataElement programStageDataElement = new ProgramStageDataElement(); + programStageDataElement.setDataElement( dataElementA ); + programStageDataElement.setProgramStage( programStageA ); + programStageDataElementService.addProgramStageDataElement( programStageDataElement ); + + programStageA.getProgramStageDataElements().add( programStageDataElement ); + programStageA.setProgram( programA ); + programA.getProgramStages().add( programStageA ); + + manager.update( programStageA ); + manager.update( programA ); + + ProgramInstance programInstance = new ProgramInstance(); + programInstance.setProgram( programA ); + programInstance.setDateOfIncident( new Date() ); + programInstance.setEnrollmentDate( new Date() ); + + programInstanceService.addProgramInstance( programInstance ); + programA.getProgramInstances().add( programInstance ); + manager.update( programA ); + + createSuperuserAndInjectSecurityContext( 'A' ); + + // mocked format + I18nFormat mockFormat = mock( I18nFormat.class ); + when( mockFormat.parseDate( anyString() ) ).thenReturn( new Date() ); + eventService.setFormat( mockFormat ); + } + + @Override + public boolean emptyDatabaseAfterTest() + { + return true; + } + + @Test + public void testSaveWithoutEnrollmentShouldFail() + { + Event event = createEvent( programA.getUid(), organisationUnitA.getUid(), personMaleA.getPerson() ); + ImportSummary importSummary = eventService.saveEvent( event ); + assertEquals( ImportStatus.ERROR, importSummary.getStatus() ); + assertThat( importSummary.getDescription(), CoreMatchers.containsString( "is not enrolled in program" ) ); + } + + private Event createEvent( String program, String orgUnit, String person ) + { + Event event = new Event(); + event.setProgram( program ); + event.setOrgUnit( orgUnit ); + event.setPerson( person ); + + event.getDataValues().add( new DataValue( dataElementA.getUid(), "10" ) ); + + return event; + } +}