use of teammates.common.datatransfer.CourseDetailsBundle in project teammates by TEAMMATES.
the class AdminAccountDetailsPageData method createInstructorCourseListTable.
private List<AdminAccountDetailsInstructorCourseListTableRow> createInstructorCourseListTable(List<CourseDetailsBundle> instructorCourseList) {
List<AdminAccountDetailsInstructorCourseListTableRow> courseListTable = new ArrayList<>();
if (instructorCourseList != null) {
for (CourseDetailsBundle courseDetails : instructorCourseList) {
AdminAccountDetailsInstructorCourseListTableRow row = new AdminAccountDetailsInstructorCourseListTableRow(accountInformation.googleId, courseDetails, getSessionToken());
courseListTable.add(row);
}
}
return courseListTable;
}
use of teammates.common.datatransfer.CourseDetailsBundle in project teammates by TEAMMATES.
the class AdminAccountDetailsPageAction method execute.
@Override
protected ActionResult execute() {
gateKeeper.verifyAdminPrivileges(account);
String googleId = getRequestParamValue(Const.ParamsNames.INSTRUCTOR_ID);
AccountAttributes accountInformation = logic.getAccount(googleId);
List<CourseDetailsBundle> instructorCourseList;
try {
instructorCourseList = new ArrayList<>(logic.getCourseSummariesForInstructor(googleId).values());
} catch (EntityDoesNotExistException e) {
// Not an instructor of any course
instructorCourseList = null;
}
List<CourseAttributes> studentCourseList;
try {
studentCourseList = logic.getCoursesForStudentAccount(googleId);
} catch (EntityDoesNotExistException e) {
// Not a student of any course
studentCourseList = null;
}
AdminAccountDetailsPageData data = new AdminAccountDetailsPageData(account, sessionToken, accountInformation, instructorCourseList, studentCourseList);
statusToAdmin = "adminAccountDetails Page Load<br>" + "Viewing details for " + data.getAccountInformation().name + "(" + googleId + ")";
return createShowPageResult(Const.ViewURIs.ADMIN_ACCOUNT_DETAILS, data);
}
use of teammates.common.datatransfer.CourseDetailsBundle in project teammates by TEAMMATES.
the class StudentsLogicTest method testEnrollStudents.
private void testEnrollStudents() throws Exception {
String instructorId = "instructorForEnrollTesting";
String courseIdForEnrollTest = "courseForEnrollTest";
String instructorEmail = "instructor@email.tmt";
StudentProfileAttributes profileAttributes = StudentProfileAttributes.builder(instructorId).withShortName("Ins1").withGender("male").build();
AccountAttributes accountToAdd = AccountAttributes.builder().withGoogleId(instructorId).withName("Instructor 1").withEmail(instructorEmail).withInstitute("TEAMMATES Test Institute 1").withIsInstructor(true).withStudentProfileAttributes(profileAttributes).build();
accountsLogic.createAccount(accountToAdd);
coursesLogic.createCourseAndInstructor(instructorId, courseIdForEnrollTest, "Course for Enroll Testing", "UTC");
FeedbackSessionsLogic fsLogic = FeedbackSessionsLogic.inst();
FeedbackSessionAttributes fsAttr = FeedbackSessionAttributes.builder("newFeedbackSessionName", courseIdForEnrollTest, instructorEmail).withInstructions(new Text("default instructions")).withCreatedTime(Instant.now()).withStartTime(TimeHelperExtension.getInstantHoursOffsetFromNow(2)).withEndTime(TimeHelperExtension.getInstantHoursOffsetFromNow(5)).withSessionVisibleFromTime(TimeHelperExtension.getInstantHoursOffsetFromNow(1)).withResultsVisibleFromTime(TimeHelperExtension.getInstantHoursOffsetFromNow(6)).withTimeZone(ZoneId.of("Asia/Singapore")).withGracePeriodMinutes(0).withFeedbackSessionType(FeedbackSessionType.PRIVATE).withOpeningEmailEnabled(false).withClosingEmailEnabled(false).withPublishedEmailEnabled(false).build();
fsLogic.createFeedbackSession(fsAttr);
______TS("all valid students, but contains blank lines and trailing spaces");
String headerLine = "team | name | email | comment";
String line0 = "t1 | n1 | e1@g | c1";
String line1 = " t2| n2| e2@g| c2";
String line2 = "\u00A0t3 |n3| e3@g|c3 ";
String line3 = "t4|n4| e4@g|c4";
String line4 = "t5| n5|e5@g |c5";
String lines = headerLine + System.lineSeparator() + line0 + System.lineSeparator() + line1 + System.lineSeparator() + line2 + System.lineSeparator() + " \t \t \t \t " + System.lineSeparator() + line3 + System.lineSeparator() + System.lineSeparator() + line4 + System.lineSeparator() + " " + System.lineSeparator() + System.lineSeparator();
CourseEnrollmentResult enrollResults = studentsLogic.enrollStudentsWithoutDocument(lines, courseIdForEnrollTest);
StudentAttributesFactory saf = new StudentAttributesFactory(headerLine);
assertEquals(5, enrollResults.studentList.size());
assertEquals(5, studentsLogic.getStudentsForCourse(courseIdForEnrollTest).size());
// Test enroll result
line0 = "t1|n1|e1@g|c1";
verifyEnrollmentResultForStudent(saf.makeStudent(line0, courseIdForEnrollTest), enrollResults.studentList.get(0), StudentUpdateStatus.NEW);
verifyEnrollmentResultForStudent(saf.makeStudent(line1, courseIdForEnrollTest), enrollResults.studentList.get(1), StudentUpdateStatus.NEW);
verifyEnrollmentResultForStudent(saf.makeStudent(line4, courseIdForEnrollTest), enrollResults.studentList.get(4), StudentUpdateStatus.NEW);
CourseDetailsBundle courseDetails = coursesLogic.getCourseSummary(courseIdForEnrollTest);
assertEquals(5, courseDetails.stats.unregisteredTotal);
______TS("includes a mix of unmodified, modified, and new");
String modifiedLine2 = "t3|modified name|e3@g|c3";
String line5 = "t6|n6|e6@g|c6";
lines = headerLine + System.lineSeparator() + line0 + System.lineSeparator() + modifiedLine2 + System.lineSeparator() + line1 + System.lineSeparator() + line5;
enrollResults = studentsLogic.enrollStudentsWithoutDocument(lines, courseIdForEnrollTest);
assertEquals(6, enrollResults.studentList.size());
assertEquals(6, studentsLogic.getStudentsForCourse(courseIdForEnrollTest).size());
verifyEnrollmentResultForStudent(saf.makeStudent(line0, courseIdForEnrollTest), enrollResults.studentList.get(0), StudentUpdateStatus.UNMODIFIED);
verifyEnrollmentResultForStudent(saf.makeStudent(modifiedLine2, courseIdForEnrollTest), enrollResults.studentList.get(1), StudentUpdateStatus.MODIFIED);
verifyEnrollmentResultForStudent(saf.makeStudent(line1, courseIdForEnrollTest), enrollResults.studentList.get(2), StudentUpdateStatus.UNMODIFIED);
verifyEnrollmentResultForStudent(saf.makeStudent(line5, courseIdForEnrollTest), enrollResults.studentList.get(3), StudentUpdateStatus.NEW);
assertEquals(StudentUpdateStatus.NOT_IN_ENROLL_LIST, enrollResults.studentList.get(4).updateStatus);
assertEquals(StudentUpdateStatus.NOT_IN_ENROLL_LIST, enrollResults.studentList.get(5).updateStatus);
______TS("includes an incorrect line");
// no changes should be done to the database
String incorrectLine = "incorrectly formatted line";
lines = headerLine + System.lineSeparator() + "t7|n7|e7@g|c7" + System.lineSeparator() + incorrectLine + System.lineSeparator() + line2 + System.lineSeparator() + line3;
try {
enrollResults = studentsLogic.enrollStudentsWithoutDocument(lines, courseIdForEnrollTest);
signalFailureToDetectException("Did not throw exception for incorrectly formatted line");
} catch (EnrollException e) {
assertTrue(e.getMessage().contains(incorrectLine));
}
assertEquals(6, studentsLogic.getStudentsForCourse(courseIdForEnrollTest).size());
______TS("null parameters");
try {
studentsLogic.enrollStudentsWithoutDocument("a|b|c|d", null);
signalFailureToDetectException();
} catch (AssertionError ae) {
assertEquals(Const.StatusCodes.DBLEVEL_NULL_INPUT, ae.getMessage());
}
______TS("same student added, modified and unmodified");
StudentProfileAttributes studentAttributes = StudentProfileAttributes.builder("tes.instructor").withShortName("Ins 1").withGender("male").build();
accountToAdd = AccountAttributes.builder().withGoogleId("tes.instructor").withName("Instructor 1").withEmail("instructor@email.tmt").withInstitute("TEAMMATES Test Institute 1").withIsInstructor(true).withStudentProfileAttributes(studentAttributes).build();
accountsLogic.createAccount(accountToAdd);
coursesLogic.createCourseAndInstructor("tes.instructor", "tes.course", "TES Course", "UTC");
String line = headerLine + System.lineSeparator() + "t8|n8|e8@g|c1";
enrollResults = studentsLogic.enrollStudentsWithoutDocument(line, "tes.course");
assertEquals(1, enrollResults.studentList.size());
assertEquals(StudentUpdateStatus.NEW, enrollResults.studentList.get(0).updateStatus);
line = headerLine + System.lineSeparator() + "t8|n8a|e8@g|c1";
enrollResults = studentsLogic.enrollStudentsWithoutDocument(line, "tes.course");
assertEquals(1, enrollResults.studentList.size());
assertEquals(StudentUpdateStatus.MODIFIED, enrollResults.studentList.get(0).updateStatus);
line = headerLine + System.lineSeparator() + "t8|n8a|e8@g|c1";
enrollResults = studentsLogic.enrollStudentsWithoutDocument(line, "tes.course");
assertEquals(1, enrollResults.studentList.size());
assertEquals(StudentUpdateStatus.UNMODIFIED, enrollResults.studentList.get(0).updateStatus);
______TS("duplicated emails");
String lineT9 = "t9|n9|e9@g|c9";
String lineT10 = "t10|n10|e9@g|c10";
lines = headerLine + System.lineSeparator() + lineT9 + System.lineSeparator() + lineT10;
try {
studentsLogic.enrollStudentsWithoutDocument(lines, "tes.course");
} catch (EnrollException e) {
assertTrue(e.getMessage().contains(lineT10));
AssertHelper.assertContains("Same email address as the student in line \"" + lineT9 + "\"", e.getMessage());
}
______TS("invalid course id");
String enrollLines = headerLine + System.lineSeparator();
String invalidCourseId = "invalidCourseId";
try {
studentsLogic.enrollStudentsWithoutDocument(enrollLines, invalidCourseId);
signalFailureToDetectException();
} catch (EntityDoesNotExistException e) {
ignoreExpectedException();
}
______TS("empty enroll line");
try {
studentsLogic.enrollStudentsWithoutDocument("", courseIdForEnrollTest);
signalFailureToDetectException();
} catch (EnrollException e) {
ignoreExpectedException();
}
______TS("invalidity info in enroll line");
enrollLines = headerLine + System.lineSeparator() + "invalidline0\ninvalidline1\n";
try {
studentsLogic.enrollStudentsWithoutDocument(enrollLines, courseIdForEnrollTest);
signalFailureToDetectException();
} catch (EnrollException e) {
ignoreExpectedException();
}
}
use of teammates.common.datatransfer.CourseDetailsBundle in project teammates by TEAMMATES.
the class CoursesLogicTest method testGetCourseSummariesForInstructor.
private void testGetCourseSummariesForInstructor() throws Exception {
______TS("Instructor with 2 courses");
InstructorAttributes instructor = dataBundle.instructors.get("instructor3OfCourse1");
Map<String, CourseDetailsBundle> courseList = coursesLogic.getCourseSummariesForInstructor(instructor.googleId, false);
assertEquals(2, courseList.size());
for (CourseDetailsBundle cdd : courseList.values()) {
// check if course belongs to this instructor
assertTrue(InstructorsLogic.inst().isGoogleIdOfInstructorOfCourse(instructor.googleId, cdd.course.getId()));
}
______TS("Instructor with 1 archived, 1 unarchived course");
InstructorsLogic.inst().setArchiveStatusOfInstructor(instructor.googleId, "idOfTypicalCourse1", true);
courseList = coursesLogic.getCourseSummariesForInstructor(instructor.googleId, true);
assertEquals(1, courseList.size());
InstructorsLogic.inst().setArchiveStatusOfInstructor(instructor.googleId, "idOfTypicalCourse1", false);
______TS("Instructor with 0 courses");
courseList = coursesLogic.getCourseSummariesForInstructor("instructorWithoutCourses", false);
assertEquals(0, courseList.size());
______TS("Non-existent instructor");
try {
coursesLogic.getCourseSummariesForInstructor("non-existent-instructor", false);
signalFailureToDetectException();
} catch (EntityDoesNotExistException e) {
AssertHelper.assertContains("does not exist", e.getMessage());
}
______TS("Null parameter");
try {
coursesLogic.getCourseSummariesForInstructor(null, false);
signalFailureToDetectException();
} catch (AssertionError e) {
assertEquals(Const.StatusCodes.DBLEVEL_NULL_INPUT, e.getMessage());
}
}
use of teammates.common.datatransfer.CourseDetailsBundle in project teammates by TEAMMATES.
the class StudentHomePageDataTest method createData.
private StudentHomePageData createData() {
// Courses
CourseAttributes course1 = CourseAttributes.builder("course-id-1", "old-course", ZoneId.of("UTC")).build();
CourseAttributes course2 = CourseAttributes.builder("course-id-2", "new-course", ZoneId.of("UTC")).build();
// Feedback sessions
submittedSession = createFeedbackSession("submitted session", -1, 1, 1);
pendingSession = createFeedbackSession("pending session", -1, 1, 1);
awaitingSession = createFeedbackSession("awaiting session", 1, 2, 1);
publishedSession = createFeedbackSession("published session", -1, -1, -1);
closedSession = createFeedbackSession("closed session", -2, -1, 1);
submittedClosedSession = createFeedbackSession("submitted closed session", -2, -1, 1);
// Submission status
Map<FeedbackSessionAttributes, Boolean> sessionSubmissionStatusMap = new HashMap<>();
sessionSubmissionStatusMap.put(submittedSession, true);
sessionSubmissionStatusMap.put(pendingSession, false);
sessionSubmissionStatusMap.put(awaitingSession, false);
sessionSubmissionStatusMap.put(publishedSession, false);
sessionSubmissionStatusMap.put(closedSession, false);
sessionSubmissionStatusMap.put(submittedClosedSession, true);
// Tooltip and button texts
tooltipTextMap = new HashMap<>();
buttonTextMap = new HashMap<>();
tooltipTextMap.put(submittedSession, Const.Tooltips.FEEDBACK_SESSION_EDIT_SUBMITTED_RESPONSE);
buttonTextMap.put(submittedSession, "Edit Submission");
tooltipTextMap.put(pendingSession, Const.Tooltips.FEEDBACK_SESSION_SUBMIT);
buttonTextMap.put(pendingSession, "Start Submission");
tooltipTextMap.put(awaitingSession, Const.Tooltips.FEEDBACK_SESSION_AWAITING);
buttonTextMap.put(awaitingSession, "Start Submission");
tooltipTextMap.put(publishedSession, Const.Tooltips.FEEDBACK_SESSION_VIEW_SUBMITTED_RESPONSE);
buttonTextMap.put(publishedSession, "View Submission");
tooltipTextMap.put(closedSession, Const.Tooltips.FEEDBACK_SESSION_VIEW_SUBMITTED_RESPONSE);
buttonTextMap.put(closedSession, "View Submission");
tooltipTextMap.put(submittedClosedSession, Const.Tooltips.FEEDBACK_SESSION_VIEW_SUBMITTED_RESPONSE);
buttonTextMap.put(submittedClosedSession, "View Submission");
// Packing into bundles
CourseDetailsBundle newCourseBundle = createCourseBundle(course1, submittedSession, pendingSession, awaitingSession);
CourseDetailsBundle oldCourseBundle = createCourseBundle(course2, publishedSession, closedSession, submittedClosedSession);
courses = new ArrayList<>();
courses.add(newCourseBundle);
courses.add(oldCourseBundle);
return new StudentHomePageData(AccountAttributes.builder().build(), dummySessionToken, courses, sessionSubmissionStatusMap);
}
Aggregations