package org.mapfish.print.output; import org.junit.Test; import org.mapfish.print.AbstractMapfishSpringTest; import org.mapfish.print.config.Configuration; import org.mapfish.print.config.ConfigurationFactory; import org.mapfish.print.config.PDFConfig; import org.mapfish.print.config.Template; import org.mapfish.print.wrapper.json.PJsonObject; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Map; import static org.junit.Assert.assertEquals; public class JasperReportPDFOutputFormatTest extends AbstractMapfishSpringTest { public static final String BASE_DIR = "pdf-config/"; @Autowired private ConfigurationFactory configurationFactory; @Autowired private Map<String, OutputFormat> outputFormat; @Test public void testPdfConfigDefaults() throws Exception { final Configuration config = configurationFactory.getConfig(getFile(BASE_DIR + "config-defaults.yaml")); final Template rawTemplate = config.getTemplate("main"); final PDFConfig pdfConfigSpy = Mockito.spy(rawTemplate.getPdfConfig()); Template templateSpy = Mockito.spy(rawTemplate); Mockito.when(templateSpy.getPdfConfig()).thenReturn(pdfConfigSpy); final Map<String, Template> templates = config.getTemplates(); templates.put("main", templateSpy); config.setTemplates(templates); PJsonObject requestData = loadJsonRequestData(); OutputStream outputStream = new ByteArrayOutputStream(); OutputFormat format = this.outputFormat.get("pdfOutputFormat"); format.print(requestData, config, getFile(JasperReportPDFOutputFormatTest.class, BASE_DIR), getTaskDirectory(), outputStream); assertAllMethodsCalled(pdfConfigSpy); assertEquals(false, pdfConfigSpy.isCompressed()); assertEquals("Mapfish Print", pdfConfigSpy.getAuthor()); assertEquals("Mapfish Print", pdfConfigSpy.getCreator()); assertEquals("Mapfish Print", pdfConfigSpy.getKeywordsAsString()); assertEquals("Mapfish Print", pdfConfigSpy.getTitle()); assertEquals("Mapfish Print", pdfConfigSpy.getSubject()); } @Test public void testPdfConfigValuesFromConfig() throws Exception { final Configuration config = configurationFactory.getConfig(getFile(BASE_DIR + "config-settings-in-config.yaml")); final Template rawTemplate = config.getTemplate("main"); final PDFConfig pdfConfigSpy = Mockito.spy(rawTemplate.getPdfConfig()); Template templateSpy = Mockito.spy(rawTemplate); Mockito.when(templateSpy.getPdfConfig()).thenReturn(pdfConfigSpy); final Map<String, Template> templates = config.getTemplates(); templates.put("main", templateSpy); config.setTemplates(templates); PJsonObject requestData = loadJsonRequestData(); OutputStream outputStream = new ByteArrayOutputStream(); OutputFormat format = this.outputFormat.get("pdfOutputFormat"); format.print(requestData, config, getFile(JasperReportPDFOutputFormatTest.class, BASE_DIR), getTaskDirectory(), outputStream); assertAllMethodsCalled(pdfConfigSpy); assertEquals(true, pdfConfigSpy.isCompressed()); assertEquals("Config Author", pdfConfigSpy.getAuthor()); assertEquals("Config Creator", pdfConfigSpy.getCreator()); assertEquals("Config Keywords", pdfConfigSpy.getKeywordsAsString()); assertEquals("Config Title", pdfConfigSpy.getTitle()); assertEquals("Config Subject", pdfConfigSpy.getSubject()); } @Test public void testPdfConfigValuesFromTemplate() throws Exception { final Configuration config = configurationFactory.getConfig(getFile(BASE_DIR + "config-settings-in-template.yaml")); final Template rawTemplate = config.getTemplate("main"); final PDFConfig pdfConfigSpy = Mockito.spy(rawTemplate.getPdfConfig()); Template templateSpy = Mockito.spy(rawTemplate); Mockito.when(templateSpy.getPdfConfig()).thenReturn(pdfConfigSpy); final Map<String, Template> templates = config.getTemplates(); templates.put("main", templateSpy); config.setTemplates(templates); PJsonObject requestData = loadJsonRequestData(); OutputStream outputStream = new ByteArrayOutputStream(); OutputFormat format = this.outputFormat.get("pdfOutputFormat"); format.print(requestData, config, getFile(JasperReportPDFOutputFormatTest.class, BASE_DIR), getTaskDirectory(), outputStream); assertAllMethodsCalled(pdfConfigSpy); assertEquals(true, pdfConfigSpy.isCompressed()); assertEquals("Template Author", pdfConfigSpy.getAuthor()); assertEquals("Template Creator", pdfConfigSpy.getCreator()); assertEquals("Template Keywords", pdfConfigSpy.getKeywordsAsString()); assertEquals("Template Title", pdfConfigSpy.getTitle()); assertEquals("Template Subject", pdfConfigSpy.getSubject()); } @Test public void testPdfConfigValuesInTemplateOverrideValuesInConfig() throws Exception { final Configuration config = configurationFactory.getConfig(getFile(BASE_DIR + "config-template-override-config.yaml")); final Template rawTemplate = config.getTemplate("main"); final PDFConfig pdfConfigSpy = Mockito.spy(rawTemplate.getPdfConfig()); Template templateSpy = Mockito.spy(rawTemplate); Mockito.when(templateSpy.getPdfConfig()).thenReturn(pdfConfigSpy); final Map<String, Template> templates = config.getTemplates(); templates.put("main", templateSpy); config.setTemplates(templates); PJsonObject requestData = loadJsonRequestData(); OutputStream outputStream = new ByteArrayOutputStream(); OutputFormat format = this.outputFormat.get("pdfOutputFormat"); format.print(requestData, config, getFile(JasperReportPDFOutputFormatTest.class, BASE_DIR), getTaskDirectory(), outputStream); assertAllMethodsCalled(pdfConfigSpy); assertEquals(false, pdfConfigSpy.isCompressed()); assertEquals("Template Author", pdfConfigSpy.getAuthor()); assertEquals("Config Creator", pdfConfigSpy.getCreator()); assertEquals("Config Keywords", pdfConfigSpy.getKeywordsAsString()); assertEquals("Template Title", pdfConfigSpy.getTitle()); assertEquals("Config Subject", pdfConfigSpy.getSubject()); } private void assertAllMethodsCalled(PDFConfig pdfConfigSpy) { Mockito.verify(pdfConfigSpy).isCompressed(); Mockito.verify(pdfConfigSpy).getAuthor(); Mockito.verify(pdfConfigSpy).getCreator(); Mockito.verify(pdfConfigSpy).getKeywordsAsString(); Mockito.verify(pdfConfigSpy).getTitle(); Mockito.verify(pdfConfigSpy).getSubject(); } public static PJsonObject loadJsonRequestData() throws IOException { return parseJSONObjectFromFile(JasperReportOutputFormatSimpleMapTest.class, BASE_DIR + "requestData.json"); } }