package org.openengsb.openticket.integrationtest.htmlunit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openengsb.openticket.integrationtest.util.AbstractExamTestHelper;
import org.ops4j.pax.exam.junit.JUnit4TestRunner;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTable;
import com.gargoylesoftware.htmlunit.html.HtmlTableRow;
@RunWith(JUnit4TestRunner.class)
public class TaskboxUIWorkflowIT extends AbstractExamTestHelper {
private WebClient webClient;
private String startPageUrl = "http://localhost:8091/openticket/";
private static long WAIT_PAGE_REFRESH = 2000L;
@Before
public void setUp() throws Exception {
webClient = new WebClient();
}
@After
public void tearDown() throws Exception {
webClient.closeAllWindows();
FileUtils.deleteDirectory(new File(getWorkingDirectory()));
}
@Test
public void testTicketPassingThroughWorkflow() throws Exception {
final HtmlPage startPage = webClient.getPage(startPageUrl);
final HtmlPage loginPage = startPage.getAnchorByText("Login").click();
HtmlForm form = loginPage.getForms().get(0);
HtmlSubmitInput loginButton = form.getInputByValue("Login");
form.getInputByName("username").setValueAttribute("admin");
form.getInputByName("password").setValueAttribute("password");
HtmlPage indexPage = loginButton.click();
HtmlPage createTicketPage = indexPage.getAnchorByText("Create Ticket").click();
HtmlForm createForm = createTicketPage.getForms().get(0);
createForm.getInputByName("ticketname").setValueAttribute("testname");
createForm.getInputByName("ticketcustomer").setValueAttribute("testcustomer");
createForm.getInputByName("ticketcontactEmailAddress").setValueAttribute("test@contact.com");
createForm.getTextAreaByName("ticketdescription").setText("something is not right.");
createForm.getSelectByName("tickettype").getOptions().get(2).setSelected(true);
createForm.getSelectByName("ticketpriority").getOptions().get(2).setSelected(true);
HtmlSubmitInput createButton = createForm.getInputByName("submitButton");
createButton.click();
Thread.sleep(WAIT_PAGE_REFRESH);
indexPage = webClient.getPage(startPageUrl);
HtmlPage overviewPage = indexPage.getAnchorByText("Ticket-Overview").click();
HtmlTable table = overviewPage.getFirstByXPath("//table");
HtmlTableRow ticketRow = table.getRow(2);
HtmlPage developerTicketPage = ticketRow.getCell(0).getHtmlElementsByTagName("a").get(0).click();
assertTrue(developerTicketPage.asText().contains("testname"));
assertTrue(developerTicketPage.asText().contains("something is not right."));
assertTrue(developerTicketPage.asText().contains("DeveloperTicket"));
HtmlForm develForm = developerTicketPage.getForms().get(1);
develForm.getInputByName("developerComment").setValueAttribute("done");
develForm.getInputByName("problemsOccurred").setValueAttribute("none");
develForm.getInputByName("workingHours").setValueAttribute("10");
develForm.getInputByValue("Finish Ticket").click();
Thread.sleep(WAIT_PAGE_REFRESH);
indexPage = webClient.getPage(startPageUrl);
overviewPage = indexPage.getAnchorByText("Ticket-Overview").click();
table = overviewPage.getFirstByXPath("//table");
ticketRow = table.getRow(2);
HtmlPage reviewerTicketPage = ticketRow.getCell(0).getHtmlElementsByTagName("a").get(0).click();
assertTrue(reviewerTicketPage.asText().contains("testname"));
assertTrue(reviewerTicketPage.asText().contains("something is not right."));
assertTrue(reviewerTicketPage.asText().contains("ReviewerTicket"));
HtmlForm reviewForm = reviewerTicketPage.getForms().get(1);
reviewForm.getTextAreaByName("feedback").setText("well done!");
HtmlCheckBoxInput box = reviewForm.getInputByName("ticketResolved");
box.setChecked(true);
reviewForm.getInputByValue("Finish Ticket").click();
Thread.sleep(WAIT_PAGE_REFRESH);
indexPage = webClient.getPage(startPageUrl);
overviewPage = indexPage.getAnchorByText("Ticket-Overview").click();
table = overviewPage.getFirstByXPath("//table");
ticketRow = table.getRow(2);
HtmlPage finalTaskViewPage = ticketRow.getCell(0).getHtmlElementsByTagName("a").get(0).click();
assertTrue(finalTaskViewPage.asText().contains("TaskFinalView"));
assertTrue(finalTaskViewPage.asText().contains("something is not right."));
assertTrue(finalTaskViewPage.asText().contains("done"));
HtmlForm closeForm = finalTaskViewPage.getForms().get(1);
closeForm.getInputByValue("Close").click();
Thread.sleep(WAIT_PAGE_REFRESH);
indexPage = webClient.getPage(startPageUrl);
overviewPage = indexPage.getAnchorByText("Ticket-Overview").click();
table = overviewPage.getFirstByXPath("//table");
assertEquals(3, table.getRows().size());
}
}