/* (c) 2015 - 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web.netcdf.layer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.apache.wicket.Component; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.Model; import org.apache.wicket.util.tester.FormTester; import org.geoserver.catalog.CoverageInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.MetadataMap; import org.geoserver.catalog.ResourceInfo; import org.geoserver.data.test.MockData; import org.geoserver.data.test.SystemTestData; import org.geoserver.web.ComponentBuilder; import org.geoserver.web.FormTestPage; import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.netcdf.DataPacking; import org.geoserver.web.netcdf.NetCDFSettingsContainer; import org.junit.Before; import org.junit.Test; /** * Test class for the {@link NetCDFOutTabPanel}. * */ public class NetCDFOutTabPanelTest extends GeoServerWicketTestSupport { /** LayerInfo model */ private Model<LayerInfo> layerModel; /** CoverageInfo model */ private Model<CoverageInfo> resourceModel; @Override protected void setUpTestData(SystemTestData testData) throws Exception { super.setUpTestData(testData); testData.setUpDefaultRasterLayers(); } @Before public void setUpInternal() throws Exception { // Creatign models LayerInfo layerInfo = getCatalog().getLayerByName(getLayerId(MockData.TASMANIA_DEM)); layerModel = new Model<LayerInfo>(layerInfo); ResourceInfo resource = layerInfo.getResource(); resourceModel = new Model<CoverageInfo>((CoverageInfo) resource); // Add Element to MetadataMap MetadataMap metadata = resource.getMetadata(); if (!metadata.containsKey(NetCDFSettingsContainer.NETCDFOUT_KEY)) { metadata.put(NetCDFSettingsContainer.NETCDFOUT_KEY, new NetCDFLayerSettingsContainer()); } } @Test public void testComponent() { login(); // Opening the selected page tester.startPage(new FormTestPage(new ComponentBuilder() { private static final long serialVersionUID = -6705646666953650890L; public Component buildComponent(final String id) { return new NetCDFOutTabPanel(id, layerModel, resourceModel); } })); tester.assertComponent("form:panel", NetCDFOutTabPanel.class); // Checking Components and their default values tester.assertComponent("form:panel:netcdfeditor", NetCDFOutSettingsEditor.class); // getting component NetCDFOutSettingsEditor editor = (NetCDFOutSettingsEditor) tester .getComponentFromLastRenderedPage("form:panel:netcdfeditor"); // Getting Model Object NetCDFLayerSettingsContainer container = editor.getModelObject(); // Ensure the model is not null assertNotNull(container); // Ensure the container is equal to the one inside the MetadataMap NetCDFLayerSettingsContainer actualContainer = resourceModel.getObject().getMetadata() .get(NetCDFSettingsContainer.NETCDFOUT_KEY, NetCDFLayerSettingsContainer.class); assertEquals(container, actualContainer); // Ensure the Shuffle Component value is correct tester.assertComponent("form:panel:netcdfeditor:container:shuffle", CheckBox.class); CheckBox shuffle = (CheckBox) tester .getComponentFromLastRenderedPage("form:panel:netcdfeditor:container:shuffle"); assertEquals(shuffle.getModelObject(), container.isShuffle()); // Ensure the Copy Attributes component value is correct tester.assertComponent("form:panel:netcdfeditor:container:copyAttributes", CheckBox.class); CheckBox copyAttributes = (CheckBox) tester.getComponentFromLastRenderedPage( "form:panel:netcdfeditor:container:copyAttributes"); assertEquals(copyAttributes.getModelObject(), container.isCopyAttributes()); // Ensure the Compression Component value is correct tester.assertComponent("form:panel:netcdfeditor:container:compressionLevel", TextField.class); TextField<Integer> compressionLevel = (TextField<Integer>) tester .getComponentFromLastRenderedPage("form:panel:netcdfeditor:container:compressionLevel"); assertEquals(compressionLevel.getModelObject().intValue(), container.getCompressionLevel()); // Ensure the DataPacking Component value is correct tester.assertComponent("form:panel:netcdfeditor:container:dataPacking", DropDownChoice.class); DropDownChoice<DataPacking> dataPacking = (DropDownChoice<DataPacking>) tester .getComponentFromLastRenderedPage("form:panel:netcdfeditor:container:dataPacking"); assertEquals(dataPacking.getModelObject(), container.getDataPacking()); FormTester formTester; formTester = tester.newFormTester("form"); formTester.setValue("panel:netcdfeditor:container:standardName", "test-name"); formTester.setValue("panel:netcdfeditor:container:uom", "test-uom"); formTester.submit(); tester.assertNoErrorMessage(); assertEquals("test-name", actualContainer.getLayerName()); assertEquals("test-uom", actualContainer.getLayerUOM()); // add a global attribute formTester = tester.newFormTester("form"); formTester.setValue("panel:netcdfeditor:container:newGlobalAttributeKey", "test-global-attribute"); formTester.setValue("panel:netcdfeditor:container:newGlobalAttributeValue", "Test Global Attribute"); tester.executeAjaxEvent("form:panel:netcdfeditor:container:addGlobalAttribute", "click"); formTester.setValue("panel:netcdfeditor:container:compressionLevel", "0"); formTester.submit(); tester.assertNoErrorMessage(); assertEquals(1, actualContainer.getGlobalAttributes().size()); assertEquals("test-global-attribute", actualContainer.getGlobalAttributes().get(0).getKey()); assertEquals("Test Global Attribute", actualContainer.getGlobalAttributes().get(0).getValue()); // add a variable attribute formTester = tester.newFormTester("form"); formTester.setValue("panel:netcdfeditor:container:newVariableAttributeKey", "test-variable-attribute"); formTester.setValue("panel:netcdfeditor:container:newVariableAttributeValue", "Test Variable Attribute"); tester.executeAjaxEvent("form:panel:netcdfeditor:container:addVariableAttribute", "click"); formTester.setValue("panel:netcdfeditor:container:compressionLevel", "0"); formTester.submit(); tester.assertNoErrorMessage(); assertEquals(1, actualContainer.getVariableAttributes().size()); assertEquals("test-variable-attribute", actualContainer.getVariableAttributes().get(0).getKey()); assertEquals("Test Variable Attribute", actualContainer.getVariableAttributes().get(0).getValue()); // add an extra variable formTester = tester.newFormTester("form"); formTester.setValue("panel:netcdfeditor:container:newExtraVariableSource", "reftime"); formTester.setValue("panel:netcdfeditor:container:newExtraVariableOutput", "forecast_reference_time"); formTester.setValue("panel:netcdfeditor:container:newExtraVariableDimensions", "time"); tester.executeAjaxEvent("form:panel:netcdfeditor:container:addExtraVariable", "click"); formTester.setValue("panel:netcdfeditor:container:compressionLevel", "0"); formTester.submit(); tester.assertNoErrorMessage(); assertEquals(1, actualContainer.getExtraVariables().size()); assertEquals("reftime", actualContainer.getExtraVariables().get(0).getSource()); assertEquals("forecast_reference_time", actualContainer.getExtraVariables().get(0).getOutput()); assertEquals("time", actualContainer.getExtraVariables().get(0).getDimensions()); } }