/* (c) 2014 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.template; import static org.easymock.EasyMock.*; import static org.easymock.classextension.EasyMock.*; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.config.GeoServerDataDirectory; import org.geotools.data.DataUtilities; import org.junit.BeforeClass; import org.junit.Test; import org.opengis.feature.simple.SimpleFeatureType; public class GeoServerTemplateLoader2Test { static File root; @BeforeClass public static void createTmpDir() throws Exception { root = File.createTempFile("template", "tmp", new File("target")); root.delete(); root.mkdir(); } GeoServerDataDirectory createDataDirectoryMock() { GeoServerDataDirectory dd = createNiceMock(GeoServerDataDirectory.class); expect(dd.root()).andReturn(root).anyTimes(); return dd; } @Test public void testRelativeToFeatureType() throws IOException { GeoServerDataDirectory dd = createDataDirectoryMock(); replay(dd); GeoServerTemplateLoader tl = new GeoServerTemplateLoader(getClass(), dd); Object source = tl.findTemplateSource( "dummy.ftl"); assertNull(source); reset(dd); FeatureTypeInfo ft = createMock(FeatureTypeInfo.class); expect(dd.findSuppResourceFile(ft, "dummy.ftl")).andReturn(new File("foo")).once(); replay(ft, dd); tl.setFeatureType( ft ); source = tl.findTemplateSource( "dummy.ftl"); assertNotNull(source); verify(ft, dd); } @Test public void testRelativeToStore() throws IOException { GeoServerDataDirectory dd = createDataDirectoryMock(); replay(dd); GeoServerTemplateLoader tl = new GeoServerTemplateLoader(getClass(), dd); Object source = tl.findTemplateSource( "dummy.ftl"); assertNull(source); reset(dd); DataStoreInfo s = createNiceMock(DataStoreInfo.class); FeatureTypeInfo ft = createNiceMock(FeatureTypeInfo.class); expect(ft.getStore()).andReturn(s).anyTimes(); tl.setFeatureType(ft); replay(ft, s, dd); assertNull(tl.findTemplateSource( "dummy.ftl")); reset(dd); expect(dd.findSuppStoreFile(s, "dummy.ftl")).andReturn(new File("foo")).once(); replay(dd); assertNotNull(tl.findTemplateSource( "dummy.ftl")); verify(dd); } @Test public void testRelativeToWorkspace() throws IOException { GeoServerDataDirectory dd = createDataDirectoryMock(); DataStoreInfo s = createNiceMock(DataStoreInfo.class); FeatureTypeInfo ft = createNiceMock(FeatureTypeInfo.class); WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class); expect(ft.getStore()).andReturn(s).anyTimes(); expect(s.getWorkspace()).andReturn(ws).anyTimes(); replay(ft, s, ws, dd); GeoServerTemplateLoader tl = new GeoServerTemplateLoader(getClass(), dd); tl.setFeatureType(ft); Object source = tl.findTemplateSource( "dummy.ftl"); assertNull(source); reset(dd); expect(dd.findSuppWorkspaceFile(ws, "dummy.ftl")).andReturn(new File("foo")).once(); replay(dd); assertNotNull(tl.findTemplateSource( "dummy.ftl")); verify(dd); } @Test public void testGlobal() throws IOException { GeoServerDataDirectory dd = createDataDirectoryMock(); DataStoreInfo s = createNiceMock(DataStoreInfo.class); FeatureTypeInfo ft = createNiceMock(FeatureTypeInfo.class); WorkspaceInfo ws = createNiceMock(WorkspaceInfo.class); expect(ft.getStore()).andReturn(s).anyTimes(); expect(s.getWorkspace()).andReturn(ws).anyTimes(); replay(ft, s, ws, dd); GeoServerTemplateLoader tl = new GeoServerTemplateLoader(getClass(), dd); tl.setResource(ft); assertNull(tl.findTemplateSource( "dummy.ftl")); reset(dd); expect(dd.findSuppWorkspacesFile(ws, "dummy.ftl")).andReturn(new File("foo")).once(); replay(dd); assertNotNull(tl.findTemplateSource( "dummy.ftl")); verify(dd); } @Test public void testRemoteType() throws Exception { SimpleFeatureType ft = DataUtilities.createType("remoteType", "the_geom:MultiPolygon,FID:String,ADDRESS:String"); GeoServerDataDirectory dd = createDataDirectoryMock(); Catalog cat = createNiceMock(Catalog.class); expect(cat.getFeatureTypeByName(ft.getName())).andReturn(null).once(); replay(dd, cat); GeoServerTemplateLoader tl = new GeoServerTemplateLoader(getClass(), dd); tl.setCatalog(cat); tl.setFeatureType(ft); tl.findTemplateSource("header.ftl"); verify(cat); } }