/* (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.web.wicket.browser; import static org.junit.Assert.*; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestHandler; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.repeater.data.DataView; import org.apache.wicket.model.Model; import org.geoserver.web.ComponentBuilder; import org.geoserver.web.FormTestPage; import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.GeoServerDialog.DialogDelegate; import org.junit.Before; import org.junit.Test; public class GeoServerFileChooserTest extends GeoServerWicketTestSupport { private File root; private File one; private File two; private File child; @Before public void init() throws IOException { root = new File("target/test-filechooser"); if(root.exists()) FileUtils.deleteDirectory(root); child = new File(root, "child"); child.mkdirs(); one = new File(child, "one.txt"); one.createNewFile(); two = new File(child, "two.sld"); two.createNewFile(); } public void setupChooser(final File file) { tester.startPage(new FormTestPage(new ComponentBuilder() { public Component buildComponent(String id) { return new GeoServerFileChooser(id, new Model(file)); } })); //WicketHierarchyPrinter.print(tester.getLastRenderedPage(), true, true); } @Test public void testLoad() { setupChooser(root); tester.assertRenderedPage(FormTestPage.class); tester.assertNoErrorMessage(); tester.assertLabel("form:panel:fileTable:fileTable:fileContent:files:1:nameLink:name", "child/"); assertEquals(1, ((DataView) tester.getComponentFromLastRenderedPage("form:panel:fileTable:fileTable:fileContent:files")).size()); } @Test public void testNullRoot() { setupChooser(null); // make sure it does not now blow out because of the null tester.assertRenderedPage(FormTestPage.class); tester.assertNoErrorMessage(); tester.assertLabel("form:panel:breadcrumbs:path:0:pathItemLink:pathItem", getTestData().getDataDirectoryRoot().getName() + "/"); } @Test public void testInDialog() throws Exception { tester.startPage(new FormTestPage(new ComponentBuilder() { public Component buildComponent(String id) { return new GeoServerDialog(id); } })); tester.assertRenderedPage(FormTestPage.class); tester.debugComponentTrees(); GeoServerDialog dialog = (GeoServerDialog) tester.getComponentFromLastRenderedPage("form:panel"); assertNotNull(dialog); dialog.showOkCancel(new AjaxRequestHandler(tester.getLastRenderedPage()), new DialogDelegate() { @Override protected Component getContents(String id) { return new GeoServerFileChooser(id, new Model(root)); } @Override protected boolean onSubmit(AjaxRequestTarget target, Component contents) { assertNotNull(contents); assertTrue(contents instanceof GeoServerFileChooser); return true; } }); dialog.submit(new AjaxRequestHandler(tester.getLastRenderedPage())); } @Test public void testHideFileSystem() throws Exception { tester.startPage(new FormTestPage(new ComponentBuilder() { public Component buildComponent(String id) { return new GeoServerFileChooser(id, new Model(), true); } })); tester.assertRenderedPage(FormTestPage.class); tester.assertNoErrorMessage(); DropDownChoice<File> rootChoice = (DropDownChoice<File>) tester.getComponentFromLastRenderedPage("form:panel:roots"); assertEquals(1, rootChoice.getChoices().size()); assertEquals(getDataDirectory().root(), rootChoice.getChoices().get(0)); } }