private void verifyEvalUpdateFromAwaitingToClosed(int timeZone) throws Exception { EvaluationAttributes eval = getTypicalDataBundle().evaluations.get("evaluation1InCourse1"); int milliSecondsPerMinute = 60 * 1000; // first, make it AWAITING eval.timeZone = timeZone; eval.gracePeriod = 15; eval.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(milliSecondsPerMinute, timeZone); eval.endTime = TimeHelper.getDateOffsetToCurrentTime(2); eval.published = false; eval.activated = false; assertEquals(EvalStatus.AWAITING, eval.getStatus()); // then, make it CLOSED eval.startTime = TimeHelper.getDateOffsetToCurrentTime(-2); eval.endTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone( -milliSecondsPerMinute * (eval.gracePeriod + 1), timeZone); eval.setDerivedAttributes(); // check if derived attributes are set correctly assertEquals(true, eval.activated); assertEquals(false, eval.published); assertEquals(EvalStatus.CLOSED, eval.getStatus()); }
public static EvaluationAttributes generateValidEvaluationAttributesObject() { EvaluationAttributes e; e = new EvaluationAttributes(); e.courseId = "valid-course"; e.name = "valid name"; e.instructions = new Text("1st line of instructions \n 2nd line of instructions"); e.startTime = TimeHelper.getDateOffsetToCurrentTime(1); e.endTime = TimeHelper.getDateOffsetToCurrentTime(2); e.activated = false; e.published = false; e.timeZone = 0.0; e.gracePeriod = 5; e.p2pEnabled = true; return e; }
@Test public void testCalculateEvalStatus() throws InterruptedException { double timeZone; int gracePeriod; EvaluationAttributes evaluation = new EvaluationAttributes(); int safetyMargin = 1000; // we use this to compensate for test execution time ______TS("in the awaiting period"); evaluation.startTime = TimeHelper.getMsOffsetToCurrentTime(safetyMargin); evaluation.endTime = TimeHelper.getDateOffsetToCurrentTime(1); timeZone = 0.0; evaluation.timeZone = timeZone; gracePeriod = 0; ; evaluation.gracePeriod = gracePeriod; evaluation.published = false; AssertJUnit.assertEquals(EvalStatus.AWAITING, evaluation.getStatus()); ______TS("in the middle of open period"); evaluation.startTime = TimeHelper.getDateOffsetToCurrentTime(-1); AssertJUnit.assertEquals(EvalStatus.OPEN, evaluation.getStatus()); ______TS("just before grace period expires"); gracePeriod = 5; int gracePeriodInMs = gracePeriod * 60 * 1000; evaluation.gracePeriod = gracePeriod; evaluation.endTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(gracePeriodInMs - safetyMargin, timeZone); timeZone = 0.0; evaluation.timeZone = timeZone; AssertJUnit.assertEquals(EvalStatus.OPEN, evaluation.getStatus()); ______TS("just after the grace period expired"); gracePeriod = 5; gracePeriodInMs = gracePeriod * 60 * 1000; evaluation.gracePeriod = gracePeriod; timeZone = 0.0; evaluation.timeZone = timeZone; evaluation.endTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone( -gracePeriodInMs - safetyMargin, timeZone); AssertJUnit.assertEquals(EvalStatus.CLOSED, evaluation.getStatus()); ______TS("already published"); evaluation.published = true; AssertJUnit.assertEquals(EvalStatus.PUBLISHED, evaluation.getStatus()); evaluation.published = false; ______TS("checking for user in different time zone"); // do similar testing for +1.0 time zone timeZone = 1.0; evaluation.timeZone = timeZone; // in AWAITING period evaluation.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(safetyMargin, timeZone); evaluation.endTime = TimeHelper.getDateOffsetToCurrentTime(1); AssertJUnit.assertEquals(EvalStatus.AWAITING, evaluation.getStatus()); // in OPEN period evaluation.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(-safetyMargin, timeZone); AssertJUnit.assertEquals(EvalStatus.OPEN, evaluation.getStatus()); // TODO: just before grace period expired gracePeriod = 5; evaluation.gracePeriod = gracePeriod; timeZone = 1.0; evaluation.timeZone = timeZone; evaluation.startTime = TimeHelper.getDateOffsetToCurrentTime(-2); evaluation.endTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone( -gracePeriodInMs + safetyMargin, timeZone); AssertJUnit.assertEquals(EvalStatus.OPEN, evaluation.getStatus()); // just after grace period gracePeriod = 5; evaluation.gracePeriod = gracePeriod; timeZone = 1.0; evaluation.timeZone = timeZone; evaluation.startTime = TimeHelper.getDateOffsetToCurrentTime(-2); evaluation.endTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone( -gracePeriodInMs - safetyMargin, timeZone); AssertJUnit.assertEquals(EvalStatus.CLOSED, evaluation.getStatus()); // already PUBLISHED evaluation.published = true; AssertJUnit.assertEquals(EvalStatus.PUBLISHED, evaluation.getStatus()); }
@Test public void testIsReady() throws InvalidParametersException { // Create evaluation object to use as the test object Calendar start = Calendar.getInstance(TimeZone.getTimeZone("UTC")); Calendar end = Calendar.getInstance(TimeZone.getTimeZone("UTC")); EvaluationAttributes e = new EvaluationAttributes( new Evaluation( "course1", "evalution 1", new Text("instructions"), true, start.getTime(), end.getTime(), 0.0, 0)); int oneSecInMilliSeconds = 1 * 1000; double timeZone = 0.0; ______TS("ready, just after start time"); // start time set to 1 sec before current time e.startTime = TimeHelper.getMsOffsetToCurrentTime(-oneSecInMilliSeconds); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = false; e.timeZone = 0.0; assertEquals(true, e.isReadyToActivate()); // negative time zone, starting just before current time timeZone = -2.0; e.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(-oneSecInMilliSeconds, timeZone); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = false; e.timeZone = timeZone; assertEquals(true, e.isReadyToActivate()); // positive time zone, starting just before current time timeZone = 2.0; e.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(-oneSecInMilliSeconds, timeZone); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = false; e.timeZone = timeZone; assertEquals(true, e.isReadyToActivate()); ______TS("not ready, just before start time"); // start time set to 1 sec after current time oneSecInMilliSeconds = 1 * 1000; e.startTime = TimeHelper.getMsOffsetToCurrentTime(+oneSecInMilliSeconds); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = false; e.timeZone = 0.0; assertEquals(false, e.isReadyToActivate()); // negative time zone, starting just after current time timeZone = -2.0; e.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(oneSecInMilliSeconds, timeZone); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = false; e.timeZone = timeZone; assertEquals(false, e.isReadyToActivate()); // positive time zone, starting just after current time timeZone = 2.0; e.startTime = TimeHelper.getMsOffsetToCurrentTimeInUserTimeZone(oneSecInMilliSeconds, timeZone); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = false; e.timeZone = timeZone; assertEquals(false, e.isReadyToActivate()); ______TS("not ready, already activated"); // start time set to 1 sec before current time e.startTime = TimeHelper.getMsOffsetToCurrentTime(-oneSecInMilliSeconds); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = true; e.timeZone = 0.0; assertEquals(false, e.isReadyToActivate()); // start time set to 1 sec after current time e.startTime = TimeHelper.getMsOffsetToCurrentTime(+oneSecInMilliSeconds); e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.activated = true; e.timeZone = 0.0; assertEquals(false, e.isReadyToActivate()); }
@Test public void testValidate() { EvaluationAttributes e = new EvaluationAttributes(); e.courseId = ""; e.name = ""; e.instructions = new Text("Instruction to students."); e.startTime = TimeHelper.getDateOffsetToCurrentTime(1); e.endTime = TimeHelper.getDateOffsetToCurrentTime(2); e.activated = false; e.published = false; e.timeZone = 0.0; e.gracePeriod = 5; e.p2pEnabled = true; assertEquals("invalid values", false, e.isValid()); String errorMessage = String.format(COURSE_ID_ERROR_MESSAGE, e.courseId, REASON_EMPTY) + EOL + String.format(EVALUATION_NAME_ERROR_MESSAGE, e.name, REASON_EMPTY); assertEquals("valid values", errorMessage, StringHelper.toString(e.getInvalidityInfo())); e.courseId = "valid-course"; e.name = "valid name"; e.instructions = new Text("valid instructions"); assertTrue("valid, minimal properties", e.isValid()); assertEquals("valid values", true, e.isValid()); e.startTime = null; try { e.getInvalidityInfo(); signalFailureToDetectException("null start time not detected"); } catch (AssertionError e1) { ignoreExpectedException(); } e.startTime = TimeHelper.getDateOffsetToCurrentTime(1); e.endTime = null; try { e.getInvalidityInfo(); signalFailureToDetectException("null end time not detected"); } catch (AssertionError e1) { ignoreExpectedException(); } // SUCCESS : end == start e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.startTime = e.endTime; assertTrue(e.isValid()); // FAIL : end before start e.endTime = TimeHelper.getDateOffsetToCurrentTime(1); e.startTime = TimeHelper.getDateOffsetToCurrentTime(2); assertFalse(e.isValid()); errorMessage = String.format( TIME_FRAME_ERROR_MESSAGE, END_TIME_FIELD_NAME, EVALUATION_NAME, START_TIME_FIELD_NAME); assertEquals(errorMessage, StringHelper.toString(e.getInvalidityInfo())); // FAIL : published before endtime: invalid e.published = true; e.startTime = TimeHelper.getDateOffsetToCurrentTime(0); e.endTime = TimeHelper.getMsOffsetToCurrentTime(5); assertFalse(e.isValid()); assertEquals( FieldValidator.EVALUATION_END_TIME_ERROR_MESSAGE, StringHelper.toString(e.getInvalidityInfo())); // SUCCESS : just after endtime and published: valid e.startTime = TimeHelper.getDateOffsetToCurrentTime(-1); e.endTime = TimeHelper.getMsOffsetToCurrentTime(-5); e.published = true; assertTrue(e.isValid()); // FAIL : activated before start time: invalid e.startTime = TimeHelper.getDateOffsetToCurrentTime(1); e.endTime = TimeHelper.getDateOffsetToCurrentTime(2); e.published = false; e.activated = true; assertFalse(e.isValid()); assertEquals( FieldValidator.EVALUATION_START_TIME_ERROR_MESSAGE, StringHelper.toString(e.getInvalidityInfo())); }
public void testGetCourseDetailsListForStudent() throws Exception { ______TS("student having multiple evaluations in multiple courses"); CourseAttributes expectedCourse1 = dataBundle.courses.get("typicalCourse1"); CourseAttributes expectedCourse2 = dataBundle.courses.get("typicalCourse2"); EvaluationAttributes expectedEval1InCourse1 = dataBundle.evaluations.get("evaluation1InCourse1"); EvaluationAttributes expectedEval2InCourse1 = dataBundle.evaluations.get("evaluation2InCourse1"); EvaluationAttributes expectedEval1InCourse2 = dataBundle.evaluations.get("evaluation1InCourse2"); // This student is in both course 1 and 2 StudentAttributes studentInBothCourses = dataBundle.students.get("student2InCourse1"); // Make sure all evaluations in course1 are visible (i.e., not AWAITING) expectedEval1InCourse1.startTime = TimeHelper.getDateOffsetToCurrentTime(-2); expectedEval1InCourse1.endTime = TimeHelper.getDateOffsetToCurrentTime(-1); expectedEval1InCourse1.published = false; assertEquals(EvalStatus.CLOSED, expectedEval1InCourse1.getStatus()); BackDoorLogic backDoorLogic = new BackDoorLogic(); backDoorLogic.updateEvaluation(expectedEval1InCourse1); expectedEval2InCourse1.startTime = TimeHelper.getDateOffsetToCurrentTime(-1); expectedEval2InCourse1.endTime = TimeHelper.getDateOffsetToCurrentTime(1); assertEquals(EvalStatus.OPEN, expectedEval2InCourse1.getStatus()); backDoorLogic.updateEvaluation(expectedEval2InCourse1); // Make sure all evaluations in course2 are still AWAITING expectedEval1InCourse2.startTime = TimeHelper.getDateOffsetToCurrentTime(1); expectedEval1InCourse2.endTime = TimeHelper.getDateOffsetToCurrentTime(2); expectedEval1InCourse2.activated = false; assertEquals(EvalStatus.AWAITING, expectedEval1InCourse2.getStatus()); backDoorLogic.updateEvaluation(expectedEval1InCourse2); // Get course details for student List<CourseDetailsBundle> courseList = coursesLogic.getCourseDetailsListForStudent(studentInBothCourses.googleId); // Verify number of courses received assertEquals(2, courseList.size()); // Verify details of course 1 (note: index of course 1 is not 0) CourseDetailsBundle actualCourse1 = courseList.get(1); assertEquals(expectedCourse1.id, actualCourse1.course.id); assertEquals(expectedCourse1.name, actualCourse1.course.name); assertEquals(2, actualCourse1.evaluations.size()); // Verify details of evaluation 1 in course 1 EvaluationAttributes actualEval1InCourse1 = actualCourse1.evaluations.get(1).evaluation; TestHelper.verifySameEvaluationData(expectedEval1InCourse1, actualEval1InCourse1); // Verify some details of evaluation 2 in course 1 EvaluationAttributes actualEval2InCourse1 = actualCourse1.evaluations.get(0).evaluation; TestHelper.verifySameEvaluationData(expectedEval2InCourse1, actualEval2InCourse1); // For course 2, verify no evaluations returned (because the evaluation // in this course is still AWAITING. CourseDetailsBundle actualCourse2 = courseList.get(0); assertEquals(expectedCourse2.id, actualCourse2.course.id); assertEquals(expectedCourse2.name, actualCourse2.course.name); assertEquals(0, actualCourse2.evaluations.size()); ______TS("student in a course with no evaluations"); StudentAttributes studentWithNoEvaluations = dataBundle.students.get("student1InCourse2"); courseList = coursesLogic.getCourseDetailsListForStudent(studentWithNoEvaluations.googleId); assertEquals(1, courseList.size()); assertEquals(0, courseList.get(0).evaluations.size()); // student with no courses is not applicable ______TS("non-existent student"); try { coursesLogic.getCourseDetailsListForStudent("non-existent-student"); signalFailureToDetectException(); } catch (EntityDoesNotExistException e) { AssertHelper.assertContains("does not exist", e.getMessage()); } ______TS("null parameter"); try { coursesLogic.getCourseDetailsListForStudent(null); signalFailureToDetectException(); } catch (AssertionError e) { assertEquals("Supplied parameter was null\n", e.getMessage()); } }