package org.openmrs.module.reporting.report.renderer; import org.junit.Test; import org.openmrs.module.reporting.common.DateUtil; import org.openmrs.module.reporting.evaluation.parameter.Mapped; import org.openmrs.module.reporting.report.ReportData; import org.openmrs.module.reporting.report.ReportDesign; import org.openmrs.module.reporting.report.ReportRequest; import org.openmrs.module.reporting.report.definition.ReportDefinition; import org.openmrs.test.BaseModuleContextSensitiveTest; import java.io.IOException; import java.io.OutputStream; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class ReportDesignRendererTest extends BaseModuleContextSensitiveTest { @Test public void getFilenameBase_shouldHaveSensibleDefaultIfNotSpecifiedAsDesignProperty() throws Exception { ReportDefinition definition = new ReportDefinition(); definition.setName("Test Report"); ReportRequest request = new ReportRequest(); request.setEvaluateStartDatetime(DateUtil.parseYmdhms("2014-07-01 18:30:15")); request.setReportDefinition(Mapped.noMappings(definition)); request.setRenderingMode(new RenderingMode()); String filenameBase = new TestReportDesignRenderer().getFilenameBase(request); assertThat(filenameBase, is("Test Report_2014-07-01_18:30:15")); } @Test public void getFilenameBase_shouldBeBasedOnDesignProperty() throws Exception { ReportDefinition definition = new ReportDefinition(); definition.setName("Test Report"); ReportRequest request = new ReportRequest(); request.setEvaluateStartDatetime(DateUtil.parseYmdhms("2014-07-01 18:30:15")); request.setReportDefinition(Mapped.noMappings(definition)); request.setRenderingMode(new RenderingMode()); ReportDesign design = new ReportDesign(); design.addPropertyValue(ReportDesignRenderer.FILENAME_BASE_PROPERTY, "{{formatDate request.evaluateStartDatetime \"yyyyMMdd\"}}-{{request.reportDefinition.parameterizable.name}}"); TestReportDesignRenderer renderer = new TestReportDesignRenderer(); renderer.setDesign(design); String filenameBase = renderer.getFilenameBase(request); assertThat(filenameBase, is("20140701-Test Report")); } /** * Since this class is abstract, we need a concrete class to test with */ private class TestReportDesignRenderer extends ReportDesignRenderer { /** * For testing, we allow a specific report design to be injected */ private ReportDesign design = new ReportDesign(); public void setDesign(ReportDesign design) { this.design = design; } @Override public ReportDesign getDesign(String argument) { return design; } @Override public String getRenderedContentType(ReportRequest request) { return null; } @Override public String getFilename(ReportRequest request) { return null; } @Override public void render(ReportData reportData, String argument, OutputStream out) throws IOException, RenderingException { } } }