package org.openmrs.module.reporting.definition.library.implementerconfigured;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import java.io.File;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openmrs.api.SerializationService;
import org.openmrs.module.reporting.cohort.definition.CohortDefinition;
import org.openmrs.module.reporting.cohort.definition.GenderCohortDefinition;
import org.openmrs.module.reporting.cohort.definition.SqlCohortDefinition;
import org.openmrs.module.reporting.serializer.ReportingSerializer;
import org.openmrs.util.OpenmrsUtil;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@RunWith(PowerMockRunner.class)
@PrepareForTest(OpenmrsUtil.class)
public class ImplementerConfiguredCohortDefinitionLibraryTest {
public static final String SQL_QUERY = "select person_id from person where gender = 'F'";
private File directory;
private ImplementerConfiguredCohortDefinitionLibrary library;
@Before
public void setUp() throws Exception {
directory = mock(File.class);
when(directory.exists()).thenReturn(true);
when(directory.isDirectory()).thenReturn(true);
library = new ImplementerConfiguredCohortDefinitionLibrary();
library.setDirectory(directory);
}
@Test
public void testSqlDefinition() throws Exception {
when(directory.listFiles()).thenReturn(new File[] { new File("females.sql") });
mockStatic(OpenmrsUtil.class);
when(OpenmrsUtil.getFileAsString(any(File.class))).thenReturn(SQL_QUERY);
assertThat(library.getDefinitionSummaries().size(), is(1));
assertThat(library.getDefinitionSummaries().get(0).getKey(), is("configuration.definitionlibrary.cohort.females"));
CohortDefinition definition = library.getDefinition("configuration.definitionlibrary.cohort.females");
assertThat(definition, instanceOf(SqlCohortDefinition.class));
assertThat(((SqlCohortDefinition) definition).getQuery(), is(SQL_QUERY));
}
@Test
public void testSerializedDefinition() throws Exception {
when(directory.listFiles()).thenReturn(new File[] { new File("females.reportingserializerxml") });
mockStatic(OpenmrsUtil.class);
when(OpenmrsUtil.getFileAsString(any(File.class))).thenReturn(
"<org.openmrs.module.reporting.cohort.definition.GenderCohortDefinition>"
+ "<femaleIncluded>true</femaleIncluded>"
+ "</org.openmrs.module.reporting.cohort.definition.GenderCohortDefinition>");
assertThat(library.getDefinitionSummaries().size(), is(1));
assertThat(library.getDefinitionSummaries().get(0).getKey(), is("configuration.definitionlibrary.cohort.females"));
CohortDefinition definition = library.getDefinition("configuration.definitionlibrary.cohort.females");
assertThat(definition, instanceOf(GenderCohortDefinition.class));
assertThat(((GenderCohortDefinition) definition).getFemaleIncluded(), is(true));
}
@Test
public void testGroovyDefinition() throws Exception {
when(directory.listFiles()).thenReturn(new File[] { new File("females.groovy") });
library.setAutowireCapableBeanFactory(mock(AutowireCapableBeanFactory.class));
assertThat(library.getDefinitionSummaries().size(), is(1));
assertThat(library.getDefinitionSummaries().get(0).getKey(), is("configuration.definitionlibrary.cohort.females"));
CohortDefinition definition = library.getDefinition("configuration.definitionlibrary.cohort.females");
assertThat(definition, instanceOf(GenderCohortDefinition.class));
assertThat(definition.getClass().getName(), is("FemalesCohortDefinition"));
}
@Test(expected = ClassCastException.class)
public void testInvalidGroovyDefinition() throws Exception {
when(directory.listFiles()).thenReturn(new File[] { new File("invalidCohortDefinition.groovy") });
library.setAutowireCapableBeanFactory(mock(AutowireCapableBeanFactory.class));
library.getDefinitionSummaries();
}
}