/**
* <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.course;
import java.util.List;
import org.junit.Assert;
import org.olat.selenium.page.graphene.OOGraphene;
import org.olat.selenium.page.group.GroupPage;
import org.olat.selenium.page.group.GroupsPage;
import org.olat.selenium.page.group.MembersWizardPage;
import org.olat.user.restapi.UserVO;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
/**
*
* Drive the members management page in course
*
*
* Initial date: 12.02.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class MembersPage {
private final WebDriver browser;
public MembersPage(WebDriver browser) {
this.browser = browser;
}
public MembersWizardPage addMember() {
By addMemberBy = By.className("o_sel_course_add_member");
browser.findElement(addMemberBy).click();
OOGraphene.waitBusy(browser);
return new MembersWizardPage(browser);
}
public MembersWizardPage importMembers() {
By importMembersBy = By.className("o_sel_course_import_members");
browser.findElement(importMembersBy).click();
OOGraphene.waitBusy(browser);
return new MembersWizardPage(browser);
}
public MembersPage selectBusinessGroups() {
By groupsItemBy = By.cssSelector("li.o_sel_membersmgt_groups a");
browser.findElement(groupsItemBy).click();
OOGraphene.waitBusy(browser);
By groupTitleby = By.cssSelector("h4 i.o_icon.o_icon_group");
OOGraphene.waitElement(groupTitleby, 5, browser);
return this;
}
public MembersPage selectMembers() {
By groupsItemBy = By.cssSelector("li.o_sel_membersmgt_members a");
browser.findElement(groupsItemBy).click();
OOGraphene.waitBusy(browser);
By groupTitleby = By.cssSelector("h4 i.o_icon.o_icon_group");
OOGraphene.waitElement(groupTitleby, 5, browser);
return this;
}
public GroupPage selectBusinessGroup(String name) {
return new GroupsPage(browser).selectGroup(name);
}
public MembersPage createBusinessGroup(String name, String description,
int maxParticipants, boolean waitingList, boolean auto) {
By createBy = By.className("o_sel_course_new_group");
browser.findElement(createBy).click();
OOGraphene.waitBusy(browser);
By popupBy = By.cssSelector("div.modal-content fieldset.o_sel_group_edit_group_form");
OOGraphene.waitElement(popupBy, 5, browser);
//fill the form
By nameBy = By.cssSelector(".o_sel_group_edit_title input[type='text']");
browser.findElement(nameBy).sendKeys(name);
OOGraphene.tinymce(description, browser);
if(maxParticipants > 0) {
By maxParticipantBy = By.cssSelector(".o_sel_group_edit_max_members input[type='text']");
browser.findElement(maxParticipantBy).sendKeys(Integer.toString(maxParticipants));
}
if(waitingList) {
By waitingListBy = By.cssSelector(".o_sel_group_edit_waiting_list input[type='checkbox']");
browser.findElement(waitingListBy).click();
OOGraphene.waitBusy(browser);
}
if(auto) {
By autoBy = By.cssSelector(".o_sel_group_edit_auto_close_ranks input[type='checkbox']");
browser.findElement(autoBy).click();
OOGraphene.waitBusy(browser);
}
//save
By submitBy = By.cssSelector(".o_sel_group_edit_group_form button.btn-primary");
WebElement submitButton = browser.findElement(submitBy);
submitButton.click();
OOGraphene.waitBusy(browser);
return this;
}
/**
* Add a user by username as participant
*
* @param user
*/
public void quickAdd(UserVO user) {
addMember()
.searchMember(user, true)
.next().next().next().finish();
}
/**
* Check if the user with the specified first name is in the member list.
* @param user
* @return
*/
public MembersPage assertFirstNameInList(UserVO user) {
By firstNameBy = By.xpath("//td//a[contains(text(),'" + user.getFirstName() + "')]");
By rowBy = By.cssSelector(".o_sel_member_list table.table tr");
List<WebElement> rows = browser.findElements(rowBy);
boolean found = false;
for(WebElement row:rows) {
List<WebElement> firstNameEl = row.findElements(firstNameBy);
if(firstNameEl.size() > 0) {
found = true;
break;
}
}
Assert.assertTrue(found);
return this;
}
/**
* Click back to the course
*
* @return
*/
public CoursePageFragment clickToolbarBack() {
OOGraphene.closeBlueMessageWindow(browser);
By toolbarBackBy = By.cssSelector("li.o_breadcrumb_back>a");
browser.findElement(toolbarBackBy).click();
OOGraphene.waitBusy(browser);
return new CoursePageFragment(browser);
}
}