package de.flower.common.ui.alert;
import de.flower.common.test.wicket.AbstractWicketUnitTests;
import de.flower.common.test.wicket.WicketTesterHelper;
import org.apache.wicket.markup.Markup;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.Model;
import org.testng.annotations.Test;
/**
* @author flowerrrr
*/
public class AlertMessageFeedbackPanelTest extends AbstractWicketUnitTests {
private static boolean showLink1 = true;
private static boolean isVisible = true;
String link1 = "messages:0:message:link";
String link2 = "messages:1:message:link";
@Test
public void testRender() {
wicketTester.startPage(TestPage.class);
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
wicketTester.assertVisible(link2);
wicketTester.clickLink(link1);
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
}
@Test
public void testIsVisible() {
wicketTester.startPage(TestPage.class);
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
showLink1 = false;
wicketTester.clickLink(link1);
wicketTester.dumpPage();
wicketTester.assertContainsNot("messag 1");
showLink1 = true;
wicketTester.clickLink("nextPage");
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
}
@Test
public void testMessageControlsVisibility() {
wicketTester.startPage(TestPage.class);
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
isVisible = false;
wicketTester.clickLink("nextPage");
wicketTester.dumpPage();
wicketTester.assertInvisible(link1);
isVisible = true;
wicketTester.clickLink("nextPage");
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
}
@Test
public void testCloseButton() {
wicketTester.startPage(TestPage.class);
wicketTester.dumpPage();
wicketTester.assertVisible(link1);
wicketTester.assertVisible(link2);
wicketTester.clickLink("messages:0:message:closeButton");
wicketTester.dumpAjaxResponse();
// does not work for some reason, have to do string matching
wicketTester.assertInvisible(link1);
// wicketTester.assertVisible(link2); does not work, must use string compare
// assert that the component is updated through ajax
wicketTester.assertContains("\\Q<ajax-response><component id=\"message2\" ><![CDATA[]]></component></ajax-response>\\E");
}
public static class TestPage extends WebPage {
public TestPage() {
add(new Link("nextPage") {
@Override
public void onClick() {
setResponsePage(new TestPage());
}
});
add(new AlertMessageFeedbackPanel("panel"));
if (showLink1) {
AlertMessage message = new AlertMessage(Model.of("message 1"), Model.of("label 1")) {
@Override
protected boolean onClick(final AlertMessagePanel alertMessagePanel) {
setResponsePage(new TestPage());
return false;
}
@Override
protected boolean isVisible() {
return isVisible;
}
};
info(message);
}
// add another message that is always visible
AlertMessage message = new AlertMessage(Model.of("message 2"), Model.of("label 2")) {
@Override
protected boolean onClick(final AlertMessagePanel alertMessagePanel) {
setResponsePage(new TestPage());
return false;
}
@Override
protected boolean isVisible() {
return isVisible;
}
};
info(message);
}
@Override
public Markup getAssociatedMarkup() {
String html = "<html><head></head><body>\n"
+ "<div wicket:id='panel' />\n"
+ "<a wicket:id='nextPage' />\n"
+ "</body></html>";
return WicketTesterHelper.creatPageMarkup(html, this);
}
}
}