Search in sources :

Example 1 with AccountsDb

use of teammates.storage.api.AccountsDb in project teammates by TEAMMATES.

the class StudentCourseJoinAuthenticatedActionTest method testExecuteAndPostProcess.

@Override
@Test
public void testExecuteAndPostProcess() throws Exception {
    dataBundle = loadDataBundle("/StudentCourseJoinAuthenticatedTest.json");
    StudentsDb studentsDb = new StudentsDb();
    AccountsDb accountsDb = new AccountsDb();
    StudentAttributes student1InCourse1 = dataBundle.students.get("student1InCourse1");
    student1InCourse1 = studentsDb.getStudentForGoogleId(student1InCourse1.course, student1InCourse1.googleId);
    gaeSimulation.loginAsStudent(student1InCourse1.googleId);
    ______TS("not enough parameters");
    verifyAssumptionFailure();
    ______TS("invalid key");
    String invalidKey = StringHelper.encrypt("invalid key");
    String[] submissionParams = new String[] { Const.ParamsNames.REGKEY, invalidKey, Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_HOME_PAGE };
    try {
        StudentCourseJoinAuthenticatedAction authenticatedAction = getAction(submissionParams);
        getRedirectResult(authenticatedAction);
    } catch (UnauthorizedAccessException uae) {
        assertEquals("No student with given registration key:" + invalidKey, uae.getMessage());
    }
    ______TS("already registered student");
    submissionParams = new String[] { Const.ParamsNames.REGKEY, StringHelper.encrypt(student1InCourse1.key), Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_PROFILE_PAGE };
    StudentCourseJoinAuthenticatedAction authenticatedAction = getAction(submissionParams);
    RedirectResult redirectResult = getRedirectResult(authenticatedAction);
    assertEquals(getPageResultDestination(Const.ActionURIs.STUDENT_HOME_PAGE, true, student1InCourse1.googleId), redirectResult.getDestinationWithParams());
    assertTrue(redirectResult.isError);
    assertEquals("You (student1InCourse1) have already joined this course", redirectResult.getStatusMessage());
    /*______TS("student object belongs to another account");

        StudentAttributes student2InCourse1 = dataBundle.students
                .get("student2InCourse1");
        student2InCourse1 = studentsDb.getStudentForGoogleId(
                student2InCourse1.course, student2InCourse1.googleId);

        submissionParams = new String[] {
                Const.ParamsNames.REGKEY,
                StringHelper.encrypt(student2InCourse1.key),
                Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_HOME_PAGE
        };

        authenticatedAction = getAction(submissionParams);
        redirectResult = getRedirectResult(authenticatedAction);

        assertEquals(
                Const.ActionURIs.STUDENT_HOME_PAGE
                        + "?persistencecourse=" + student1InCourse1.course
                        + "&error=true&user=" + student1InCourse1.googleId,
                redirectResult.getDestinationWithParams());
        assertTrue(redirectResult.isError);
        assertEquals(
                "The join link used belongs to a different user"
                        + " whose Google ID is stude..ourse1 "
                        + "(only part of the Google ID is shown to protect privacy)."
                        + " If that Google ID is owned by you, "
                        + "please logout and re-login using that Google account."
                        + " If it doesn’t belong to you, please "
                        + "<a href=\"mailto:" + Config.SUPPORT_EMAIL
                        + "?body=Your name:%0AYour course:%0AYour university:\">"
                        + "contact us</a> so that we can investigate.",
                redirectResult.getStatusMessage());
*/
    ______TS("join course with no feedback sessions, profile is empty");
    AccountAttributes studentWithEmptyProfile = dataBundle.accounts.get("noFSStudent");
    studentWithEmptyProfile = accountsDb.getAccount(studentWithEmptyProfile.googleId, true);
    assertNotNull(studentWithEmptyProfile.studentProfile);
    assertEquals("", studentWithEmptyProfile.studentProfile.pictureKey);
    assertEquals("", studentWithEmptyProfile.studentProfile.shortName);
    assertEquals("", studentWithEmptyProfile.studentProfile.nationality);
    assertEquals("", studentWithEmptyProfile.studentProfile.moreInfo);
    assertEquals("", studentWithEmptyProfile.studentProfile.email);
    StudentAttributes studentWithEmptyProfileAttributes = dataBundle.students.get("noFSStudentWithNoProfile");
    studentWithEmptyProfileAttributes = studentsDb.getStudentForEmail(studentWithEmptyProfileAttributes.course, studentWithEmptyProfileAttributes.email);
    gaeSimulation.loginUser("idOfNoFSStudent");
    submissionParams = new String[] { Const.ParamsNames.REGKEY, StringHelper.encrypt(studentWithEmptyProfileAttributes.key), Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_HOME_PAGE };
    authenticatedAction = getAction(submissionParams);
    redirectResult = getRedirectResult(authenticatedAction);
    assertEquals(getPageResultDestination(Const.ActionURIs.STUDENT_HOME_PAGE, "idOfCourseNoEvals", false, "idOfNoFSStudent"), redirectResult.getDestinationWithParams());
    assertFalse(redirectResult.isError);
    assertEquals(String.format(Const.StatusMessages.STUDENT_COURSE_JOIN_SUCCESSFUL, "[idOfCourseNoEvals] Typical Course 3 with 0 Evals") + "<br>" + String.format(Const.StatusMessages.HINT_FOR_NO_SESSIONS_STUDENT, "[idOfCourseNoEvals] Typical Course 3 with 0 Evals") + "<br>" + Const.StatusMessages.STUDENT_UPDATE_PROFILE, redirectResult.getStatusMessage());
    ______TS("join course with no feedback sessions, profile has only one missing field");
    AccountAttributes studentWithoutProfilePicture = dataBundle.accounts.get("noFSStudent2");
    studentWithoutProfilePicture = accountsDb.getAccount(studentWithoutProfilePicture.googleId, true);
    assertNotNull(studentWithoutProfilePicture.studentProfile);
    assertEquals("", studentWithoutProfilePicture.studentProfile.pictureKey);
    assertFalse(studentWithoutProfilePicture.studentProfile.nationality.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.shortName.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.moreInfo.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.email.isEmpty());
    StudentAttributes studentWithoutProfilePictureAttributes = dataBundle.students.get("noFSStudentWithPartialProfile");
    studentWithoutProfilePictureAttributes = studentsDb.getStudentForEmail(studentWithoutProfilePictureAttributes.course, studentWithoutProfilePictureAttributes.email);
    gaeSimulation.loginUser("idOfNoFSStudent2");
    submissionParams = new String[] { Const.ParamsNames.REGKEY, StringHelper.encrypt(studentWithoutProfilePictureAttributes.key), Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_HOME_PAGE };
    authenticatedAction = getAction(submissionParams);
    redirectResult = getRedirectResult(authenticatedAction);
    assertEquals(getPageResultDestination(Const.ActionURIs.STUDENT_HOME_PAGE, "idOfCourseNoEvals", false, "idOfNoFSStudent2"), redirectResult.getDestinationWithParams());
    assertFalse(redirectResult.isError);
    assertEquals(String.format(Const.StatusMessages.STUDENT_COURSE_JOIN_SUCCESSFUL, "[idOfCourseNoEvals] Typical Course 3 with 0 Evals") + "<br>" + String.format(Const.StatusMessages.HINT_FOR_NO_SESSIONS_STUDENT, "[idOfCourseNoEvals] Typical Course 3 with 0 Evals") + "<br>" + Const.StatusMessages.STUDENT_UPDATE_PROFILE_PICTURE, redirectResult.getStatusMessage());
    ______TS("join course with no feedback sessions, profile has no missing field");
    AccountAttributes studentWithFullProfile = dataBundle.accounts.get("noFSStudent3");
    studentWithFullProfile = accountsDb.getAccount(studentWithFullProfile.googleId, true);
    assertNotNull(studentWithFullProfile.studentProfile);
    assertFalse(studentWithFullProfile.studentProfile.pictureKey.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.nationality.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.shortName.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.moreInfo.isEmpty());
    assertFalse(studentWithoutProfilePicture.studentProfile.email.isEmpty());
    StudentAttributes studentWithFullProfileAttributes = dataBundle.students.get("noFSStudentWithFullProfile");
    studentWithFullProfileAttributes = studentsDb.getStudentForEmail(studentWithFullProfileAttributes.course, studentWithFullProfileAttributes.email);
    gaeSimulation.loginUser("idOfNoFSStudent3");
    submissionParams = new String[] { Const.ParamsNames.REGKEY, StringHelper.encrypt(studentWithFullProfileAttributes.key), Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_HOME_PAGE };
    authenticatedAction = getAction(submissionParams);
    redirectResult = getRedirectResult(authenticatedAction);
    assertEquals(getPageResultDestination(Const.ActionURIs.STUDENT_HOME_PAGE, "idOfCourseNoEvals", false, "idOfNoFSStudent3"), redirectResult.getDestinationWithParams());
    assertFalse(redirectResult.isError);
    assertEquals(String.format(Const.StatusMessages.STUDENT_COURSE_JOIN_SUCCESSFUL, "[idOfCourseNoEvals] Typical Course 3 with 0 Evals") + "<br>" + String.format(Const.StatusMessages.HINT_FOR_NO_SESSIONS_STUDENT, "[idOfCourseNoEvals] Typical Course 3 with 0 Evals"), redirectResult.getStatusMessage());
    ______TS("typical case");
    AccountAttributes newStudentAccount = AccountAttributes.builder().withGoogleId("idOfNewStudent").withName("nameOfNewStudent").withEmail("newStudent@gmail.com").withInstitute("TEAMMATES Test Institute 5").withIsInstructor(false).withDefaultStudentProfileAttributes("idOfNewStudent").build();
    accountsDb.createAccount(newStudentAccount);
    StudentAttributes newStudentAttributes = StudentAttributes.builder(student1InCourse1.course, "nameOfNewStudent", "newStudent@course1.com").withSection(student1InCourse1.section).withTeam(student1InCourse1.team).withComments("This is a new student").build();
    studentsDb.createEntity(newStudentAttributes);
    newStudentAttributes = studentsDb.getStudentForEmail(newStudentAttributes.course, newStudentAttributes.email);
    gaeSimulation.loginUser("idOfNewStudent");
    submissionParams = new String[] { Const.ParamsNames.REGKEY, StringHelper.encrypt(newStudentAttributes.key), Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_PROFILE_PAGE };
    authenticatedAction = getAction(submissionParams);
    redirectResult = getRedirectResult(authenticatedAction);
    assertEquals(getPageResultDestination(Const.ActionURIs.STUDENT_PROFILE_PAGE, "idOfTypicalCourse1", false, "idOfNewStudent"), redirectResult.getDestinationWithParams());
    assertFalse(redirectResult.isError);
    assertEquals(String.format(Const.StatusMessages.STUDENT_COURSE_JOIN_SUCCESSFUL, "[idOfTypicalCourse1] Typical Course 1 with 2 Evals"), redirectResult.getStatusMessage());
    ______TS("typical case: data requires sanitization");
    AccountAttributes accountTestSanitization = dataBundle.accounts.get("student1InTestingSanitizationCourse");
    StudentAttributes studentTestSanitization = dataBundle.students.get("student1InTestingSanitizationCourse");
    CourseAttributes courseTestSanitization = dataBundle.courses.get("testingSanitizationCourse");
    gaeSimulation.loginUser(accountTestSanitization.googleId);
    // retrieve student from datastore to get regkey
    studentTestSanitization = studentsDb.getStudentForEmail(studentTestSanitization.course, studentTestSanitization.email);
    submissionParams = new String[] { Const.ParamsNames.REGKEY, StringHelper.encrypt(studentTestSanitization.key), Const.ParamsNames.NEXT_URL, Const.ActionURIs.STUDENT_PROFILE_PAGE };
    authenticatedAction = getAction(submissionParams);
    redirectResult = getRedirectResult(authenticatedAction);
    assertEquals(Const.ActionURIs.STUDENT_PROFILE_PAGE + "?persistencecourse=" + courseTestSanitization.getId() + "&error=false&user=" + accountTestSanitization.googleId, redirectResult.getDestinationWithParams());
    assertFalse(redirectResult.isError);
    String courseIdentifier = "[" + courseTestSanitization.getId() + "] " + SanitizationHelper.sanitizeForHtml(courseTestSanitization.getName());
    String expectedStatusMessage = String.format(Const.StatusMessages.STUDENT_COURSE_JOIN_SUCCESSFUL, courseIdentifier) + "<br>" + String.format(Const.StatusMessages.HINT_FOR_NO_SESSIONS_STUDENT, courseIdentifier) + "<br>" + accountTestSanitization.studentProfile.generateUpdateMessageForStudent();
    assertEquals(expectedStatusMessage, redirectResult.getStatusMessage());
}
Also used : AccountAttributes(teammates.common.datatransfer.attributes.AccountAttributes) AccountsDb(teammates.storage.api.AccountsDb) RedirectResult(teammates.ui.controller.RedirectResult) UnauthorizedAccessException(teammates.common.exception.UnauthorizedAccessException) StudentCourseJoinAuthenticatedAction(teammates.ui.controller.StudentCourseJoinAuthenticatedAction) StudentsDb(teammates.storage.api.StudentsDb) StudentAttributes(teammates.common.datatransfer.attributes.StudentAttributes) CourseAttributes(teammates.common.datatransfer.attributes.CourseAttributes) Test(org.testng.annotations.Test)

Example 2 with AccountsDb

use of teammates.storage.api.AccountsDb in project teammates by TEAMMATES.

the class StudentHomePageActionTest method testExecuteAndPostProcess.

@Override
@Test
public void testExecuteAndPostProcess() throws Exception {
    String unregUserId = "unreg.user";
    StudentAttributes student1InCourse1 = typicalBundle.students.get("student1InCourse1");
    String studentId = student1InCourse1.googleId;
    String adminUserId = "admin.user";
    String[] submissionParams = new String[] {};
    ______TS("unregistered student");
    gaeSimulation.loginUser(unregUserId);
    StudentHomePageAction a = getAction(submissionParams);
    ShowPageResult r = getShowPageResult(a);
    AssertHelper.assertContainsRegex(getPageResultDestination(Const.ViewURIs.STUDENT_HOME, false, "unreg.user"), r.getDestinationWithParams());
    assertFalse(r.isError);
    AssertHelper.assertContainsRegex("Ooops! Your Google account is not known to TEAMMATES{*}use the new Gmail address.", r.getStatusMessage());
    StudentHomePageData data = (StudentHomePageData) r.data;
    assertEquals(0, data.getCourseTables().size());
    String expectedLogMessage = "TEAMMATESLOG|||studentHomePage|||studentHomePage" + "|||true|||Unregistered|||Unknown|||unreg.user|||Unknown" + "|||Servlet Action Failure :Student with Google ID " + "unreg.user does not exist|||/page/studentHomePage";
    AssertHelper.assertLogMessageEquals(expectedLogMessage, a.getLogMessage());
    ______TS("registered student with no courses");
    // Note: this can happen only if the course was deleted after the student joined it.
    // The 'welcome stranger' response is not really appropriate for this situation, but
    // we keep it because the situation is rare and not worth extra coding.
    // Create a student account without courses
    AccountAttributes studentWithoutCourses = AccountAttributes.builder().withGoogleId("googleId.without.courses").withName("Student Without Courses").withEmail("googleId.without.courses@email.tmt").withInstitute("TEAMMATES Test Institute 5").withIsInstructor(false).withDefaultStudentProfileAttributes("googleId.without.courses").build();
    AccountsDb accountsDb = new AccountsDb();
    accountsDb.createAccount(studentWithoutCourses);
    assertNotNull(accountsDb.getAccount(studentWithoutCourses.googleId));
    gaeSimulation.loginUser(studentWithoutCourses.googleId);
    a = getAction(submissionParams);
    r = getShowPageResult(a);
    AssertHelper.assertContainsRegex(getPageResultDestination(Const.ViewURIs.STUDENT_HOME, false, studentWithoutCourses.googleId), r.getDestinationWithParams());
    assertFalse(r.isError);
    AssertHelper.assertContainsRegex("Ooops! Your Google account is not known to TEAMMATES{*}use the new Gmail address.", r.getStatusMessage());
    data = (StudentHomePageData) r.data;
    assertEquals(0, data.getCourseTables().size());
    expectedLogMessage = "TEAMMATESLOG|||studentHomePage|||studentHomePage|||true" + "|||Unregistered|||Student Without Courses|||googleId.without.courses" + "|||googleId.without.courses@email.tmt|||Servlet Action Failure " + ":Student with Google ID googleId.without.courses does not exist" + "|||/page/studentHomePage";
    AssertHelper.assertLogMessageEquals(expectedLogMessage, a.getLogMessage());
    ______TS("typical user, masquerade mode");
    gaeSimulation.loginAsAdmin(adminUserId);
    studentId = typicalBundle.students.get("student2InCourse2").googleId;
    // Access page in masquerade mode
    a = getAction(addUserIdToParams(studentId, submissionParams));
    r = getShowPageResult(a);
    assertEquals(getPageResultDestination(Const.ViewURIs.STUDENT_HOME, false, studentId), r.getDestinationWithParams());
    assertFalse(r.isError);
    assertEquals("", r.getStatusMessage());
    data = (StudentHomePageData) r.data;
    assertEquals(2, data.getCourseTables().size());
    expectedLogMessage = "TEAMMATESLOG|||studentHomePage|||studentHomePage|||true" + "|||Student(M)|||Student in two courses|||student2InCourse1" + "|||student2InCourse1@gmail.tmt" + "|||studentHome Page Load<br>Total courses: 2" + "|||/page/studentHomePage";
    AssertHelper.assertLogMessageEqualsInMasqueradeMode(expectedLogMessage, a.getLogMessage(), adminUserId);
    ______TS("New student with no existing course, course join affected by eventual consistency");
    submissionParams = new String[] { Const.ParamsNames.CHECK_PERSISTENCE_COURSE, "idOfTypicalCourse1" };
    studentId = "newStudent";
    gaeSimulation.loginUser(studentId);
    a = getAction(submissionParams);
    r = getShowPageResult(a);
    data = (StudentHomePageData) r.data;
    assertEquals(1, data.getCourseTables().size());
    assertEquals("idOfTypicalCourse1", data.getCourseTables().get(0).getCourseId());
    ______TS("Registered student with existing courses, course join affected by eventual consistency");
    submissionParams = new String[] { Const.ParamsNames.CHECK_PERSISTENCE_COURSE, "idOfTypicalCourse2" };
    student1InCourse1 = typicalBundle.students.get("student1InCourse1");
    studentId = student1InCourse1.googleId;
    gaeSimulation.loginUser(studentId);
    a = getAction(submissionParams);
    r = getShowPageResult(a);
    data = (StudentHomePageData) r.data;
    assertEquals(2, data.getCourseTables().size());
    assertEquals("idOfTypicalCourse2", data.getCourseTables().get(1).getCourseId());
    ______TS("Just joined course, course join not affected by eventual consistency and appears in list");
    submissionParams = new String[] { Const.ParamsNames.CHECK_PERSISTENCE_COURSE, "idOfTypicalCourse1" };
    student1InCourse1 = typicalBundle.students.get("student1InCourse1");
    studentId = student1InCourse1.googleId;
    gaeSimulation.loginUser(studentId);
    a = getAction(submissionParams);
    r = getShowPageResult(a);
    data = (StudentHomePageData) r.data;
    assertEquals(1, data.getCourseTables().size());
    // Delete additional sessions that were created
    CoursesLogic.inst().deleteCourseCascade("typicalCourse2");
}
Also used : ShowPageResult(teammates.ui.controller.ShowPageResult) AccountAttributes(teammates.common.datatransfer.attributes.AccountAttributes) AccountsDb(teammates.storage.api.AccountsDb) StudentHomePageAction(teammates.ui.controller.StudentHomePageAction) StudentHomePageData(teammates.ui.pagedata.StudentHomePageData) StudentAttributes(teammates.common.datatransfer.attributes.StudentAttributes) Test(org.testng.annotations.Test)

Example 3 with AccountsDb

use of teammates.storage.api.AccountsDb in project teammates by TEAMMATES.

the class AccountsLogicTest method testJoinCourseForInstructor.

@SuppressWarnings("deprecation")
@Test
public void testJoinCourseForInstructor() throws Exception {
    InstructorAttributes instructor = dataBundle.instructors.get("instructorNotYetJoinCourse");
    String loggedInGoogleId = "AccLogicT.instr.id";
    String encryptedKey = instructorsLogic.getEncryptedKeyForInstructor(instructor.courseId, instructor.email);
    ______TS("failure: googleID belongs to an existing instructor in the course");
    try {
        accountsLogic.joinCourseForInstructor(encryptedKey, "idOfInstructorWithOnlyOneSampleCourse");
        signalFailureToDetectException();
    } catch (JoinCourseException e) {
        assertEquals(String.format(Const.StatusMessages.JOIN_COURSE_GOOGLE_ID_BELONGS_TO_DIFFERENT_USER, "idOfInstructorWithOnlyOneSampleCourse"), e.getMessage());
    }
    ______TS("success: instructor joined and new account be created");
    accountsLogic.joinCourseForInstructor(encryptedKey, loggedInGoogleId);
    InstructorAttributes joinedInstructor = instructorsLogic.getInstructorForEmail(instructor.courseId, instructor.email);
    assertEquals(loggedInGoogleId, joinedInstructor.googleId);
    AccountAttributes accountCreated = accountsLogic.getAccount(loggedInGoogleId);
    assertNotNull(accountCreated);
    ______TS("success: instructor joined but Account object creation goes wrong");
    // Delete account to simulate Account object creation goes wrong
    AccountsDb accountsDb = new AccountsDb();
    accountsDb.deleteAccount(loggedInGoogleId);
    // Try to join course again, Account object should be recreated
    accountsLogic.joinCourseForInstructor(encryptedKey, loggedInGoogleId);
    joinedInstructor = instructorsLogic.getInstructorForEmail(instructor.courseId, instructor.email);
    assertEquals(loggedInGoogleId, joinedInstructor.googleId);
    accountCreated = accountsLogic.getAccount(loggedInGoogleId);
    assertNotNull(accountCreated);
    accountsLogic.deleteAccountCascade(loggedInGoogleId);
    ______TS("success: instructor joined but account already exists");
    AccountAttributes nonInstrAccount = dataBundle.accounts.get("student1InCourse1");
    InstructorAttributes newIns = InstructorAttributes.builder(null, instructor.courseId, nonInstrAccount.name, nonInstrAccount.email).build();
    instructorsLogic.createInstructor(newIns);
    encryptedKey = instructorsLogic.getEncryptedKeyForInstructor(instructor.courseId, nonInstrAccount.email);
    assertFalse(accountsLogic.getAccount(nonInstrAccount.googleId).isInstructor);
    accountsLogic.joinCourseForInstructor(encryptedKey, nonInstrAccount.googleId);
    joinedInstructor = instructorsLogic.getInstructorForEmail(instructor.courseId, nonInstrAccount.email);
    assertEquals(nonInstrAccount.googleId, joinedInstructor.googleId);
    assertTrue(accountsLogic.getAccount(nonInstrAccount.googleId).isInstructor);
    instructorsLogic.verifyInstructorExists(nonInstrAccount.googleId);
    ______TS("success: instructor join and assigned institute when some instructors have not joined course");
    instructor = dataBundle.instructors.get("instructor4");
    newIns = InstructorAttributes.builder(null, instructor.courseId, "anInstructorWithoutGoogleId", "anInstructorWithoutGoogleId@gmail.com").build();
    instructorsLogic.createInstructor(newIns);
    nonInstrAccount = dataBundle.accounts.get("student2InCourse1");
    nonInstrAccount.email = "newInstructor@gmail.com";
    nonInstrAccount.name = " newInstructor";
    nonInstrAccount.googleId = "newInstructorGoogleId";
    newIns = InstructorAttributes.builder(null, instructor.courseId, nonInstrAccount.name, nonInstrAccount.email).build();
    instructorsLogic.createInstructor(newIns);
    encryptedKey = instructorsLogic.getEncryptedKeyForInstructor(instructor.courseId, nonInstrAccount.email);
    accountsLogic.joinCourseForInstructor(encryptedKey, nonInstrAccount.googleId);
    joinedInstructor = instructorsLogic.getInstructorForEmail(instructor.courseId, nonInstrAccount.email);
    assertEquals(nonInstrAccount.googleId, joinedInstructor.googleId);
    instructorsLogic.verifyInstructorExists(nonInstrAccount.googleId);
    AccountAttributes instructorAccount = accountsLogic.getAccount(nonInstrAccount.googleId);
    assertEquals("TEAMMATES Test Institute 1", instructorAccount.institute);
    accountsLogic.deleteAccountCascade(nonInstrAccount.googleId);
    ______TS("failure: instructor already joined");
    nonInstrAccount = dataBundle.accounts.get("student1InCourse1");
    instructor = dataBundle.instructors.get("instructorNotYetJoinCourse");
    encryptedKey = instructorsLogic.getEncryptedKeyForInstructor(instructor.courseId, nonInstrAccount.email);
    joinedInstructor = instructorsLogic.getInstructorForEmail(instructor.courseId, nonInstrAccount.email);
    try {
        accountsLogic.joinCourseForInstructor(encryptedKey, joinedInstructor.googleId);
        signalFailureToDetectException();
    } catch (JoinCourseException e) {
        assertEquals(joinedInstructor.googleId + " has already joined this course", e.getMessage());
    }
    ______TS("failure: key belongs to a different user");
    try {
        accountsLogic.joinCourseForInstructor(encryptedKey, "otherUserId");
        signalFailureToDetectException();
    } catch (JoinCourseException e) {
        assertEquals("The join link used belongs to a different user whose " + "Google ID is stude..ourse1 (only part of the Google ID is " + "shown to protect privacy). If that Google ID is owned by you, " + "please logout and re-login using that Google account. " + "If it doesn’t belong to you, please " + "<a href=\"mailto:" + Config.SUPPORT_EMAIL + "?" + "body=Your name:%0AYour course:%0AYour university:\">" + "contact us</a> so that we can investigate.", e.getMessage());
    }
    ______TS("failure: invalid key");
    String invalidKey = StringHelper.encrypt("invalidKey");
    try {
        accountsLogic.joinCourseForInstructor(invalidKey, loggedInGoogleId);
        signalFailureToDetectException();
    } catch (JoinCourseException e) {
        assertEquals("You have used an invalid join link: " + "/page/instructorCourseJoin?key=" + invalidKey, e.getMessage());
    }
}
Also used : AccountAttributes(teammates.common.datatransfer.attributes.AccountAttributes) AccountsDb(teammates.storage.api.AccountsDb) JoinCourseException(teammates.common.exception.JoinCourseException) InstructorAttributes(teammates.common.datatransfer.attributes.InstructorAttributes) Test(org.testng.annotations.Test)

Aggregations

Test (org.testng.annotations.Test)3 AccountAttributes (teammates.common.datatransfer.attributes.AccountAttributes)3 AccountsDb (teammates.storage.api.AccountsDb)3 StudentAttributes (teammates.common.datatransfer.attributes.StudentAttributes)2 CourseAttributes (teammates.common.datatransfer.attributes.CourseAttributes)1 InstructorAttributes (teammates.common.datatransfer.attributes.InstructorAttributes)1 JoinCourseException (teammates.common.exception.JoinCourseException)1 UnauthorizedAccessException (teammates.common.exception.UnauthorizedAccessException)1 StudentsDb (teammates.storage.api.StudentsDb)1 RedirectResult (teammates.ui.controller.RedirectResult)1 ShowPageResult (teammates.ui.controller.ShowPageResult)1 StudentCourseJoinAuthenticatedAction (teammates.ui.controller.StudentCourseJoinAuthenticatedAction)1 StudentHomePageAction (teammates.ui.controller.StudentHomePageAction)1 StudentHomePageData (teammates.ui.pagedata.StudentHomePageData)1