/* Copyright (c) 2001 - 2008 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.wms.describelayer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.geoserver.catalog.impl.CatalogImpl;
import org.geoserver.catalog.impl.CoverageInfoImpl;
import org.geoserver.catalog.impl.CoverageStoreInfoImpl;
import org.geoserver.catalog.impl.DataStoreInfoImpl;
import org.geoserver.catalog.impl.FeatureTypeInfoImpl;
import org.geoserver.catalog.impl.LayerInfoImpl;
import org.geoserver.catalog.impl.NamespaceInfoImpl;
import org.geoserver.catalog.impl.WorkspaceInfoImpl;
import org.geoserver.config.impl.GeoServerImpl;
import org.geoserver.platform.ServiceException;
import org.geoserver.wms.DescribeLayerRequest;
import org.geoserver.wms.MapLayerInfo;
import org.geoserver.wms.WMS;
import org.geoserver.wms.WMSInfoImpl;
/**
* Unit test suite for {@link DescribeLayerKvpRequestReader}
*
* @author Gabriel Roldan
* @version $Id: DescribeLayerKvpRequestReaderTest.java 14897 2010-09-22 02:31:27Z groldan $
*/
public class DescribeLayerKvpRequestReaderTest extends TestCase {
private GeoServerImpl geoServerImpl;
private WMS wms;
private Map<String, String> params;
protected void setUp() throws Exception {
geoServerImpl = new GeoServerImpl();
geoServerImpl.add(new WMSInfoImpl());
wms = new WMS(geoServerImpl);
params = new HashMap<String, String>();
}
protected void tearDown() throws Exception {
wms = null;
params = null;
}
private DescribeLayerRequest getRequest(Map<String, String> rawKvp) throws Exception {
return getRequest(rawKvp, new HashMap<String, Object>(rawKvp));
}
private DescribeLayerRequest getRequest(Map<String, String> rawKvp, Map<String, Object> kvp)
throws Exception {
DescribeLayerKvpRequestReader reader = new DescribeLayerKvpRequestReader(wms);
DescribeLayerRequest req = (DescribeLayerRequest) reader.createRequest();
return (DescribeLayerRequest) reader.read(req, kvp, rawKvp);
}
public void testGetRequestNoVersion() throws Exception {
params.put("LAYERS", "topp:states");
try {
getRequest(params);
fail("expected ServiceException if version is not provided");
} catch (ServiceException e) {
assertEquals("NoVersionInfo", e.getCode());
}
}
public void testGetRequestInvalidVersion() throws Exception {
params.put("LAYERS", "topp:states");
params.put("VERSION", "fakeVersion");
try {
getRequest(params);
fail("expected ServiceException if the wrong version is requested");
} catch (ServiceException e) {
assertEquals("InvalidVersion", e.getCode());
}
}
public void testGetRequestNoLayerRequested() throws Exception {
params.put("VERSION", "1.1.1");
try {
getRequest(params);
fail("expected ServiceException if no layer is requested");
} catch (ServiceException e) {
assertEquals("NoLayerRequested", e.getCode());
}
}
public void testGetRequest() throws Exception {
CatalogImpl catalog = new CatalogImpl();
geoServerImpl.setCatalog(catalog);
NamespaceInfoImpl ns = new NamespaceInfoImpl();
ns.setPrefix("topp");
ns.setURI("http//www.geoserver.org");
WorkspaceInfoImpl workspace = new WorkspaceInfoImpl();
workspace.setId("fakeWs");
workspace.setName("fakeWs");
DataStoreInfoImpl dataStoreInfo = new DataStoreInfoImpl(catalog);
dataStoreInfo.setName("fakeDs");
dataStoreInfo.setId("fakeDs");
dataStoreInfo.setWorkspace(workspace);
FeatureTypeInfoImpl featureTypeInfo = new FeatureTypeInfoImpl(catalog);
featureTypeInfo.setNamespace(ns);
featureTypeInfo.setName("states");
featureTypeInfo.setStore(dataStoreInfo);
final LayerInfoImpl layerInfo = new LayerInfoImpl();
layerInfo.setResource(featureTypeInfo);
layerInfo.setId("states");
layerInfo.setName("states");
catalog.add(ns);
catalog.add(workspace);
catalog.add(dataStoreInfo);
catalog.add(featureTypeInfo);
catalog.add(layerInfo);
params.put("VERSION", "1.1.1");
CoverageStoreInfoImpl coverageStoreInfo = new CoverageStoreInfoImpl(catalog);
coverageStoreInfo.setId("coverageStore");
coverageStoreInfo.setName("coverageStore");
coverageStoreInfo.setWorkspace(workspace);
CoverageInfoImpl coverageInfo = new CoverageInfoImpl(catalog);
coverageInfo.setNamespace(ns);
coverageInfo.setName("fakeCoverage");
coverageInfo.setStore(coverageStoreInfo);
LayerInfoImpl layerInfo2 = new LayerInfoImpl();
layerInfo2.setResource(coverageInfo);
layerInfo2.setId("fakeCoverage");
layerInfo2.setName("fakeCoverage");
catalog.add(coverageStoreInfo);
catalog.add(coverageInfo);
catalog.add(layerInfo2);
params.put("LAYERS", "topp:states,topp:fakeCoverage");
Map<String, Object> kvp = new HashMap<String, Object>(params);
kvp.put("LAYERS", Arrays.asList(new MapLayerInfo(layerInfo), new MapLayerInfo(layerInfo2)));
DescribeLayerRequest describeRequest = getRequest(params, kvp);
assertNotNull(describeRequest);
assertNotNull(describeRequest.getLayers());
assertEquals(2, describeRequest.getLayers().size());
}
}