/* * 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.Concept; import com.muzima.api.model.Observation; import org.junit.Before; 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 ConceptsTest { @Before public void setUp() throws Exception { } @Test public void shouldAddSingleObservation() throws Exception { final Observation observation = createObservation(createConcept("uuid1"), "o1"); assertThat(new Concepts(observation), hasItem(conceptWithObservations(observation))); } @Test public void shouldAddMultipleObservation() throws Exception { final Concept concept = createConcept("uuid1"); final Observation observation = createObservation(concept, "o1"); final Observation observationTwo = createObservation(concept, "o2"); assertThat(new Concepts(observation, observationTwo), hasItems(conceptWithObservations(observation, observationTwo))); } @Test public void shouldGroupObservationsByConcept() throws Exception { Observation observation1 = createObservation(createConcept("c1"), "01"); Observation observation2 = createObservation(createConcept("c2"), "02"); Observation observation3 = createObservation(createConcept("c1"), "03"); assertThat(new Concepts(observation1, observation2, observation3), hasItems(conceptWithObservations(observation1, observation3), conceptWithObservations(observation2))); } @Test public void shouldSortTheConceptsByDate() throws Exception { final Observation observation1 = createObservation(createConcept("c1"), "01", new Date(1)); final Observation observation2 = createObservation(createConcept("c2"), "02", new Date(3)); final Observation observation3 = createObservation(createConcept("c1"), "03", new Date(2)); final Concepts concepts = new Concepts(observation1, observation2, observation3); concepts.sortByDate(); final Concepts expectedOrderedConcept = new Concepts() {{ add(conceptWithObservations(observation2)); add(conceptWithObservations(observation3, observation1)); }}; assertThat(concepts, is(expectedOrderedConcept)); } private Observation createObservation(final Concept concept, final String uuid, final Date date) { return new Observation() {{ setUuid(uuid); setConcept(concept); setObservationDatetime(date); }}; } private ConceptWithObservations conceptWithObservations(Observation... observations) { final ConceptWithObservations withObservations = new ConceptWithObservations(); for (Observation observation : observations) { withObservations.addObservation(observation); } return withObservations; } private Concept createConcept(final String uuid) { return new Concept() {{ setUuid(uuid); }}; } private Observation createObservation(final Concept concept, final String uuid) { return createObservation(concept, uuid, new Date()); } }