/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.web.data.publish;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.FeedbackMessages;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.LayerInfo.WMSInterpolation;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.data.test.MockData;
import org.geoserver.web.ComponentBuilder;
import org.geoserver.web.FormTestPage;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.wms.web.publish.StylesModel;
import org.geoserver.wms.web.publish.WMSLayerConfig;
import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("serial")
public class WMSLayerConfigTest extends GeoServerWicketTestSupport {
@Before
public void resetPondStyle() {
Catalog catalog = getCatalog();
StyleInfo style = catalog.getStyleByName(MockData.PONDS.getLocalPart());
style.setWorkspace(null);
catalog.save(style);
}
@Test
public void testExisting() {
final LayerInfo layer = getCatalog().getLayerByName(MockData.PONDS.getLocalPart());
FormTestPage page = new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new WMSLayerConfig(id, new Model(layer));
}
}
);
tester.startPage(page);
tester.assertRenderedPage(FormTestPage.class);
tester.assertComponent("form", Form.class);
tester.assertComponent("form:panel:styles:defaultStyle", DropDownChoice.class);
// check selecting something else works
StyleInfo target = ((List<StyleInfo>) new StylesModel().getObject()).get(0);
FormTester ft = tester.newFormTester("form");
ft.select("panel:styles:defaultStyle", 0);
ft.submit();
tester.assertModelValue("form:panel:styles:defaultStyle", target);
}
@Test
public void testNew() {
final LayerInfo layer = getCatalog().getFactory().createLayer();
layer.setResource(getCatalog().getFactory().createFeatureType());
FormTestPage page = new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new WMSLayerConfig(id, new Model(layer));
}
}
);
Component layerConfig = page.get("form:panel:styles:defaultStyle");
tester.startPage(page);
tester.assertRenderedPage(FormTestPage.class);
tester.assertComponent("form", Form.class);
tester.assertComponent("form:panel:styles:defaultStyle", DropDownChoice.class);
// check submitting like this will create errors, there is no selection
tester.submitForm("form");
assertTrue(layerConfig.getFeedbackMessages().hasMessage(FeedbackMessage.ERROR));
// now set something and check there are no messages this time
page.getSession().getFeedbackMessages().clear();
FormTester ft = tester.newFormTester("form");
ft.select("panel:styles:defaultStyle", 0);
ft.submit();
assertFalse(layerConfig.getFeedbackMessages().hasMessage(FeedbackMessage.ERROR));
}
@Test
public void testLegendGraphicURL() throws Exception {
// force style into ponds workspace
Catalog catalog = getCatalog();
StyleInfo style = catalog.getStyleByName(MockData.PONDS.getLocalPart());
WorkspaceInfo ws = catalog.getWorkspaceByName(MockData.PONDS.getPrefix());
style.setWorkspace(ws);
catalog.save(style);
final LayerInfo layer = getCatalog().getLayerByName(MockData.PONDS.getLocalPart());
FormTestPage page = new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new WMSLayerConfig(id, new Model(layer));
}
}
);
tester.startPage(page);
tester.assertRenderedPage(FormTestPage.class);
tester.debugComponentTrees();
Image img = (Image)
tester.getComponentFromLastRenderedPage("form:panel:styles:defaultStyleLegendGraphic");
assertNotNull(img);
assertEquals(1, img.getBehaviors().size());
assertTrue(img.getBehaviors().get(0) instanceof AttributeModifier);
AttributeModifier mod = (AttributeModifier) img.getBehaviors().get(0);
assertTrue(mod.toString().contains("wms?REQUEST=GetLegendGraphic"));
assertTrue(mod.toString().contains("style=cite:Ponds"));
}
@Test
public void testInterpolationDropDown() {
final LayerInfo layer = getCatalog().getLayerByName(MockData.PONDS.getLocalPart());
final Model<LayerInfo> layerModel = new Model<LayerInfo>(layer);
FormTestPage page = new FormTestPage(new ComponentBuilder() {
public Component buildComponent(String id) {
return new WMSLayerConfig(id, layerModel);
}
}
);
tester.startPage(page);
tester.assertRenderedPage(FormTestPage.class);
tester.assertComponent("form", Form.class);
tester.assertComponent("form:panel:defaultInterpolationMethod", DropDownChoice.class);
// By default, no interpolation method is specified
FormTester ft = tester.newFormTester("form");
ft.submit();
tester.assertModelValue("form:panel:defaultInterpolationMethod",
null);
// Select Bicubic interpolation method
ft = tester.newFormTester("form");
ft.select("panel:defaultInterpolationMethod", 2);
ft.submit();
tester.assertModelValue("form:panel:defaultInterpolationMethod",
WMSInterpolation.Bicubic);
}
}