/**
* Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET
* (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije
* informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE
* COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp.,
* INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM
* ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC))
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
* BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.societies.integration.api.selenium.components;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.societies.integration.api.selenium.pages.PrivacyPolicyNegotiationRequestPage;
import java.util.Arrays;
import static junit.framework.Assert.fail;
public class UFNotificationPopup extends BasePageComponent {
public static final String POPUP_PATH = "//div[@id='mainForm:notificationDialog']";
public static final String CLOSE_BTN_PATH = POPUP_PATH + "//span[@class='ui-icon ui-icon-closethick']";
public static final String ACKNACK_POPUP_PANEL = POPUP_PATH + "//div[@id='mainForm:notificationGrid:%s:ackNackPopupPanel']";
public static final String ACKNACK_BUTTON = ACKNACK_POPUP_PANEL + "//span[text()='%s']";
public static final String ACKNACK_POPUP_PANEL_ANY_INDEX = POPUP_PATH + "//div[starts-with(@id,'mainForm:notificationGrid:') and contains(@id, ':ackNackPopupPanel')]";
public static final String ACKNACK_BUTTON_ANY_INDEX = ACKNACK_POPUP_PANEL_ANY_INDEX + "//span[text()='%s']";
public static final String ACKNACK_ANY_BUTTON_ANY_INDEX = ACKNACK_POPUP_PANEL_ANY_INDEX + "//span[contains(@class, 'ui-button-text')]";
public static final String SELECTONE_POPUP_PANEL = POPUP_PATH + "//div[@id='mainForm:notificationGrid:%s:selectOnePopupPanel']";
public static final String SELECTONE_OPTION = SELECTONE_POPUP_PANEL + "//label[text()='%s']";
public static final String SELECTONE_BUTTON = SELECTONE_POPUP_PANEL + "//span[text()='Submit']";
public static final String SELECTONE_POPUP_PANEL_ANY_INDEX = POPUP_PATH + "//div[starts-with(@id,'mainForm:notificationGrid:') and contains(@id, ':selectOnePopupPanel')]";
public static final String SELECTONE_OPTION_ANY_INDEX = SELECTONE_POPUP_PANEL_ANY_INDEX + "//label[text()='%s']";
public static final String SELECTONE_ANY_OPTION_ANY_INDEX = SELECTONE_POPUP_PANEL_ANY_INDEX + "//label";
public static final String SELECTONE_BUTTON_ANY_INDEX = SELECTONE_POPUP_PANEL_ANY_INDEX + "//span[text()='Submit']";
public static final String SELECTMANY_POPUP_PANEL = POPUP_PATH + "//div[@id='mainForm:notificationGrid:%s:selectManyPopupPanel']";
public static final String SELECTMANY_OPTION = SELECTMANY_POPUP_PANEL + "//label[text()='%s']";
public static final String SELECTMANY_BUTTON = SELECTMANY_POPUP_PANEL + "//span[text()='Submit']";
public static final String SELECTMANY_POPUP_PANEL_ANY_INDEX = POPUP_PATH + "//div[starts-with(@id,'mainForm:notificationGrid:') and contains(@id, ':selectManyPopupPanel')]";
public static final String SELECTMANY_OPTION_ANY_INDEX = SELECTMANY_POPUP_PANEL_ANY_INDEX + "//label[text()='%s']";
public static final String SELECTMANY_ANY_OPTION_ANY_INDEX = SELECTMANY_POPUP_PANEL_ANY_INDEX + "//label";
public static final String SELECTMANY_BUTTON_ANY_INDEX = SELECTMANY_POPUP_PANEL_ANY_INDEX + "//span[text()='Submit']";
public static final String TA_POPUP_PANEL = POPUP_PATH + "//div[@id='mainForm:notificationGrid:%s:timedAbortPopupPanel']";
public static final String TA_ACCEPT_BUTTON = TA_POPUP_PANEL + "//button[contains(@id, 'taAcceptButton')]";
public static final String TA_ABORT_BUTTON = TA_POPUP_PANEL + "//button[contains(@id, 'taAbortButton')]";
public static final String TA_POPUP_PANEL_ANY_INDEX = POPUP_PATH + "//div[starts-with(@id,'mainForm:notificationGrid:') and contains(@id, ':timedAbortPopupPanel')]";
public static final String TA_ACCEPT_BUTTON_ANY_INDEX = TA_POPUP_PANEL_ANY_INDEX + "//button[contains(@id, 'taAcceptButton')]";
public static final String TA_ABORT_BUTTON_ANY_INDEX = TA_POPUP_PANEL_ANY_INDEX + "//button[contains(@id, 'taAbortButton')]";
public static final String PPN_MORE_INFO_LINK = "//a[@href='privacy_policy_negotiation.xhtml?id=%s']";
public static final String FIRST_PPN_MORE_INFO_LINK = "//a[contains(@href,'privacy_policy_negotiation.xhtml?id=')]";
public UFNotificationPopup(WebDriver driver) {
super(driver);
waitUntilVisible(By.xpath(POPUP_PATH));
}
public void answerAllOutstandingRequestsWithAnyOption() {
int i = 100;
while (true) {
try {
verifyElementsVisible(By.xpath(ACKNACK_POPUP_PANEL_ANY_INDEX));
answerAckNackRequestWithAnyOption();
i--;
} catch (NoSuchElementException ex) {
break;
}
if (i <= 0)
fail("Too many requests to accept");
}
while (true) {
try {
verifyElementsVisible(By.xpath(SELECTONE_POPUP_PANEL_ANY_INDEX));
answerSelectOneRequestWithAnyOption();
i--;
} catch (NoSuchElementException ex) {
break;
}
if (i <= 0)
fail("Too many requests to accept");
}
while (true) {
try {
verifyElementsVisible(By.xpath(SELECTMANY_POPUP_PANEL_ANY_INDEX));
answerSelectManyRequestWithAnyOption();
i--;
} catch (NoSuchElementException ex) {
break;
}
if (i <= 0)
fail("Too many requests to accept");
}
while (true) {
try {
verifyElementsVisible(By.xpath(TA_POPUP_PANEL_ANY_INDEX));
abortTimedAbortRequest();
i--;
} catch (NoSuchElementException ex) {
break;
}
if (i <= 0)
fail("Too many requests to accept");
}
}
public void answerAckNackRequestWithAnyOption() {
log.debug("Answering AckNack request with any option");
WebElement ele = waitUntilVisible(By.xpath(ACKNACK_ANY_BUTTON_ANY_INDEX));
ele.click();
waitUntilStale(ele);
}
public void answerAckNackRequest(String response) {
log.debug("Answering AckNack request with " + response);
clickButton(By.xpath(String.format(ACKNACK_BUTTON_ANY_INDEX, response)));
}
public void answerAckNackRequest(int index, String response) {
log.debug("Answering AckNack request at index " + index + " with " + response);
clickButton(By.xpath(String.format(ACKNACK_BUTTON, index, response)));
}
public void answerSelectOneRequestWithAnyOption() {
log.debug("Answering SelectOne request with any option");
clickButton(By.xpath(SELECTONE_ANY_OPTION_ANY_INDEX));
WebElement ele = waitUntilVisible(By.xpath(SELECTONE_BUTTON_ANY_INDEX));
ele.click();
waitUntilStale(ele);
}
public void answerSelectOneRequest(String response) {
log.debug("Answering SelectOne request with " + response);
clickButton(By.xpath(String.format(SELECTONE_OPTION_ANY_INDEX, response)));
clickButton(By.xpath(SELECTONE_BUTTON_ANY_INDEX));
}
public void answerSelectOneRequest(int index, String response) {
log.debug("Answering SelectOne request at index " + index + " with " + response);
clickButton(By.xpath(String.format(SELECTONE_OPTION, index, response)));
clickButton(By.xpath(String.format(SELECTONE_BUTTON, index)));
}
public void answerSelectManyRequestWithAnyOption() {
log.debug("Answering SelectMany request with any option");
clickButton(By.xpath(SELECTMANY_ANY_OPTION_ANY_INDEX));
WebElement ele = waitUntilVisible(By.xpath(SELECTMANY_BUTTON_ANY_INDEX));
ele.click();
waitUntilStale(ele);
}
public void answerSelectManyRequest(String[] responses) {
log.debug("Answering SelectMany request with " + Arrays.toString(responses));
for (String response : responses) {
clickButton(By.xpath(String.format(SELECTMANY_OPTION_ANY_INDEX, response)));
}
clickButton(By.xpath(SELECTMANY_BUTTON_ANY_INDEX));
}
public void answerSelectManyRequest(int index, String[] responses) {
log.debug("Answering SelectMany request at index " + index + " with " + Arrays.toString(responses));
for (String response : responses) {
clickButton(By.xpath(String.format(SELECTMANY_OPTION, index, response)));
}
clickButton(By.xpath(String.format(SELECTMANY_BUTTON, index)));
}
public void acceptTimedAbortRequest() {
clickButton(By.xpath(TA_ACCEPT_BUTTON_ANY_INDEX));
}
public void abortTimedAbortRequest() {
clickButton(By.xpath(TA_ABORT_BUTTON_ANY_INDEX));
}
public void acceptTimedAbortRequest(int index) {
clickButton(By.xpath(String.format(TA_ACCEPT_BUTTON, index)));
}
public void abortTimedAbortRequest(int index) {
clickButton(By.xpath(String.format(TA_ABORT_BUTTON, index)));
}
public void close() {
clickButton(By.xpath(CLOSE_BTN_PATH));
}
public PrivacyPolicyNegotiationRequestPage clickPPNLink(String requestId) {
log.debug("Selecting PPN link for request ID " + requestId);
WebElement ele = waitUntilVisible(By.xpath(String.format(PPN_MORE_INFO_LINK, requestId)));
ele.click();
waitUntilStale(ele);
return new PrivacyPolicyNegotiationRequestPage(getDriver());
}
public PrivacyPolicyNegotiationRequestPage clickFirstPPNLink() {
log.debug("Selecting first PPN link");
WebElement ele = waitUntilVisible(By.xpath(FIRST_PPN_MORE_INFO_LINK));
ele.click();
waitUntilStale(ele);
return new PrivacyPolicyNegotiationRequestPage(getDriver());
}
}