package hudson.drools; import hudson.model.Result; import java.io.IOException; import java.io.PrintStream; import java.net.HttpURLConnection; import java.net.URL; import junit.framework.Assert; import org.apache.commons.io.IOUtils; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import com.gargoylesoftware.htmlunit.html.SubmittableElement; public class DroolsProjectTest extends DroolsTestCase { public void testCreate() throws Exception { DroolsProject project = createProject("project", "staging-1.rf"); String processXML = IOUtils.toString(getClass().getResourceAsStream( "staging-1.rf")); Assert.assertNotNull(hudson.getItem("project")); Assert.assertEquals(processXML, project.getProcessXML()); Assert.assertNotNull(project.getSession()); Assert.assertFalse(project.isDisabled()); } public void testCreateViaBrowser() throws Exception { HtmlPage createProjectPage = new WebClient().goTo("/newJob"); HtmlForm form = (HtmlForm) createProjectPage .getFirstByXPath("//form[@action='createItem']"); ((HtmlTextInput) form.getInputByName("name")).type("project name"); ((HtmlRadioButtonInput) form.getFirstByXPath("//input[@value='" + DroolsProject.DescriptorImpl.class.getName() + "']")).click(); HtmlButton button = (HtmlButton) form.getFirstByXPath("//button"); HtmlPage projectPage = (HtmlPage) form.submit(button); DroolsProject project = (DroolsProject) hudson.getItem("project name"); Assert.assertNotNull("no project created", project); Assert.assertTrue("project not disabled after creation", project .isDisabled()); form = (HtmlForm) projectPage .getFirstByXPath("//form[@action='configSubmit']"); String description = "a description"; form.getTextAreaByName("description").setText(description); String triggerSpec = "1 2 3 4 5"; form.getTextAreaByName("triggerSpec").setText(triggerSpec); String processXML = IOUtils.toString(getClass().getResourceAsStream( "staging-1.rf")); form.getTextAreaByName("processXML").setText(processXML); form.submit((SubmittableElement) form.getFirstByXPath("//button")); Assert.assertEquals(processXML, project.getProcessXML()); Assert.assertEquals(triggerSpec, project.getTriggerSpec()); Assert.assertNotNull(project.getSession()); Assert.assertFalse(project.isDisabled()); Assert.assertEquals(description, project.getDescription()); } public void testDelete() throws IOException, InterruptedException { DroolsProject project = createProject("project", "SimpleProjectTest-1.rf"); Assert.assertNotNull(hudson.getItem("project")); project.delete(); Assert.assertNull(hudson.getItem("project")); } public void testDeleteViaBrowser() throws Exception { createProject("project", "SimpleProjectTest-1.rf"); Assert.assertNotNull(hudson.getItem("project")); HtmlPage page = new WebClient().goTo("job/project"); page = (HtmlPage) page.getAnchorByHref("/job/project/delete").click(); HtmlForm form = getFormByAction(page, "doDelete"); submitForm(form); Assert.assertNull(hudson.getItem("project")); } public void testBuildViaBrowser() throws Exception { DroolsProject project = createProject("project", "SimpleProjectTest-1.rf"); createFreeStyleProject("Project1"); HtmlPage page = new WebClient().goTo("job/project"); ((HtmlAnchor) page.getFirstByXPath("//a[text()='Build Now']")).click(); assertBuildResult(project, Result.SUCCESS, 1); waitForWorkflowComplete(project, 1); } public void testDoUpdateViaIDE() throws Exception { DroolsProject project = createProject("project", "SimpleProjectTest-1.rf"); createFreeStyleProject("Project1"); String processXML = IOUtils.toString(getClass().getResourceAsStream( "staging-1.rf")); URL url = new URL("http://localhost:" + localPort + "/" + project.getUrl() + "submitWorkflow"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn .setRequestProperty(hudson.getCrumbIssuer().getDescriptor() .getCrumbRequestField(), hudson.getCrumbIssuer() .getCrumb(null)); PrintStream stream = new PrintStream(conn.getOutputStream()); stream.print(processXML); stream.close(); assertEquals(200, conn.getResponseCode()); Assert.assertEquals(processXML, project.getProcessXML()); } }