diff --git a/src/test/java/org/olat/selenium/ImsQTI21Test.java b/src/test/java/org/olat/selenium/ImsQTI21Test.java index 9728e222347308bee6db2b142180de54482a2abe..65dfc8f4a2d758f06ac33acbc31d74fb8a5a21b9 100644 --- a/src/test/java/org/olat/selenium/ImsQTI21Test.java +++ b/src/test/java/org/olat/selenium/ImsQTI21Test.java @@ -41,6 +41,7 @@ import org.olat.selenium.page.User; import org.olat.selenium.page.course.AssessmentToolPage; import org.olat.selenium.page.course.CourseEditorPageFragment; import org.olat.selenium.page.course.CoursePageFragment; +import org.olat.selenium.page.course.MembersPage; import org.olat.selenium.page.graphene.OOGraphene; import org.olat.selenium.page.qti.QTI21ConfigurationCEPage; import org.olat.selenium.page.qti.QTI21CorrectionPage; @@ -1064,4 +1065,108 @@ public class ImsQTI21Test extends Deployments { .getQTI21Page(participantBrowser) .assertOnCourseAssessmentTestScore(2); } + + /** + * An author create a course with a course element + * of type self test. It add a participant. The + * participant log in, go to the course to make the + * test. + * + * @param loginPage The login page + * @throws IOException + * @throws URISyntaxException + */ + @Test + @RunAsClient + public void qti21Course_selfTest(@InitialPage LoginPage loginPage) + throws IOException, URISyntaxException { + + UserVO author = new UserRestClient(deploymentUrl).createAuthor(); + UserVO ryomou = new UserRestClient(deploymentUrl).createRandomUser("ryomou"); + + loginPage.loginAs(author.getLogin(), author.getPassword()); + + //upload a test + String qtiTestTitle = "Simple QTI 2.1 " + UUID.randomUUID(); + URL qtiTestUrl = JunitTestHelper.class.getResource("file_resources/qti21/simple_QTI_21_test.zip"); + File qtiTestFile = new File(qtiTestUrl.toURI()); + navBar + .openAuthoringEnvironment() + .uploadResource(qtiTestTitle, qtiTestFile); + + //create a course + String courseTitle = "Course-self-" + UUID.randomUUID(); + CoursePageFragment courseRuntime = navBar + .openAuthoringEnvironment() + .createCourse(courseTitle) + .clickToolbarBack(); + + //add participants + MembersPage members = courseRuntime + .members(); + members + .importMembers() + .setMembers(ryomou) + .nextUsers() + .nextOverview() + .selectRepositoryEntryRole(false, false, true) + .nextPermissions() + .finish(); + // back to course + members + .clickToolbarBack(); + + //create a course element of type Test with the test that we create above + String nodeTitle = "Selftest"; + CourseEditorPageFragment courseEditor = CoursePageFragment.getCourse(browser) + .edit(); + courseEditor + .createNode("iqself") + .nodeTitle(nodeTitle) + .selectTabLearnContent() + .chooseTest(qtiTestTitle); + + QTI21ConfigurationCEPage configPage = new QTI21ConfigurationCEPage(browser); + configPage + .showResultsOnHomepage(Boolean.TRUE, QTI21AssessmentResultsOptions.allOptions()) + .showScoreOnHomepage(true) + .saveConfiguration(); + + courseEditor + .autoPublish() + .publish() + .settings() + .accessConfiguration() + .setUserAccess(UserAccess.membersOnly) + .save() + .clickToolbarBack(); + + //log out + new UserToolsPage(browser) + .logout(); + + // participant comes in and do the self test + loginPage.loginAs(ryomou.getLogin(), ryomou.getPassword()); + + NavigationPage ryomouNavBar = new NavigationPage(browser); + ryomouNavBar + .openMyCourses() + .select(courseTitle); + + CoursePageFragment course = new CoursePageFragment(browser); + course + .clickTree() + .selectWithTitle(nodeTitle); + + QTI21Page qtiPage = QTI21Page + .getQTI21Page(browser); + qtiPage + .start() + .answerSingleChoiceWithParagraph("Right") + .saveAnswer() + .endTest() + .closeAssessmentResults() + .assertOnStart() + .assertOnAssessmentResults(); + } } diff --git a/src/test/java/org/olat/selenium/page/qti/QTI21Page.java b/src/test/java/org/olat/selenium/page/qti/QTI21Page.java index 5575f3ffe686f47e33ae6803bd9a43fdf0b2bc93..ddd327e967ecf77bab1d0238008d28d8d8b5d348 100644 --- a/src/test/java/org/olat/selenium/page/qti/QTI21Page.java +++ b/src/test/java/org/olat/selenium/page/qti/QTI21Page.java @@ -59,13 +59,19 @@ public class QTI21Page { return new QTI21Page(browser); } + public QTI21Page assertOnStart() { + By startBy = By.cssSelector("a.o_sel_start_qti21assessment"); + OOGraphene.waitElement(startBy, browser); + return this; + } + public QTI21Page start() { By startBy = By.cssSelector("a.o_sel_start_qti21assessment"); WebElement startButton = browser.findElement(startBy); startButton.click(); OOGraphene.waitBusy(browser); By mainBy = By.cssSelector("div.qtiworks.o_assessmenttest"); - OOGraphene.waitElement(mainBy, 5, browser); + OOGraphene.waitElement(mainBy, browser); return this; }