/*
* Copyright (c) 2014. The Trustees of Indiana University.
*
* This version of the code is licensed under the MPL 2.0 Open Source license with additional
* healthcare disclaimer. If the user is an entity intending to commercialize any application
* that uses this code in a for-profit venture, please contact the copyright holder.
*/
package com.muzima.model.observation;
import com.muzima.api.model.Encounter;
import com.muzima.api.model.Observation;
import org.junit.Test;
import java.util.Date;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.hasItem;
import static org.junit.matchers.JUnitMatchers.hasItems;
public class EncountersTest {
@Test
public void shouldAddSingleObservation() throws Exception {
final Observation observation = createObservation(createEncounter("uuid1"), "o1");
assertThat(new Encounters(observation), hasItem(encounterWithObservations(observation)));
}
@Test
public void shouldAddMultipleObservation() throws Exception {
final Encounter encounter = createEncounter("uuid1");
final Observation observation = createObservation(encounter, "o1");
final Observation observationTwo = createObservation(encounter, "o2");
assertThat(new Encounters(observation, observationTwo), hasItems(encounterWithObservations(observation, observationTwo)));
}
@Test
public void shouldGroupObservationsByEncounter() throws Exception {
Observation observation1 = createObservation(createEncounter("c1"), "01");
Observation observation2 = createObservation(createEncounter("c2"), "02");
Observation observation3 = createObservation(createEncounter("c1"), "03");
assertThat(new Encounters(observation1, observation2, observation3), hasItems(encounterWithObservations(observation1, observation3), encounterWithObservations(observation2)));
}
@Test
public void shouldSortTheEncountersByDate() throws Exception {
final Observation observation1 = createObservation(createEncounter("c1", new Date(1)), "01");
final Observation observation2 = createObservation(createEncounter("c2", new Date(3)), "02");
final Encounters encounters = new Encounters(observation1, observation2);
encounters.sortByDate();
final Encounters expectedOrderedConcept = new Encounters() {{
add(encounterWithObservations(observation2));
add(encounterWithObservations(observation1));
}};
assertThat(encounters, is(expectedOrderedConcept));
}
@Test
public void shouldPutEncounterWithNullDateAtTheTopWhenItsNotAtTheTop() throws Exception {
final Observation observation1 = createObservation(createEncounter("c1", new Date(1)), "01");
final Observation observation2 = createObservation(createEncounter("c2", null), "02");
final Encounters encounters = new Encounters(observation1, observation2);
encounters.sortByDate();
final Encounters expectedOrderedConcept = new Encounters() {{
add(encounterWithObservations(observation2));
add(encounterWithObservations(observation1));
}};
assertThat(encounters, is(expectedOrderedConcept));
}
@Test
public void shouldPutEncounterWithNullDateAtTheTopWhenItsAtTheTop() throws Exception {
final Observation observation1 = createObservation(createEncounter("c1", null), "01");
final Observation observation2 = createObservation(createEncounter("c2", new Date(1)), "02");
final Encounters encounters = new Encounters(observation1, observation2);
encounters.sortByDate();
final Encounters expectedOrderedConcept = new Encounters() {{
add(encounterWithObservations(observation1));
add(encounterWithObservations(observation2));
}};
assertThat(encounters, is(expectedOrderedConcept));
}
private Encounter createEncounter(final String uuid, final Date date) {
return new Encounter(){{
setUuid(uuid);
setEncounterDatetime(date);
}};
}
private Observation createObservation(final Encounter encounter, final String uuid, final Date date) {
return new Observation() {{
setUuid(uuid);
setEncounter(encounter);
setObservationDatetime(date);
}};
}
private EncounterWithObservations encounterWithObservations(Observation... observations) {
final EncounterWithObservations withObservations = new EncounterWithObservations();
for (Observation observation : observations) {
withObservations.addObservation(observation);
}
return withObservations;
}
private Encounter createEncounter(final String uuid) {
return new Encounter() {{
setUuid(uuid);
}};
}
private Observation createObservation(final Encounter encounter, final String uuid) {
return createObservation(encounter, uuid, new Date());
}
}