org.openmrs.module.pharmacyapi.api.service.dispensationservice.DispensationServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.pharmacyapi.api.service.dispensationservice.DispensationServiceTest.java

Source

/**
 * 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.
 */
/*
 * Friends in Global Health - FGH  2016
 */
package org.openmrs.module.pharmacyapi.api.service.dispensationservice;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.TransformerUtils;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.hamcrest.collection.IsCollectionWithSize;
import org.junit.Assert;
import org.junit.Test;
import org.openmrs.Concept;
import org.openmrs.Encounter;
import org.openmrs.Obs;
import org.openmrs.api.context.Context;
import org.openmrs.module.pharmacyapi.api.common.util.MappedConcepts;
import org.openmrs.module.pharmacyapi.api.common.util.MappedEncounters;
import org.openmrs.module.pharmacyapi.api.dispensation.model.Dispensation;
import org.openmrs.module.pharmacyapi.api.dispensation.model.DispensationItem;
import org.openmrs.module.pharmacyapi.api.dispensation.service.DispensationService;
import org.openmrs.module.pharmacyapi.api.prescriptiondispensation.model.PrescriptionDispensation;
import org.openmrs.module.pharmacyapi.api.prescriptiondispensation.service.PrescriptionDispensationService;
import org.openmrs.module.pharmacyapi.api.util.BaseTest;

/**
 * @author Stlio Moiane
 */
public class DispensationServiceTest extends BaseTest {

    @SuppressWarnings("unchecked")
    @Test
    public void shouldDispenseOrdersForNonArvPrescription() throws Exception {
        this.executeDataSet("dispensationservice/shouldDispenseOrdersForNonArvPrescription-dataset.xml");

        final Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2005);
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        final Dispensation dispensation = new Dispensation();
        dispensation.setPatientUuid("5946f880-b197-400b-9caa-a3c661d23041");
        dispensation.setLocationUuid("8d6c993e-c2cc-11de-8d13-0010c6dffd0f");
        dispensation.setProviderUuid("ba1b19c2-3ed6-4f63-b8c0-f762dc8d7562");
        dispensation.setDispensationDate(calendar.getTime());
        final DispensationItem dispensationItem = new DispensationItem();
        dispensationItem.setQuantityDispensed(0d);
        dispensationItem.setQuantityToDispense(3d);

        final String orderUuid = "921de0a3-05c4-444a-be03-0001";
        final String encounterPrescriptionUuid = "eec646cb-c847-4ss-enc-who-adult";

        dispensationItem.setOrderUuid(orderUuid);
        dispensationItem.setPrescriptionUuid(encounterPrescriptionUuid);
        dispensation.setDispensationItems(Arrays.asList(dispensationItem));

        final Dispensation createdDispensation = Context.getService(DispensationService.class)
                .dispense(dispensation);

        Assert.assertNotNull(createdDispensation);

        final List<PrescriptionDispensation> prescriptionDispensations = Context
                .getService(PrescriptionDispensationService.class)
                .findPrescriptionDispensationByPrescription(new Encounter(1000));

        Assert.assertTrue(!prescriptionDispensations.isEmpty());
        Assert.assertEquals(1, prescriptionDispensations.size());

        final PrescriptionDispensation prescriptionDispensation = prescriptionDispensations.iterator().next();
        final Encounter dispensationEncounter = prescriptionDispensation.getDispensation();

        Assert.assertEquals(MappedEncounters.DISPENSATION_ENCOUNTER_TYPE,
                dispensationEncounter.getEncounterType().getUuid());

        final List<Obs> observations = Context.getObsService().getObservations(null,
                Arrays.asList(dispensationEncounter), null, null, null, null, null, null, null, null, null, false);

        MatcherAssert.assertThat(observations, IsCollectionWithSize.hasSize(3));

        final Collection<Concept> concepts = CollectionUtils.collect(observations,
                TransformerUtils.invokerTransformer("getConcept"));
        final Collection<String> uuids = CollectionUtils.collect(concepts,
                TransformerUtils.invokerTransformer("getUuid"));

        MatcherAssert.assertThat(uuids, Matchers.hasItems(MappedConcepts.DISPENSATION_SET,
                MappedConcepts.MEDICATION_QUANTITY, MappedConcepts.DATE_OF_NEXT_PICK_UP));
    }

    @SuppressWarnings("unchecked")
    @Test
    public void shouldDispenseOrdersForArvPrescription() throws Exception {
        this.executeDataSet("dispensationservice/shouldDispenseOrdersForArvPrescription-dataset.xml");

        final Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2005);
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        final Dispensation dispensation = new Dispensation();
        dispensation.setPatientUuid("5946f880-b197-400b-9caa-a3c661d23041");
        dispensation.setLocationUuid("8d6c993e-c2cc-11de-8d13-0010c6dffd0f");
        dispensation.setProviderUuid("ba1b19c2-3ed6-4f63-b8c0-f762dc8d7562");
        dispensation.setDispensationDate(calendar.getTime());
        final DispensationItem dispensationItem = new DispensationItem();
        dispensationItem.setQuantityDispensed(0d);
        dispensationItem.setQuantityToDispense(3d);

        final String orderUuid = "921de0a3-05c4-444a-be03-0001";
        final String encounterPrescriptionUuid = "eec646cb-c847-4ss-enc-who-adult";

        dispensationItem.setOrderUuid(orderUuid);
        dispensationItem.setRegimeUuid("9dc17c1b-7b6d-488e-a38d-505a7b6xxx1");
        dispensationItem.setPrescriptionUuid(encounterPrescriptionUuid);
        dispensation.setDispensationItems(Arrays.asList(dispensationItem));

        final Dispensation createdDispensation = Context.getService(DispensationService.class)
                .dispense(dispensation);

        Assert.assertNotNull(createdDispensation);

        final List<PrescriptionDispensation> prescriptionDispensations = Context
                .getService(PrescriptionDispensationService.class)
                .findPrescriptionDispensationByPrescription(new Encounter(1000));

        Assert.assertTrue(!prescriptionDispensations.isEmpty());
        Assert.assertEquals(1, prescriptionDispensations.size());

        final PrescriptionDispensation prescriptionDispensation = prescriptionDispensations.iterator().next();
        final Encounter dispensationEncounter = prescriptionDispensation.getDispensation();

        Assert.assertEquals(MappedEncounters.DISPENSATION_ENCOUNTER_TYPE,
                dispensationEncounter.getEncounterType().getUuid());

        final List<Obs> observations = Context.getObsService().getObservations(null,
                Arrays.asList(dispensationEncounter), null, null, null, null, null, null, null, null, null, false);

        MatcherAssert.assertThat(observations, IsCollectionWithSize.hasSize(4));

        final Collection<Concept> concepts = CollectionUtils.collect(observations,
                TransformerUtils.invokerTransformer("getConcept"));
        final Collection<String> uuids = CollectionUtils.collect(concepts,
                TransformerUtils.invokerTransformer("getUuid"));

        MatcherAssert.assertThat(uuids,
                Matchers.hasItems(MappedConcepts.DISPENSATION_SET, MappedConcepts.MEDICATION_QUANTITY,
                        MappedConcepts.DATE_OF_NEXT_PICK_UP, MappedConcepts.PREVIOUS_ANTIRETROVIRAL_DRUGS));

    }
}