package org.mapfish.print.output; import com.vividsolutions.jts.util.AssertionFailedException; 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.wrapper.json.PJsonObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import java.io.IOException; import java.util.Map; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class AbstractJasperReportOutputFormatTest extends AbstractMapfishSpringTest { public static final String BASE_DIR = "simple_map/"; public static final String TABLE_BASE_DIR = "../processor/jasper/table/"; @Autowired private ConfigurationFactory configurationFactory; @Autowired private Map<String, OutputFormat> outputFormat; @Test @DirtiesContext public void testParameterValidation_WrongType() throws Exception { configurationFactory.setDoValidation(false); final Configuration config = configurationFactory.getConfig(getFile(BASE_DIR + "config-map-wrong-type.yaml")); PJsonObject requestData = loadJsonRequestData(); final AbstractJasperReportOutputFormat format = (AbstractJasperReportOutputFormat) this.outputFormat.get("pngOutputFormat"); try { format.getJasperPrint(requestData, config, getFile(JasperReportOutputFormatSimpleMapTest.class, BASE_DIR), getTaskDirectory()); fail("Expected a " + AssertionFailedException.class); } catch (AssertionFailedException e) { assertTrue(e.getMessage(), e.getMessage().contains("does not match the class of the actual object")); } } @Test @DirtiesContext public void testParameterValidation_MissingParameter() throws Exception { configurationFactory.setDoValidation(false); final Configuration config = configurationFactory.getConfig(getFile(BASE_DIR + "config-missing-map.yaml")); PJsonObject requestData = loadJsonRequestData(); final AbstractJasperReportOutputFormat format = (AbstractJasperReportOutputFormat) this.outputFormat.get("pngOutputFormat"); try { format.getJasperPrint(requestData, config, getFile(JasperReportOutputFormatSimpleMapTest.class, BASE_DIR), getTaskDirectory()); fail("Expected a " + AssertionFailedException.class); } catch (AssertionFailedException e) { assertTrue(e.getMessage(), e.getMessage().contains("but are not output values of processors or attributes")); } } @Test @DirtiesContext public void testFieldValidation_WrongType() throws Exception { configurationFactory.setDoValidation(false); final Configuration config = configurationFactory.getConfig(getFile(TABLE_BASE_DIR + "config.yaml")); config.getTemplate("main").setReportTemplate("simpleReport-wrong-field-type.jrxml"); PJsonObject requestData = loadTableJsonRequestData(); final AbstractJasperReportOutputFormat format = (AbstractJasperReportOutputFormat) this.outputFormat.get("pngOutputFormat"); try { format.getJasperPrint(requestData, config, getFile(JasperReportOutputFormatSimpleMapTest.class, TABLE_BASE_DIR), getTaskDirectory()); fail("Expected a " + AssertionFailedException.class); } catch (AssertionFailedException e) { assertTrue(e.getMessage(), e.getMessage().contains("does not match the class of the actual object")); } } public static PJsonObject loadJsonRequestData() throws IOException { return parseJSONObjectFromFile(JasperReportOutputFormatSimpleMapTest.class, BASE_DIR + "requestData.json"); } public static PJsonObject loadTableJsonRequestData() throws IOException { return parseJSONObjectFromFile(JasperReportOutputFormatSimpleMapTest.class, TABLE_BASE_DIR + "requestData.json"); } }