Search in sources :

Example 1 with InstructorCourseEnrollPage

use of teammates.test.pageobjects.InstructorCourseEnrollPage in project teammates by TEAMMATES.

the class AdminHomePageUiTest method testCreateInstructorAction.

private void testCreateInstructorAction() throws Exception {
    InstructorAttributes instructor = new InstructorAttributes();
    instructor.name = "AHPUiT Instrúctör WithPlusInEmail";
    instructor.email = "AHPUiT+++_.instr1!@gmail.tmt";
    String institute = "TEAMMATES Test Institute 1";
    String demoCourseId = "AHPUiT____.instr1_.gma-demo";
    String instructorDetails = instructor.name + " | " + instructor.email + "\n" + instructor.name + " | " + instructor.email + " | " + institute;
    ______TS("action fail & success: add multiple instructors");
    BackDoor.deleteAccount(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
    BackDoor.deleteCourse(demoCourseId);
    BackDoor.deleteInstructor(demoCourseId, instructor.email);
    homePage.createInstructorByInstructorDetailsSingleLineForm(instructorDetails);
    InstructorAttributes instructorInBackend = getInstructorWithRetry(demoCourseId, instructor.email);
    assertEquals("Instructor Details must have 3 columns", homePage.getMessageFromResultTable(1));
    String encryptedKey = getKeyForInstructorWithRetry(demoCourseId, instructor.email);
    // use AppUrl from Config because the join link takes its base URL from build.properties
    String expectedjoinUrl = Config.getAppUrl(Const.ActionURIs.INSTRUCTOR_COURSE_JOIN).withRegistrationKey(encryptedKey).withInstructorInstitution(institute).toAbsoluteString();
    assertEquals("Instructor AHPUiT Instrúctör WithPlusInEmail has been successfully created " + Const.JOIN_LINK, homePage.getMessageFromResultTable(2));
    assertEquals(expectedjoinUrl, homePage.getJoinLink(homePage.getMessageFromResultTable(2)));
    assertEquals(instructor.getName(), instructorInBackend.getName());
    assertEquals(instructor.getEmail(), instructorInBackend.getEmail());
    homePage.clearInstructorDetailsSingleLineForm();
    ______TS("action success: displayed instructor details are properly HTML-encoded");
    InstructorAttributes dangerousInstructor = new InstructorAttributes();
    dangerousInstructor.name = "Malicious <script>alert('dangerous');</script>Instrúctör";
    dangerousInstructor.email = "malicious.instr1<>!@gmail.tmt";
    String dangerousInstitute = "TEAMMATES Malicious Institute <!@!@!>";
    String dangerousDemoCourseId = "malicious.instr1___.gma-demo";
    BackDoor.deleteAccount(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
    BackDoor.deleteCourse(dangerousDemoCourseId);
    BackDoor.deleteInstructor(dangerousDemoCourseId, dangerousInstructor.email);
    homePage.createInstructor(dangerousInstructor, dangerousInstitute);
    assertEquals(dangerousInstructor.name, homePage.getNameFromResultTable(1));
    assertEquals(dangerousInstructor.email, homePage.getEmailFromResultTable(1));
    assertEquals(dangerousInstitute, homePage.getInstitutionFromResultTable(1));
    ______TS("action success : create instructor account and the account is created successfully " + "after user's verification");
    BackDoor.deleteAccount(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
    BackDoor.deleteCourse(demoCourseId);
    BackDoor.deleteInstructor(demoCourseId, instructor.email);
    homePage.createInstructor(instructor, institute);
    encryptedKey = getKeyForInstructorWithRetry(demoCourseId, instructor.email);
    // use AppUrl from Config because the join link takes its base URL from build.properties
    expectedjoinUrl = Config.getAppUrl(Const.ActionURIs.INSTRUCTOR_COURSE_JOIN).withRegistrationKey(encryptedKey).withInstructorInstitution(institute).toAbsoluteString();
    assertEquals("Instructor AHPUiT Instrúctör WithPlusInEmail has been successfully created " + Const.JOIN_LINK, homePage.getMessageFromResultTable(1));
    assertEquals(expectedjoinUrl, homePage.getJoinLink(homePage.getMessageFromResultTable(1)));
    homePage.logout();
    // verify the instructor and the demo course have been created
    assertNotNull(getCourseWithRetry(demoCourseId));
    assertNotNull(getInstructorWithRetry(demoCourseId, instructor.email));
    // get the joinURL which sent to the requester's email
    String regkey = getKeyForInstructorWithRetry(demoCourseId, instructor.email);
    String joinLink = createUrl(Const.ActionURIs.INSTRUCTOR_COURSE_JOIN).withRegistrationKey(regkey).withInstructorInstitution(institute).toAbsoluteString();
    // simulate the user's verification here because it is added by admin
    browser.driver.get(joinLink);
    InstructorCourseJoinConfirmationPage confirmationPage = AppPage.createCorrectLoginPageType(browser).loginAsJoiningInstructor(TestProperties.TEST_INSTRUCTOR_ACCOUNT, TestProperties.TEST_INSTRUCTOR_PASSWORD);
    confirmationPage.clickCancelButton();
    browser.driver.get(joinLink);
    confirmationPage = AppPage.createCorrectLoginPageType(browser).loginAsJoiningInstructor(TestProperties.TEST_INSTRUCTOR_ACCOUNT, TestProperties.TEST_INSTRUCTOR_PASSWORD);
    confirmationPage.clickConfirmButtonWithRetry();
    // check a account has been created for the requester successfully
    assertNotNull(getAccountWithRetry(TestProperties.TEST_INSTRUCTOR_ACCOUNT));
    // verify sample course is accessible for newly joined instructor as an instructor
    ______TS("new instructor can see sample course in homepage");
    InstructorHomePage instructorHomePage = AppPage.getNewPageInstance(browser, InstructorHomePage.class);
    instructorHomePage.verifyHtmlMainContent("/newlyJoinedInstructorHomePage.html");
    ______TS("new instructor can access sample course details page");
    InstructorCourseEnrollPage enrollPage = instructorHomePage.clickCourseEnrollLink(demoCourseId);
    instructorHomePage = enrollPage.goToPreviousPage(InstructorHomePage.class);
    InstructorCourseDetailsPage detailsPage = instructorHomePage.clickCourseViewLink(demoCourseId);
    detailsPage.verifyHtmlMainContent("/newlyJoinedInstructorCourseDetailsPage.html");
    ______TS("new instructor can access sample course edit page");
    instructorHomePage = detailsPage.goToPreviousPage(InstructorHomePage.class);
    InstructorCourseEditPage editPage = instructorHomePage.clickCourseEditLink(demoCourseId);
    editPage.verifyHtmlMainContent("/newlyJoinedInstructorCourseEditPage.html");
    ______TS("new instructor can view feedback sessions of sample course");
    AppUrl url = createUrl(Const.ActionURIs.INSTRUCTOR_COURSES_PAGE).withUserId(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
    coursesPage = AppPage.getNewPageInstance(browser, url, InstructorCoursesPage.class);
    coursesPage.waitForAjaxLoadCoursesSuccess();
    verifyCanViewSessionResults(demoCourseId, "First team feedback session", "/newlyJoinedInstructorFirstFeedbackSessionResultsPage.html");
    verifyCanViewSessionResults(demoCourseId, "Second team feedback session", "/newlyJoinedInstructorSecondFeedbackSessionResultsPage.html");
    verifyCanViewSessionResults(demoCourseId, "Session with different question types", "/newlyJoinedInstructorThirdFeedbackSessionResultsPage.html");
    ______TS("action failure : trying to create instructor with an invalid email");
    AppUrl homeUrl = createUrl(Const.ActionURIs.ADMIN_HOME_PAGE);
    homePage = loginAdminToPage(homeUrl, AdminHomePage.class);
    instructor.email = "AHPUiT.email.tmt";
    homePage.createInstructor(instructor, institute);
    assertEquals(getPopulatedErrorMessage(FieldValidator.EMAIL_ERROR_MESSAGE, instructor.email, FieldValidator.EMAIL_FIELD_NAME, FieldValidator.REASON_INCORRECT_FORMAT, FieldValidator.EMAIL_MAX_LENGTH), homePage.getMessageFromResultTable(1));
    ______TS("action success: course is accessible for newly joined instructor as student");
    // in staging server, the student account uses the hardcoded email above, so this can only be test on dev server
    if (!TestProperties.isDevServer()) {
        BackDoor.deleteCourse(demoCourseId);
        BackDoor.deleteAccount(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
        BackDoor.deleteInstructor(demoCourseId, instructor.email);
        return;
    }
    // verify sample course is accessible for newly joined instructor as an student
    StudentHomePage studentHomePage = getHomePage().clickStudentLogin().loginAsStudent(TestProperties.TEST_INSTRUCTOR_ACCOUNT, TestProperties.TEST_INSTRUCTOR_PASSWORD);
    studentHomePage.verifyContains(demoCourseId);
    studentHomePage.clickViewTeam();
    StudentCourseDetailsPage courseDetailsPage = AppPage.getNewPageInstance(browser, StudentCourseDetailsPage.class);
    courseDetailsPage.verifyHtmlMainContent("/newlyJoinedInstructorStudentCourseDetailsPage.html");
    studentHomePage = courseDetailsPage.goToPreviousPage(StudentHomePage.class);
    studentHomePage.clickViewFeedbackButton("First team feedback session");
    StudentFeedbackResultsPage sfrp = AppPage.getNewPageInstance(browser, StudentFeedbackResultsPage.class);
    sfrp.verifyHtmlMainContent("/newlyJoinedInstructorStudentFeedbackResultsPage.html");
    studentHomePage = sfrp.goToPreviousPage(StudentHomePage.class);
    studentHomePage.clickEditFeedbackButton("First team feedback session");
    FeedbackSubmitPage fsp = AppPage.getNewPageInstance(browser, FeedbackSubmitPage.class);
    fsp.verifyHtmlMainContent("/newlyJoinedInstructorStudentFeedbackSubmissionEdit.html");
    studentHomePage = fsp.loadStudentHomeTab();
    StudentProfilePage spp = studentHomePage.loadProfileTab();
    spp.verifyContains("Student Profile");
    spp.verifyContains("AHPUiT Instrúctör WithPlusInEmail");
    studentHomePage.logout();
    // login in as instructor again to test sample course deletion
    instructorHomePage = getHomePage().clickInstructorLogin().loginAsInstructor(TestProperties.TEST_INSTRUCTOR_ACCOUNT, TestProperties.TEST_INSTRUCTOR_PASSWORD);
    instructorHomePage.clickAndConfirm(instructorHomePage.getDeleteCourseLink(demoCourseId));
    assertTrue(instructorHomePage.getTextsForAllStatusMessagesToUser().contains("The course " + demoCourseId + " has been deleted."));
    instructorHomePage.logout();
    BackDoor.deleteAccount(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
    BackDoor.deleteCourse(demoCourseId);
    BackDoor.deleteInstructor(demoCourseId, instructor.email);
    BackDoor.deleteAccount(TestProperties.TEST_INSTRUCTOR_ACCOUNT);
    BackDoor.deleteCourse(dangerousDemoCourseId);
    BackDoor.deleteInstructor(dangerousDemoCourseId, dangerousInstructor.email);
}
Also used : StudentFeedbackResultsPage(teammates.test.pageobjects.StudentFeedbackResultsPage) InstructorCourseEnrollPage(teammates.test.pageobjects.InstructorCourseEnrollPage) AppUrl(teammates.common.util.AppUrl) InstructorCoursesPage(teammates.test.pageobjects.InstructorCoursesPage) FeedbackSubmitPage(teammates.test.pageobjects.FeedbackSubmitPage) StudentCourseDetailsPage(teammates.test.pageobjects.StudentCourseDetailsPage) StudentProfilePage(teammates.test.pageobjects.StudentProfilePage) InstructorAttributes(teammates.common.datatransfer.attributes.InstructorAttributes) InstructorCourseEditPage(teammates.test.pageobjects.InstructorCourseEditPage) AdminHomePage(teammates.test.pageobjects.AdminHomePage) InstructorCourseDetailsPage(teammates.test.pageobjects.InstructorCourseDetailsPage) InstructorHomePage(teammates.test.pageobjects.InstructorHomePage) StudentHomePage(teammates.test.pageobjects.StudentHomePage) InstructorCourseJoinConfirmationPage(teammates.test.pageobjects.InstructorCourseJoinConfirmationPage)

Example 2 with InstructorCourseEnrollPage

use of teammates.test.pageobjects.InstructorCourseEnrollPage in project teammates by TEAMMATES.

the class InstructorCourseEnrollPageScalabilityTest method testEnrollAction.

private void testEnrollAction(int numStudents) throws IOException {
    AppUrl enrollUrl = createUrl(Const.ActionURIs.INSTRUCTOR_COURSE_ENROLL_PAGE).withUserId(testData.instructors.get("CCEnrollScT.teammates.test").googleId).withCourseId(testData.courses.get("CCEnrollScT.CS2104").getId());
    InstructorCourseEnrollPage enrollPage = loginAdminToPage(enrollUrl, InstructorCourseEnrollPage.class);
    String enrollString = InstructorCourseEnrollPageDataGenerator.generateStudents(numStudents);
    log.info("Testing with " + numStudents + " students...");
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.start();
    enrollPage.enroll(enrollString);
    log.info("Time taken: " + stopwatch.getTimeElapsedInSeconds());
}
Also used : InstructorCourseEnrollPage(teammates.test.pageobjects.InstructorCourseEnrollPage) AppUrl(teammates.common.util.AppUrl) Stopwatch(teammates.client.scripts.util.Stopwatch)

Example 3 with InstructorCourseEnrollPage

use of teammates.test.pageobjects.InstructorCourseEnrollPage in project teammates by TEAMMATES.

the class InstructorHomePageUiTest method testCourseLinks.

private void testCourseLinks() {
    String courseId = testData.courses.get("CHomeUiT.CS1101").getId();
    String instructorId = testData.accounts.get("account").googleId;
    ______TS("link: course enroll");
    InstructorCourseEnrollPage enrollPage = homePage.clickCourseEnrollLink(courseId);
    enrollPage.verifyContains("Enroll Students for CHomeUiT.CS1101");
    String expectedEnrollLinkText = createUrl(Const.ActionURIs.INSTRUCTOR_COURSE_ENROLL_PAGE).withCourseId(courseId).withUserId(instructorId).toAbsoluteString();
    assertEquals(expectedEnrollLinkText, browser.driver.getCurrentUrl());
    homePage.goToPreviousPage(InstructorHomePage.class);
    ______TS("link: course view");
    InstructorCourseDetailsPage detailsPage = homePage.clickCourseViewLink(courseId);
    detailsPage.verifyContains("Course Details");
    String expectedViewLinkText = createUrl(Const.ActionURIs.INSTRUCTOR_COURSE_DETAILS_PAGE).withCourseId(courseId).withUserId(instructorId).toAbsoluteString();
    assertEquals(expectedViewLinkText, browser.driver.getCurrentUrl());
    homePage.goToPreviousPage(InstructorHomePage.class);
    ______TS("link: course edit");
    InstructorCourseEditPage editPage = homePage.clickCourseEditLink(courseId);
    editPage.verifyContains("Edit Course Details");
    String expectedEditLinkText = createUrl(Const.ActionURIs.INSTRUCTOR_COURSE_EDIT_PAGE).withCourseId(courseId).withUserId(instructorId).toAbsoluteString();
    assertEquals(expectedEditLinkText, browser.driver.getCurrentUrl());
    homePage.goToPreviousPage(InstructorHomePage.class);
    ______TS("link: course add session");
    InstructorFeedbackSessionsPage feedbacksPage = homePage.clickCourseAddEvaluationLink(courseId);
    feedbacksPage.verifyContains("Add New Feedback Session");
    String expectedAddSessionLinkText = createUrl(Const.ActionURIs.INSTRUCTOR_FEEDBACK_SESSIONS_PAGE).withUserId(instructorId).withCourseId(courseId).toAbsoluteString();
    assertEquals(expectedAddSessionLinkText, browser.driver.getCurrentUrl());
    homePage.goToPreviousPage(InstructorHomePage.class);
}
Also used : InstructorFeedbackSessionsPage(teammates.test.pageobjects.InstructorFeedbackSessionsPage) InstructorCourseEditPage(teammates.test.pageobjects.InstructorCourseEditPage) InstructorCourseEnrollPage(teammates.test.pageobjects.InstructorCourseEnrollPage) InstructorCourseDetailsPage(teammates.test.pageobjects.InstructorCourseDetailsPage)

Example 4 with InstructorCourseEnrollPage

use of teammates.test.pageobjects.InstructorCourseEnrollPage in project teammates by TEAMMATES.

the class InstructorStudentListPageUiTest method testLinks.

private void testLinks() {
    String instructorId = testData.instructors.get("instructorOfCourse2").googleId;
    AppUrl viewPageUrl = createUrl(Const.ActionURIs.INSTRUCTOR_STUDENT_LIST_PAGE).withUserId(instructorId);
    viewPage = loginAdminToPage(viewPageUrl, InstructorStudentListPage.class);
    ______TS("link: enroll");
    String courseId = testData.courses.get("course2").getId();
    InstructorCourseEnrollPage enrollPage = viewPage.clickEnrollStudents(courseId);
    enrollPage.verifyIsCorrectPage(courseId);
    viewPage = enrollPage.goToPreviousPage(InstructorStudentListPage.class);
    ______TS("link: view");
    StudentAttributes student1 = testData.students.get("Student2Course2");
    viewPage.checkCourse(0);
    viewPage.checkCourse(1);
    ThreadHelper.waitFor(500);
    InstructorCourseStudentDetailsViewPage studentDetailsPage = viewPage.clickViewStudent(student1.course, student1.name);
    studentDetailsPage.verifyIsCorrectPage(student1.email);
    studentDetailsPage.closeCurrentWindowAndSwitchToParentWindow();
    viewPage = loginAdminToPage(viewPageUrl, InstructorStudentListPage.class);
    ______TS("link: edit");
    StudentAttributes student2 = testData.students.get("Student3Course3");
    viewPage.checkCourse(0);
    viewPage.checkCourse(1);
    ThreadHelper.waitFor(500);
    InstructorCourseStudentDetailsEditPage studentEditPage = viewPage.clickEditStudent(student2.course, student2.name);
    studentEditPage.verifyIsCorrectPage(student2.email);
    studentEditPage.submitButtonClicked();
    studentEditPage.closeCurrentWindowAndSwitchToParentWindow();
    viewPage = loginAdminToPage(viewPageUrl, InstructorStudentListPage.class);
    ______TS("link: view records");
    viewPage.checkCourse(0);
    viewPage.checkCourse(1);
    ThreadHelper.waitFor(500);
    InstructorStudentRecordsPage studentRecordsPage = viewPage.clickViewRecordsStudent(student2.course, student2.name);
    studentRecordsPage.verifyIsCorrectPage(student2.name);
    studentRecordsPage.closeCurrentWindowAndSwitchToParentWindow();
    viewPage = loginAdminToPage(viewPageUrl, InstructorStudentListPage.class);
}
Also used : InstructorCourseStudentDetailsViewPage(teammates.test.pageobjects.InstructorCourseStudentDetailsViewPage) InstructorCourseStudentDetailsEditPage(teammates.test.pageobjects.InstructorCourseStudentDetailsEditPage) InstructorCourseEnrollPage(teammates.test.pageobjects.InstructorCourseEnrollPage) AppUrl(teammates.common.util.AppUrl) InstructorStudentListPage(teammates.test.pageobjects.InstructorStudentListPage) StudentAttributes(teammates.common.datatransfer.attributes.StudentAttributes) InstructorStudentRecordsPage(teammates.test.pageobjects.InstructorStudentRecordsPage)

Example 5 with InstructorCourseEnrollPage

use of teammates.test.pageobjects.InstructorCourseEnrollPage in project teammates by TEAMMATES.

the class InstructorCoursesPageUiTest method testLinks.

private void testLinks() {
    /* Explanation: We test each of 'view' links and 'enroll' links.
         * 'Delete' is not a link, but an action.
         */
    String courseId = testData.courses.get("CS2104").getId();
    ______TS("view link");
    /* Explanation: When checking links, we check the destination page
         * for some keywords rather than do a full content match.
         */
    InstructorCourseDetailsPage detailsPage = coursesPage.loadViewLink(courseId).verifyIsCorrectPage(courseId);
    coursesPage = detailsPage.goToPreviousPage(InstructorCoursesPage.class);
    ______TS("enroll link");
    InstructorCourseEnrollPage enrollPage = coursesPage.loadEnrollLink(courseId).verifyIsCorrectPage(courseId);
    coursesPage = enrollPage.goToPreviousPage(InstructorCoursesPage.class);
    ______TS("edit link");
    InstructorCourseEditPage editPage = coursesPage.loadEditLink(courseId).verifyIsCorrectPage(courseId);
    coursesPage = editPage.goToPreviousPage(InstructorCoursesPage.class);
}
Also used : InstructorCourseEditPage(teammates.test.pageobjects.InstructorCourseEditPage) InstructorCourseEnrollPage(teammates.test.pageobjects.InstructorCourseEnrollPage) InstructorCourseDetailsPage(teammates.test.pageobjects.InstructorCourseDetailsPage) InstructorCoursesPage(teammates.test.pageobjects.InstructorCoursesPage)

Aggregations

InstructorCourseEnrollPage (teammates.test.pageobjects.InstructorCourseEnrollPage)5 AppUrl (teammates.common.util.AppUrl)3 InstructorCourseDetailsPage (teammates.test.pageobjects.InstructorCourseDetailsPage)3 InstructorCourseEditPage (teammates.test.pageobjects.InstructorCourseEditPage)3 InstructorCoursesPage (teammates.test.pageobjects.InstructorCoursesPage)2 Stopwatch (teammates.client.scripts.util.Stopwatch)1 InstructorAttributes (teammates.common.datatransfer.attributes.InstructorAttributes)1 StudentAttributes (teammates.common.datatransfer.attributes.StudentAttributes)1 AdminHomePage (teammates.test.pageobjects.AdminHomePage)1 FeedbackSubmitPage (teammates.test.pageobjects.FeedbackSubmitPage)1 InstructorCourseJoinConfirmationPage (teammates.test.pageobjects.InstructorCourseJoinConfirmationPage)1 InstructorCourseStudentDetailsEditPage (teammates.test.pageobjects.InstructorCourseStudentDetailsEditPage)1 InstructorCourseStudentDetailsViewPage (teammates.test.pageobjects.InstructorCourseStudentDetailsViewPage)1 InstructorFeedbackSessionsPage (teammates.test.pageobjects.InstructorFeedbackSessionsPage)1 InstructorHomePage (teammates.test.pageobjects.InstructorHomePage)1 InstructorStudentListPage (teammates.test.pageobjects.InstructorStudentListPage)1 InstructorStudentRecordsPage (teammates.test.pageobjects.InstructorStudentRecordsPage)1 StudentCourseDetailsPage (teammates.test.pageobjects.StudentCourseDetailsPage)1 StudentFeedbackResultsPage (teammates.test.pageobjects.StudentFeedbackResultsPage)1 StudentHomePage (teammates.test.pageobjects.StudentHomePage)1