/* (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.script.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.TextArea; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.util.tester.FormTester; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.script.ScriptManager; import org.geoserver.web.GeoServerWicketTestSupport; import org.geoserver.web.wicket.CodeMirrorEditor; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; public class ScriptNewPageTest extends GeoServerWicketTestSupport { @Before public void init() { login(); tester.startPage(ScriptNewPage.class); // print(tester.getLastRenderedPage(), true, true); } @Test public void testLoad() { tester.assertRenderedPage(ScriptNewPage.class); tester.assertNoErrorMessage(); tester.assertComponent("form:name", TextField.class); tester.assertComponent("form:type", DropDownChoice.class); tester.assertComponent("form:extension", DropDownChoice.class); tester.assertComponent("form:contents", CodeMirrorEditor.class); } @Test public void testValid() throws IOException { FormTester form = tester.newFormTester("form"); form.setValue("name", "hello"); form.select("type", 0); ((DropDownChoice) form.getForm().get("extension")).setChoices(Lists.newArrayList("py", "js", "groovy")); form.select("extension", 1); form.setValue("contents:editorContainer:editorParent:editor", "console.log('Hi');"); form.submit(); tester.assertRenderedPage(ScriptPage.class); tester.assertNoErrorMessage(); ScriptManager scriptManager = GeoServerExtensions.bean(ScriptManager.class); File file = new File(new File(scriptManager.app().dir(), "hello"), "main.js"); assertTrue(file.exists()); assertEquals("console.log('Hi');", FileUtils.readFileToString(file)); } @Test public void testNameRequired() { FormTester form = tester.newFormTester("form"); form.select("type", 0); ((DropDownChoice)form.getForm().get("extension")).setChoices(Lists.newArrayList("py","js","groovy")); form.select("extension", 0); form.setValue("contents:editorContainer:editorParent:editor","console.log('Hi');"); form.submit(); tester.assertRenderedPage(ScriptNewPage.class); tester.assertErrorMessages(new String[] {"Field 'Name' is required."}); } @Test public void testTypeRequired() { FormTester form = tester.newFormTester("form"); form.setValue("name", "hello"); ((DropDownChoice)form.getForm().get("extension")).setChoices(Lists.newArrayList("py","js","groovy")); form.select("extension", 0); form.setValue("contents:editorContainer:editorParent:editor","console.log('Hi');"); form.submit(); tester.assertRenderedPage(ScriptNewPage.class); tester.assertErrorMessages(new String[] {"Field 'type' is required."}); } @Test public void testExtensionRequired() { FormTester form = tester.newFormTester("form"); form.setValue("name", "hello"); form.select("type", 0); form.setValue("contents:editorContainer:editorParent:editor","console.log('Hi');"); form.submit(); tester.assertRenderedPage(ScriptNewPage.class); tester.assertErrorMessages(new String[] {"Field 'extension' is required."}); } @Test public void testContentsRequired() { FormTester form = tester.newFormTester("form"); form.setValue("name", "hello"); form.select("type", 0); ((DropDownChoice)form.getForm().get("extension")).setChoices(Lists.newArrayList("py","js","groovy")); form.select("extension", 0); form.submit(); tester.assertRenderedPage(ScriptNewPage.class); tester.assertErrorMessages(new String[] {"Field 'contents' is required."}); } }