/*
* JBoss, Home of Professional Open Source
* Copyright 2010-2016, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.tests.metamer.ftest.richPanelMenuItem;
import static org.jboss.arquillian.graphene.Graphene.guardAjax;
import static org.jboss.arquillian.graphene.Graphene.guardNoRequest;
import static org.richfaces.tests.metamer.ftest.BasicAttributes.disabledClass;
import static org.richfaces.tests.metamer.ftest.BasicAttributes.leftIconClass;
import static org.richfaces.tests.metamer.ftest.BasicAttributes.rightIconClass;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.disabled;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.leftDisabledIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.leftIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.mode;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.rendered;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.rightDisabledIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.rightIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.selectable;
import static org.richfaces.tests.metamer.ftest.richPanelMenuItem.PanelMenuItemAttributes.status;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import javax.faces.event.PhaseId;
import org.jboss.arquillian.graphene.Graphene;
import org.jboss.arquillian.graphene.condition.element.WebElementConditionFactory;
import org.jboss.arquillian.graphene.page.Page;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Action;
import org.richfaces.PanelMenuMode;
import org.richfaces.tests.metamer.ftest.AbstractWebDriverTest;
import org.richfaces.tests.metamer.ftest.annotations.IssueTracking;
import org.richfaces.tests.metamer.ftest.checker.IconsChecker;
import org.richfaces.tests.metamer.ftest.extension.attributes.coverage.annotations.CoversAttributes;
import org.richfaces.tests.metamer.ftest.extension.configurator.templates.annotation.Templates;
import org.richfaces.tests.metamer.ftest.webdriver.Attributes;
import org.richfaces.tests.metamer.ftest.webdriver.MetamerPage;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
* @author <a href="mailto:jjamrich@redhat.com">Jan Jamrich</a>
* @since 4.3.1
*/
public class TestPanelMenuItemSimple extends AbstractWebDriverTest {
@Page
private PanelMenuItemPage page;
private final Attributes<PanelMenuItemAttributes> panelMenuItemAttributes = getAttributes();
@Override
public String getComponentTestPagePath() {
return "richPanelMenuItem/simple.xhtml";
}
@BeforeMethod(alwaysRun = true)
public void setupMode() {
panelMenuItemAttributes.set(mode, PanelMenuMode.ajax);
}
@Test
@CoversAttributes({ "action", "actionListener" })
public void testActionAndActionListener() {
guardAjax(page.getItem()).select();
page.assertPhases(PhaseId.RESTORE_VIEW, PhaseId.APPLY_REQUEST_VALUES, PhaseId.PROCESS_VALIDATIONS,
PhaseId.UPDATE_MODEL_VALUES, PhaseId.INVOKE_APPLICATION, PhaseId.RENDER_RESPONSE);
page.assertListener(PhaseId.INVOKE_APPLICATION, "action listener invoked");
page.assertListener(PhaseId.INVOKE_APPLICATION, "action invoked");
}
@Test(groups = "smoke")
@CoversAttributes("data")
public void testData() {
testData(new Action() {
@Override
public void perform() {
page.getItem().select();
}
});
}
@Test
@CoversAttributes("disabled")
public void testDisabled() {
// unselect tested item
guardAjax(page.getPanelMenu()).selectItem(0);
assertFalse(page.getItem().advanced().isDisabled());
panelMenuItemAttributes.set(disabled, true);
assertFalse(page.getItem().advanced().isSelected());
assertTrue(page.getItem().advanced().isDisabled());
guardNoRequest(page.getItem()).select();
assertFalse(page.getItem().advanced().isSelected());
assertTrue(page.getItem().advanced().isDisabled());
}
@Test
@CoversAttributes("disabledClass")
@Templates(value = "plain")
public void testDisabledClass() {
panelMenuItemAttributes.set(disabled, true);
testStyleClass(page.getItem().advanced().getRootElement(), disabledClass);
}
@Test
@CoversAttributes("label")
@Templates(value = "plain")
public void testLabel() {
String testedVal = "completely new label";
panelMenuItemAttributes.set(PanelMenuItemAttributes.label, testedVal);
assertEquals(page.getItem().advanced().getRootElement().getText().trim(), testedVal);
}
@Test
@CoversAttributes("leftDisabledIcon")
@Templates(value = "plain")
public void testLeftDisabledIcon() {
panelMenuItemAttributes.set(disabled, true);
verifyStandardIcons(leftDisabledIcon, page.getItem().advanced().getLeftIconElement(), page.getItem().advanced()
.getLeftIconImgElement());
}
@Test
@CoversAttributes("leftIcon")
@Templates(value = "plain")
public void testLeftIcon() {
verifyStandardIcons(leftIcon, page.getItem().advanced().getLeftIconElement(), page.getItem().advanced().getLeftIconImgElement());
panelMenuItemAttributes.set(disabled, true);
assertTrue(page.getItem().advanced().isTransparent(page.getItem().advanced().getLeftIconElement()));
}
@Test
@CoversAttributes("leftIconClass")
@Templates(value = "plain")
public void testLeftIconClass() {
testStyleClass(page.getItem().advanced().getLeftIconElement(), leftIconClass);
}
@Test(groups = "smoke")
@CoversAttributes("limitRender")
public void testLimitRender() {
attsSetter()
.setAttribute(PanelMenuItemAttributes.render).toValue("renderChecker")
.setAttribute(PanelMenuItemAttributes.limitRender).toValue(true)
.asSingleAction().perform();
String renderChecker = page.getRenderCheckerOutputElement().getText();
MetamerPage.requestTimeNotChangesWaiting(page.getItem()).select();
Graphene.waitModel().until("Page was not updated").element(page.getRenderCheckerOutputElement()).text().not()
.equalTo(renderChecker);
}
@Test
@CoversAttributes("name")
@Templates(value = "plain")
public void testName() {
String testedVal = "itemWithNewName";
panelMenuItemAttributes.set(PanelMenuItemAttributes.name, testedVal);
guardAjax(page.getItem()).select();
assertEquals(page.getSelectedItemOutputText(), testedVal);
}
@Test
@CoversAttributes("render")
public void testRender() {
testRenderWithSwitchTypeOrMode(new Action() {
@Override
public void perform() {
guardAjax(page.getItem()).select();
}
});
}
@Test
@CoversAttributes("rendered")
@Templates(value = "plain")
public void testRendered() {
assertTrue(new WebElementConditionFactory(page.getItem().advanced().getRootElement()).isVisible().apply(driver));
panelMenuItemAttributes.set(rendered, false);
assertFalse(new WebElementConditionFactory(page.getItem().advanced().getRootElement()).isVisible().apply(driver));
}
@Test
@CoversAttributes("rightDisabledIcon")
@Templates(value = "plain")
public void testRightDisabledIcon() {
panelMenuItemAttributes.set(disabled, true);
verifyStandardIcons(rightDisabledIcon, page.getItem().advanced().getRightIconElement(), page.getItem().advanced()
.getRightIconImgElement());
}
@Test
@CoversAttributes("rightIcon")
@IssueTracking("https://issues.jboss.org/browse/RF-10519")
@Templates(value = "plain")
public void testRightIcon() {
verifyStandardIcons(rightIcon, page.getItem().advanced().getRightIconElement(), page.getItem().advanced().getRightIconImgElement());
panelMenuItemAttributes.set(disabled, true);
assertTrue(page.getItem().advanced().isTransparent(page.getItem().advanced().getRightIconElement()));
}
@Test
@CoversAttributes("rightIconClass")
@IssueTracking("https://issues.jboss.org/browse/RF-10519")
@Templates(value = "plain")
public void testRightIconClass() {
testStyleClass(page.getItem().advanced().getRightIconElement(), rightIconClass);
}
@Test
@CoversAttributes("selectable")
public void testSelectable() {
// unselect tested item
guardAjax(page.getPanelMenu()).selectItem(0);
panelMenuItemAttributes.set(selectable, false);
guardNoRequest(page.getItem()).select();
assertFalse(page.getItem().advanced().isSelected());
panelMenuItemAttributes.set(selectable, true);
guardAjax(page.getItem()).select();
assertTrue(page.getItem().advanced().isSelected());
}
@Test
@CoversAttributes("status")
public void testStatus() {
panelMenuItemAttributes.set(status, "statusChecker");
String statusChecker = page.getStatusCheckerOutputElement().getText();
page.getItem().select();
Graphene.waitAjax().until("Page was not updated").element(page.getStatusCheckerOutputElement()).text().not()
.equalTo(statusChecker);
}
@Test
@CoversAttributes("style")
@Templates(value = "plain")
public void testStyle() {
testStyle(page.getItem().advanced().getRootElement());
}
@Test
@CoversAttributes("styleClass")
@Templates(value = "plain")
public void testStyleClass() {
testStyleClass(page.getItem().advanced().getRootElement());
}
private void verifyStandardIcons(PanelMenuItemAttributes attribute, WebElement icon, WebElement imgIcon) {
new IconsChecker<PanelMenuItemAttributes>(driver, panelMenuItemAttributes).checkAll(attribute, icon, imgIcon, false, false);
}
}