package pl.labno.bernard.htmlunified;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSpan;
import com.gargoylesoftware.htmlunit.html.HtmlTableCell;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* NicelyResynchronizingAjaxController is EVIL! Don't use it!
*/
public class ScheduleTest {
@Test
public void accessEventTitles() throws IOException {
WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = login(client);
@SuppressWarnings("unchecked")
final List titleElements = (List) page.getElementById("results:schedule").getByXPath(".//span[@class='fc-event-title']");
List titles = new ArrayList(titleElements.size());
for (HtmlSpan o : titleElements) {
titles.add(o.asText());
}
Assert.assertEquals(6, titles.size());
}
@Test
public void clickStudentSuggestionBox() throws IOException {
WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = login(client);
page.addDomChangeListener(new DomChangeLogger());
page.getElementById("searchClass:sS").addHtmlAttributeChangeListener(new HtmlAttributeChangeLogger());
HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i");
studentInput.type('w');
studentInput.type('i');
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
// Here the suggestionBox is still hidden
WebClientUtils.waitForJSJob(client, 0, 30000);
// Here suggestionBox is visible
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
Map suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0);
Assert.assertEquals(1, suggestions.size());
System.out.println(suggestions);
HtmlTableCell cell = suggestions.get("Willis Bruce");
Assert.assertNotNull(cell);
cell.click();
WebClientUtils.waitForJSJob(client, 0, 30000);
Assert.assertEquals("Willis Bruce", ((HtmlElement) page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText());
System.out.println("Success!");
WebClientUtils.waitForJSJob(client, 0, 30000);
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
studentInput = (HtmlInput) page.getElementById("searchClass:student_i");
studentInput.setValueAttribute("");
studentInput.type('l');
studentInput.type('i');
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
// Here the suggestionBox is still hidden
WebClientUtils.waitForJSJob(client, 0, 30000);
// Here suggestionBox is visible
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0);
Assert.assertEquals(1, suggestions.size());
System.out.println(suggestions);
cell = suggestions.get("Linda Bogusław");
Assert.assertNotNull(cell);
cell.click();
WebClientUtils.waitForJSJob(client, 0, 30000);
Assert.assertEquals("Linda Bogusław", ((HtmlElement) page.getByXPath("//*[@id='searchClass:searchStudent']").get(0)).asText());
System.out.println("Success2!");
}
@Test
public void switchBetwenScheduleAndTableMode() throws IOException {
WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = login(client);
page.getElementById("j_id2118:j_id2119:0").click();
page.getElementById("j_id2118:j_id2119:0").blur();
WebClientUtils.waitForJSJob(client, 0, 30000);
// System.out.println(page.getElementById("results").asXml());
Assert.assertNotNull(page.getElementById("results:table"));
page.getElementById("j_id2118:j_id2119:1").click();
page.getElementById("j_id2118:j_id2119:1").blur();
WebClientUtils.waitForJSJob(client, 0, 30000);
// System.out.println(page.getElementById("results").asXml());
Assert.assertNotNull(page.getElementById("results:schedule"));
page.getElementById("j_id2118:j_id2119:0").click();
page.getElementById("j_id2118:j_id2119:0").blur();
WebClientUtils.waitForJSJob(client, 0, 30000);
// System.out.println(page.getElementById("results").asXml());
Assert.assertNotNull(page.getElementById("results:table"));
}
@Test
public void selectStudentSuggestionByTab() throws IOException {
final WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
final RequestResponseLogger requestResponseLogger = new RequestResponseLogger(client);
requestResponseLogger.off();
HtmlPage page = login(client);
final HtmlInput studentInput = (HtmlInput) page.getElementById("searchClass:student_i");
studentInput.type('w');
studentInput.type('i');
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
// Here the suggestionBox is still hidden
WebClientUtils.waitForJSJob(client, 0, 30000);
// Here suggestionBox is visible
Map suggestions = WebClientUtils.getSuggestions(page.getElementById("searchClass:sS"), 0);
Assert.assertEquals(1, suggestions.size());
// System.out.println(suggestions);
HtmlTableCell cell = suggestions.get("Willis Bruce");
Assert.assertNotNull(cell);
studentInput.type('\t');
WebClientUtils.waitForJSJob(client, 0, 30000);
Assert.assertEquals("Willis Bruce", page.getElementById("searchClass:searchStudent").asText());
// requestResponseLogger.on();
// client.setAlertHandler(new AlertLogger());
// page.addDomChangeListener(new DomChangeLogger());
final HtmlElement element = page.getElementById("searchClass:searchStudent").getElementsByTagName("img").get(0);
element.click();
WebClientUtils.waitForJSJob(client, 0, 30000);
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
Assert.assertEquals("", page.getElementById("searchClass:searchStudent").asText());
}
private HtmlPage login(WebClient client) throws IOException {
HtmlPage page = (HtmlPage) client.getPage("http://localhost:8080/schoolmanager/view/class/current.seam?networkId=salsafactory");
((HtmlInput) page.getElementById("loginForm:email")).setValueAttribute("it.crowd.test@gmail.com");
((HtmlInput) page.getElementById("loginForm:password")).setValueAttribute("aaaaa");
HtmlPage oldPage = page;
page = page.getElementById("loginForm:submit").click();
// This assert would fail (when page redidrects than you need to obtain new page)
// Assert.assertEquals(page,oldPage);
Assert.assertEquals(client.getCurrentWindow().getEnclosedPage(), page);
return page;
}
}