/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs;
import java.util.Date;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class PatientStateTest {
private Date leftRange;
private Date inRange;
private Date rightRange;
private Date rightOutOfRange;
private Date leftOutOfRange;
private String uuid2;
private String uuid1;
@Before
public void before() {
inRange = new Date();
leftRange = new Date(inRange.getTime() - 10000);
rightRange = new Date(inRange.getTime() + 10000);
rightOutOfRange = new Date(rightRange.getTime() + 10000);
leftOutOfRange = new Date(leftRange.getTime() - 10000);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnFalseIfVoidedAndDateInRange() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setVoided(true);
//when
boolean active = patientState.getActive(inRange);
//then
Assert.assertFalse(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnFalseIfVoidedAndDateNotInRange() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setVoided(true);
//when
boolean active = patientState.getActive(rightOutOfRange);
//then
Assert.assertFalse(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnTrueIfNotVoidedAndDateInRange() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(inRange);
//then
Assert.assertTrue(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnTrueIfNotVoidedAndDateInRangeWithNullStartDate() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(null);
patientState.setEndDate(rightRange);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(inRange);
//then
Assert.assertTrue(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnTrueIfNotVoidedAndDateInRangeWithNullEndDate() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(null);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(inRange);
//then
Assert.assertTrue(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnTrueIfNotVoidedAndBothStartDateAndEndDateNulled() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(null);
patientState.setEndDate(null);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(inRange);
//then
Assert.assertTrue(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldCompareWithCurrentDateIfDateNull() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(leftRange);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(null);
//then
Assert.assertFalse(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnFalseIfNotVoidedAndDateEarlierThanStartDate() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(leftOutOfRange);
//then
Assert.assertFalse(active);
}
/**
* @see PatientState#getActive(Date)
*/
@Test
public void getActive_shouldReturnFalseIfNotVoidedAndDateLaterThanEndDate() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setVoided(false);
//when
boolean active = patientState.getActive(rightOutOfRange);
//then
Assert.assertFalse(active);
}
/**
* @see PatientState#compareTo(PatientState)
*/
@Test
public void compareTo_shouldReturnPositiveIfStartDatesEqualAndThisEndDateNull() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(null);
patientState.setVoided(false);
PatientState patientState2 = new PatientState();
patientState2.setStartDate(leftRange);
patientState2.setEndDate(rightRange);
patientState2.setVoided(false);
//when
int result = patientState.compareTo(patientState2);
//then
Assert.assertTrue(result > 0);
}
/**
* @see PatientState#compareTo(PatientState)
*/
@Test
public void compareTo_shouldReturnNegativeIfThisStartDateNull() {
//given
PatientState patientState = new PatientState();
patientState.setStartDate(null);
patientState.setEndDate(rightRange);
patientState.setVoided(false);
PatientState patientState2 = new PatientState();
patientState2.setStartDate(leftRange);
patientState2.setEndDate(rightRange);
patientState2.setVoided(false);
//when
int result = patientState.compareTo(patientState2);
//then
Assert.assertTrue(result < 0);
}
/**
* @see PatientState#compareTo(PatientState)
*/
@Test
public void compareTo_shouldPassIfTwoStatesHaveTheSameStartDateEndDateAndUuid() {
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setUuid(uuid1);
patientState.setVoided(false);
PatientState patientState2 = new PatientState();
patientState2.setStartDate(leftRange);
patientState2.setEndDate(rightRange);
patientState2.setUuid(uuid1);
patientState2.setVoided(false);
Assert.assertTrue(patientState.compareTo(patientState2) == 0);
}
/**
* @see PatientState#compareTo(PatientState)
*/
@Test
public void compareTo_shouldReturnPositiveOrNegativeIfTwoStatesHaveTheSameStartDatesEndDatesAndUuids() {
uuid1 = "some uuid 1";
uuid2 = "some uuid 2";
PatientState patientState = new PatientState();
patientState.setStartDate(leftRange);
patientState.setEndDate(rightRange);
patientState.setUuid(uuid1);
patientState.setVoided(false);
PatientState patientState2 = new PatientState();
patientState2.setStartDate(leftRange);
patientState2.setEndDate(rightRange);
patientState2.setUuid(uuid2);
patientState2.setVoided(false);
int result = (patientState.compareTo(patientState2));
Assert.assertTrue(result <= -1 || result >= 1);
}
}