Skip to content
Snippets Groups Projects
Commit b212c0bd authored by srosse's avatar srosse
Browse files

no-jira: selenium test for maintenance messages

parent 9e6e00ee
No related branches found
No related tags found
No related merge requests found
......@@ -85,7 +85,9 @@ public class InfoMessageControllerSingleVM extends BasicController {
infomsgEditButton = LinkFactory.createButton("infomsgEdit", infoMsgView, this);
infomsgClearButton = LinkFactory.createButton("infomsgClear", infoMsgView, this);
maintenancemsgEditButton = LinkFactory.createButton("maintenancemsgEdit", infoMsgView, this);
maintenancemsgEditButton.setElementCssClass("o_sel_maintenance_msg_edit");
maintenancemsgClearButton = LinkFactory.createButton("maintenancemsgClear", infoMsgView, this);
maintenancemsgClearButton.setElementCssClass("o_sel_maintenance_msg_clear");
//login
String infoMsg = mrg.getInfoMessage();
......
<div class="o_block_large">
<fieldset>
<legend>Admin.</legend>
<p><i>Message Admin-Token: $!admintoken</i></p>
</fieldset>
</div>
<fieldset>
<legend>Admin.</legend>
<p><i>Message Admin-Token: $!admintoken</i></p>
</fieldset>
<div class="o_block_large">
<fieldset>
<legend>$r.translate("infomsg.title")</legend>
......
<fieldset class="o_sel_maintenance_msg_form">
#if ($infoEdit)
<h3>$r.translate("infomsgEdit")</h3>
<legend>$r.translate("infomsgEdit")</legend>
#if ($cluster)
$r.render("infoMsgFormCluster")
#else
$r.render("infoMsgForm")
#end
#else
<h3>$r.translate("maintenancemsgEdit")</h3>
<legend>$r.translate("maintenancemsgEdit")</legend>
#if ($cluster)
$r.render("maintenanceMsgFormCluster")
#else
......@@ -14,6 +15,7 @@
#end
#end
<h3>$r.translate("staticFolder")</h3>
<h4>$r.translate("staticFolder")</h4>
<div class="o_copy_code o_nowrap">$extlink</div>
$r.render("staticFolder")
\ No newline at end of file
$r.render("staticFolder")
</fieldset>
\ No newline at end of file
......@@ -22,6 +22,7 @@ package org.olat.selenium;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.UUID;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
......@@ -33,6 +34,10 @@ import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.olat.selenium.page.LoginPage;
import org.olat.selenium.page.NavigationPage;
import org.olat.selenium.page.Participant;
import org.olat.selenium.page.Student;
import org.olat.selenium.page.core.AdministrationMessagesPage;
import org.olat.test.ArquillianDeployments;
import org.olat.test.rest.UserRestClient;
import org.olat.user.restapi.UserVO;
......@@ -103,4 +108,61 @@ public class LoginTest {
//login
loginPage.loginAs(user.getLogin(), user.getPassword());
}
/**
* An administrator set a maintenance message. A first user
* logs in before and wait until the message appears. A second
* user load the login page, check that the message is visible,
* logs in and check that the message is visible too.
*
*
* @param loginPage
* @param reiBrowser
* @param kanuBrowser
* @throws IOException
* @throws URISyntaxException
*/
@Test
@RunAsClient
public void maintenanceMessage(@InitialPage LoginPage loginPage,
@Drone @Participant WebDriver reiBrowser,
@Drone @Student WebDriver kanuBrowser)
throws IOException, URISyntaxException {
UserVO rei = new UserRestClient(deploymentUrl).createRandomUser("Rei");
UserVO kanu = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
//a first user log in
LoginPage kanuLogin = LoginPage.getLoginPage(kanuBrowser, deploymentUrl)
.loginAs(kanu)
.resume();
// administrator come in, and set a maintenance message
loginPage
.assertOnLoginPage()
.loginAs("administrator", "openolat");
String message = "Hello - " + UUID.randomUUID();
AdministrationMessagesPage messagesPage = new NavigationPage(browser)
.openAdministration()
.selectInfoMessages()
.newMaintenanceMessage(message);
//A new user see the login page
LoginPage.getLoginPage(reiBrowser, deploymentUrl)
.waitOnMaintenanceMessage(message)
.loginAs(rei)
.resume()
.assertOnMaintenanceMessage(message);
kanuLogin
.waitOnMaintenanceMessage(message);
//administrator remove the message
messagesPage
.clearMaintenanceMessage();
//we wait it disappears
kanuLogin
.waitOnMaintenanceMessageCleared();
}
}
......@@ -56,6 +56,8 @@ public class LoginPage {
public static final By resumeButton = By.className("o_sel_resume_yes");
public static final By usernameFooterBy = By.id("o_username");
public static final By maintenanceMessageBy = By.cssSelector("#o_msg_sticky p");
@Drone
private WebDriver browser;
......@@ -87,6 +89,23 @@ public class LoginPage {
Assert.assertTrue(name.contains(lastName));
}
public LoginPage assertOnMaintenanceMessage(String text) {
WebElement messageEl = browser.findElement(maintenanceMessageBy);
String message = messageEl.getText();
Assert.assertTrue(message.contains(text));
return this;
}
public LoginPage waitOnMaintenanceMessage(String text) {
OOGraphene.waitElement(maintenanceMessageBy, 10, browser);
return assertOnMaintenanceMessage(text);
}
public LoginPage waitOnMaintenanceMessageCleared() {
OOGraphene.waitElementDisappears(maintenanceMessageBy, 10, browser);
return this;
}
/**
* Login and accept the disclaimer if there is one.
*
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.selenium.page.core;
import org.olat.selenium.page.graphene.OOGraphene;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
/**
*
* Initial date: 22.07.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class AdministrationMessagesPage {
private final WebDriver browser;
public AdministrationMessagesPage(WebDriver browser) {
this.browser = browser;
}
public AdministrationMessagesPage newMaintenanceMessage(String text) {
By newMessageButtonBy = By.cssSelector("a.o_sel_maintenance_msg_edit");
browser.findElement(newMessageButtonBy).click();
OOGraphene.waitBusy(browser);
OOGraphene.tinymce(text, browser);
By saveBy = By.cssSelector(".o_sel_maintenance_msg_form button.btn-primary");
browser.findElement(saveBy).click();
OOGraphene.waitBusy(browser);
OOGraphene.waitAndCloseBlueMessageWindow(browser);
return this;
}
public AdministrationMessagesPage clearMaintenanceMessage() {
By clearBy = By.cssSelector("a.o_sel_maintenance_msg_clear");
browser.findElement(clearBy).click();
OOGraphene.waitBusy(browser);
return this;
}
}
......@@ -21,7 +21,6 @@ package org.olat.selenium.page.core;
import java.util.List;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.junit.Assert;
import org.olat.selenium.page.graphene.OOGraphene;
import org.openqa.selenium.By;
......@@ -36,25 +35,32 @@ import org.openqa.selenium.WebElement;
*
*/
public class AdministrationPage {
//private static final By
@Drone
private WebDriver browser;
public AdministrationPage() {
//
}
private final WebDriver browser;
public AdministrationPage(WebDriver browser) {
this.browser = browser;
}
public AdministrationPage clearCache(String cacheName) {
//system tree node
WebElement systemLink = browser.findElement(By.xpath("//div[contains(@class,'o_tree')]//a[contains(@href,'systemParent/')]"));
systemLink.click();
public AdministrationMessagesPage selectInfoMessages() {
this.selectSystemInfo();
By messagesBy = By.cssSelector(".o_sel_sysinfo span.o_tree_level_label_leaf>a");
browser.findElement(messagesBy).click();
OOGraphene.waitBusy(browser);
return new AdministrationMessagesPage(browser);
}
public AdministrationPage selectSystemInfo() {
By systemLinkby = By.xpath("//div[contains(@class,'o_tree')]//a[contains(@href,'systemParent/')]");
browser.findElement(systemLinkby).click();
OOGraphene.waitBusy(browser);
return this;
}
public AdministrationPage clearCache(String cacheName) {
selectSystemInfo();
//cache tree node
WebElement cacheLink = browser.findElement(By.cssSelector(".o_sel_caches span.o_tree_level_label_leaf>a"));
cacheLink.click();
......
......@@ -59,6 +59,11 @@ public class OOGraphene {
.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible();
}
public static void waitElementDisappears(By element, int timeoutInSeconds, WebDriver browser) {
Graphene.waitModel(browser).withTimeout(timeoutInSeconds, TimeUnit.SECONDS)
.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().not().present();
}
public static void waitElement(WebElement element, WebDriver browser) {
Graphene.waitModel(browser).pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment