Something went wrong on our end
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
LecturesTest.java 13.00 KiB
/**
* <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;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Calendar;
import java.util.UUID;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.jboss.arquillian.graphene.page.InitialPage;
import org.jboss.arquillian.graphene.page.Page;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
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.User;
import org.olat.selenium.page.course.CoursePageFragment;
import org.olat.selenium.page.lecture.LectureRepositoryAdminListPage;
import org.olat.selenium.page.lecture.LectureRepositoryAdminPage;
import org.olat.selenium.page.lecture.LectureRepositoryParticipantsPage;
import org.olat.selenium.page.lecture.LecturesRepositoryPage;
import org.olat.selenium.page.lecture.RollCallInterceptorPage;
import org.olat.selenium.page.lecture.TeacherRollCallPage;
import org.olat.selenium.page.repository.AuthoringEnvPage;
import org.olat.selenium.page.repository.AuthoringEnvPage.ResourceType;
import org.olat.selenium.page.repository.RepositoryAccessPage.UserAccess;
import org.olat.selenium.page.user.UserToolsPage;
import org.olat.test.rest.UserRestClient;
import org.olat.user.restapi.UserVO;
import org.openqa.selenium.WebDriver;
/**
* Test suite for the lectures / absence management feature.
*
* Initial date: 7 nov. 2017<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
@RunWith(Arquillian.class)
public class LecturesTest extends Deployments {
@Drone
private WebDriver browser;
@ArquillianResource
private URL deploymentUrl;
@Page
private NavigationPage navBar;
/**
* An author create a course, enable the absence management,
* create a lecture block, add a coach and two participants.<br>
* The coach login in, see the interceptor to start the roll call.
* It starts the roll call, set an absence and close.<br>
* The participant with an absence log in, use the lectures user's
* tool to see that it has an absence.
*
* @param loginPage
* @throws IOException
* @throws URISyntaxException
*/
@Test
@RunAsClient
public void lecturesRollCall_authorizedAbsence(@InitialPage LoginPage loginPage,
@Drone @User WebDriver coachBrowser, @Drone @Participant WebDriver participantBrowser)
throws IOException, URISyntaxException {
// configure the lectures module
loginPage
.loginAs("administrator", "openolat")
.resume();
new NavigationPage(browser)
.openAdministration()
.openLecturesSettings()
.configure(true, false)
.save();
// start the test with authorized absence on
UserVO author = new UserRestClient(deploymentUrl).createAuthor();
UserVO coach = new UserRestClient(deploymentUrl).createRandomUser("Rei");
UserVO participant1 = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
LoginPage
.getLoginPage(browser, deploymentUrl)
.loginAs(author.getLogin(), author.getPassword());
//go to authoring
AuthoringEnvPage authoringEnv = navBar
.assertOnNavigationPage()
.openAuthoringEnvironment();
String title = "Lecture " + UUID.randomUUID();
//create course
authoringEnv
.openCreateDropDown()
.clickCreate(ResourceType.course)
.fillCreateForm(title)
.assertOnGeneralTab()
.clickToolbarBack();
//set access
CoursePageFragment course = new CoursePageFragment(browser);
course
.accessConfiguration()
.setUserAccess(UserAccess.registred)
.clickToolbarBack();
//add a coach
course
.members()
.addMember()
.searchMember(coach, true)
.nextUsers()
.nextOverview()
.selectRepositoryEntryRole(false, true, false)
.nextPermissions()
.finish();
//add the participants
course
.members()
.importMembers()
.setMembers(participant1, participant2)
.nextUsers()
.nextOverview()
.nextPermissions()
.finish();
//enable the lectures
LectureRepositoryAdminPage lecturesAdmin = course
.lecturesAdministration();
lecturesAdmin
.settings()
.enableLectures()
.overrideDefaultSettings()
.saveSettings();
LectureRepositoryAdminListPage lectureList = lecturesAdmin
.lectureList();
Calendar cal = Calendar.getInstance();
int today = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
String lectureTitle = "1. Lecture";
lectureList
.newLectureBlock()
.setTitle(lectureTitle)
.setTeacher(coach)
.setDate(today, hour, 0, hour, 59)
.save();
//coach at work
LoginPage coachLoginPage = LoginPage.getLoginPage(coachBrowser, deploymentUrl);
coachLoginPage
.loginAs(coach);
new RollCallInterceptorPage(coachBrowser)
.start()
.setAbsence(participant1, "1")
.closeRollCall()
.confirmCloseRollCall()
.assertOnClosedTable();
//participant check it roll call
LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
participantLoginPage
.loginAs(participant1)
.resume();
UserToolsPage participantUserTools = new UserToolsPage(participantBrowser);
participantUserTools
.openUserToolsMenu()
.openLectures()
.assertOnParticipantLecturesList()
.selectCourseAsParticipant(title)
.assertOnParticipantLectureBlocks()
.assertOnParticipantLectureBlockAbsent(coach, lectureTitle, title);
}
/**
* An author create a course, enable the absence management,
* create a lecture block, add a coach and two participants.<br>
* The coach login in, see the interceptor to start the roll call
* version mobile.<br>
* It starts the roll call, set an absence and close.<br>
* The participant with an absence log in, use the lectures user's
* tool to see that it has an absence.
*
* @param loginPage
* @throws IOException
* @throws URISyntaxException
*/
@Test
@RunAsClient
public void lectureMobileRollCall_authorizedAbsence(@InitialPage LoginPage loginPage,
@Drone @User WebDriver coachBrowser, @Drone @User WebDriver participantBrowser)
throws IOException, URISyntaxException {
// configure the lectures module
loginPage
.loginAs("administrator", "openolat")
.resume();
new NavigationPage(browser)
.openAdministration()
.openLecturesSettings()
.configure(true, false)
.save();
// start the test with authorized absence on
UserVO author = new UserRestClient(deploymentUrl).createAuthor();
UserVO coach = new UserRestClient(deploymentUrl).createRandomUser("Rei");
UserVO participant1 = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
LoginPage
.getLoginPage(browser, deploymentUrl)
.loginAs(author.getLogin(), author.getPassword());
//go to authoring
AuthoringEnvPage authoringEnv = navBar
.assertOnNavigationPage()
.openAuthoringEnvironment();
String title = "Lecture " + UUID.randomUUID();
//create course
authoringEnv
.openCreateDropDown()
.clickCreate(ResourceType.course)
.fillCreateForm(title)
.assertOnGeneralTab()
.clickToolbarBack();
//set access
CoursePageFragment course = new CoursePageFragment(browser);
course
.accessConfiguration()
.setUserAccess(UserAccess.registred)
.clickToolbarBack();
//add a coach
course
.members()
.addMember()
.searchMember(coach, true)
.nextUsers()
.nextOverview()
.selectRepositoryEntryRole(false, true, false)
.nextPermissions()
.finish();
//add the participants
course
.members()
.importMembers()
.setMembers(participant1, participant2)
.nextUsers()
.nextOverview()
.nextPermissions()
.finish();
//enable the lectures
LectureRepositoryAdminPage lecturesAdmin = course
.lecturesAdministration();
lecturesAdmin
.settings()
.enableLectures()
.overrideDefaultSettings()
.saveSettings();
LectureRepositoryAdminListPage lectureList = lecturesAdmin
.lectureList();
Calendar cal = Calendar.getInstance();
int today = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
String lectureTitle = "2.Lecture";
lectureList
.newLectureBlock()
.setTitle(lectureTitle)
.setTeacher(coach)
.setDate(today, hour, 0, hour, 59)
.save();
//coach at work
LoginPage coachLoginPage = LoginPage.getLoginPage(coachBrowser, deploymentUrl);
coachLoginPage
.loginAs(coach);
new RollCallInterceptorPage(coachBrowser)
.startMobile()
.setAbsence("1")
.saveAndNext()
.setAbsence("1")
.setAbsence("2")
.saveAndNext()
.closeRollCall();
//check that a roll call at least is closed
new TeacherRollCallPage(coachBrowser)
.assertOnClosedTable();
//participant check it roll call
LoginPage participantLoginPage = LoginPage.getLoginPage(participantBrowser, deploymentUrl);
participantLoginPage
.loginAs(participant1)
.resume();
UserToolsPage participantUserTools = new UserToolsPage(participantBrowser);
participantUserTools
.openUserToolsMenu()
.openLectures()
.assertOnParticipantLecturesList()
.selectCourseAsParticipant(title)
.assertOnParticipantLectureBlocks()
.assertOnParticipantLectureBlockAbsent(coach, lectureTitle, title);
}
/**
* An author create a course to use the absence management
* without authorized absence.
*
* @param loginPage
* @throws IOException
* @throws URISyntaxException
*/
@Test
@RunAsClient
public void lecturesRollCall(@InitialPage LoginPage loginPage)
throws IOException, URISyntaxException {
// configure the lectures module
loginPage
.loginAs("administrator", "openolat")
.resume();
new NavigationPage(browser)
.openAdministration()
.openLecturesSettings()
.configure(false, false)
.save();
//start
UserVO author = new UserRestClient(deploymentUrl).createAuthor();
UserVO participant1 = new UserRestClient(deploymentUrl).createRandomUser("Kanu");
UserVO participant2 = new UserRestClient(deploymentUrl).createRandomUser("Rymou");
LoginPage authorLoginPage = LoginPage.getLoginPage(browser, deploymentUrl);
authorLoginPage.loginAs(author.getLogin(), author.getPassword());
//go to authoring
AuthoringEnvPage authoringEnv = navBar
.assertOnNavigationPage()
.openAuthoringEnvironment();
String title = "Lecture " + UUID.randomUUID();
//create course
authoringEnv
.openCreateDropDown()
.clickCreate(ResourceType.course)
.fillCreateForm(title)
.assertOnGeneralTab()
.clickToolbarBack();
CoursePageFragment course = new CoursePageFragment(browser);
//add a coach
course
.members()
.quickAdd(author, true, true);
//add the participants
course
.members()
.quickImport(participant1, participant2);
//enable the lectures
LectureRepositoryAdminPage lecturesAdmin = course
.lecturesAdministration();
lecturesAdmin
.settings()
.enableLectures()
.overrideDefaultSettings()
.saveSettings();
//add a lecture
LectureRepositoryAdminListPage lectureList = lecturesAdmin
.lectureList();
String lectureTitle = "2.Lecture";
lectureList
.newLectureBlock()
.setTitle(lectureTitle)
.setTeacher(author)
.setDateOneHourBefore()
.save();
//go to the lectures list as "teacher"
LecturesRepositoryPage teachersLectures = lecturesAdmin
.clickToolbarRootCrumb()
.lectures();
teachersLectures
.openRollCall(lectureTitle)
.setAbsence(participant1, "1")
.setAbsence(participant1, "2")
.setAbsence(participant1, "3")
.closeRollCall()
.confirmCloseRollCall()
.assertOnClosedTable();
//go to the lecture administration in the course
lecturesAdmin = teachersLectures
.clickToolbarRootCrumb()
.lecturesAdministration();
//edit the first admission to see some result
LectureRepositoryParticipantsPage participantsAdmin = lecturesAdmin
.participantList()
.editParticipant(participant1)
.firstAdmissionBack()
.saveParticipant()
.editParticipant(participant2)
.firstAdmissionBack()
.saveParticipant();
//check
participantsAdmin
.assertOnParticipantLectureBlockAbsent(participant1, 3)
.assertOnParticipantLectureBlockAbsent(participant2, 0);
}
}