def test_where_is_examiner(self): self.assertEquals(StaticFeedback.where_is_examiner(self.examiner1).count(), 0) self.add_feedback(self.inf1100_period1_assignment1_g1_deliveries[0], verdict=self.okVerdict) self.add_feedback(self.inf1100_period1_assignment1_g1_deliveries[1], verdict=self.okVerdict) self.assertEquals(StaticFeedback.where_is_examiner(self.examiner1).count(), 2) # Create feedback on different assignmentgroup self.add_to_path('uio.ifi;inf1100.period1.assignment2.group1:candidate(student2):examiner(examiner1).d1') self.add_delivery("inf1100.period1.assignment2.group1", self.goodFile) self.add_feedback(self.inf1100_period1_assignment2_group1_deliveries[0], verdict=self.okVerdict) self.assertEquals(StaticFeedback.where_is_examiner(self.examiner1).count(), 3)
def to_staticfeedback(self, assignment=None): return StaticFeedback.from_points( self.points, assignment=assignment, delivery=self.delivery, rendered_view=self.feedbacktext_html, saved_by=self.saved_by)
def create_old_delivery_structure(): deadlinebuilder = groupbuilder \ .add_deadline( deadline=Deadline.reduce_datetime_precision( assignmentbuilder.assignment.first_deadline)) deliverybuilder = deadlinebuilder.add_delivery_x_hours_before_deadline( hours=random.randint(1, 30)) used_filenames = set() for number in xrange(filecount): while True: deliveryfile = random.choice(programs) filename = deliveryfile['filename'] if filename not in used_filenames: used_filenames.add(filename) break deliverybuilder.add_filemeta( filename=deliveryfile['filename'], data=deliveryfile['data']) if random.randint(0, 100) <= feedback_percent: feedback = StaticFeedback.from_points( assignment=assignmentbuilder.assignment, saved_by=examiner, delivery=deliverybuilder.delivery, rendered_view=self._lorem_paras(random.randint(1, 5)), points=random.randint(minpoints, maxpoints)) feedback.save()
def test_save_autoset_as_last_feedback_on_delivery_False(self): # Setup deliverybuilder = self.assignment1builder.add_group()\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1) feedback = StaticFeedback( delivery=deliverybuilder.delivery, points=10, grade='A', saved_by=self.testuser, is_passing_grade=True ) # Test self.assertIsNone(deliverybuilder.delivery.last_feedback) feedback.save(autoupdate_related_models=False) deliverybuilder.reload_from_db() self.assertIsNone(deliverybuilder.delivery.last_feedback)
def test_save_autoset_as_active_feedback_on_group(self): # Setup groupbuilder = self.assignment1builder.add_group() delivery = groupbuilder\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1).delivery feedback = StaticFeedback( delivery=delivery, points=10, grade='A', saved_by=self.testuser, is_passing_grade=True ) # Test self.assertIsNone(groupbuilder.group.feedback) feedback.save() groupbuilder.reload_from_db() self.assertEquals(groupbuilder.group.feedback, feedback)
def test_save_groupclose_False(self): # Setup groupbuilder = self.assignment1builder.add_group() delivery = groupbuilder\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1).delivery feedback = StaticFeedback( delivery=delivery, points=10, grade='A', saved_by=self.testuser, is_passing_grade=True ) # Test self.assertTrue(groupbuilder.group.is_open) feedback.save(autoupdate_related_models=False) groupbuilder.reload_from_db() self.assertTrue(groupbuilder.group.is_open)
def test_clean_over_max_points(self): self.assignment1builder.update( points_to_grade_mapper='raw-points', passing_grade_min_points=4, max_points=19) deliverybuilder = self.assignment1builder.add_group()\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1) with self.assertRaisesRegexp(ValidationError, '.*You are not allowed to give more than 19 points on this assignment.*'): feedback = StaticFeedback.from_points( assignment=self.assignment1builder.assignment, points=20)
def test_from_points(self): self.assignment1builder.update( points_to_grade_mapper='raw-points', passing_grade_min_points=4, max_points=10) deliverybuilder = self.assignment1builder.add_group()\ .add_deadline_in_x_weeks(weeks=1)\ .add_delivery_x_hours_before_deadline(hours=1) feedback = StaticFeedback.from_points( assignment=self.assignment1builder.assignment, points=5) self.assertEquals(feedback.grade, '5/10') self.assertEquals(feedback.points, 5) self.assertTrue(feedback.is_passing_grade)
def test_published_where_is_candidate(self): self.add_feedback(self.inf1100_period1_assignment1_g1_deliveries[0], verdict=self.okVerdict) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1, active=False).count(), 0) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1, old=False).count(), 1) # Feedback on old period self.add_feedback(self.inf1100_old_period_assignment1_g1_deliveries[0], verdict=self.okVerdict) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1).count(), 2) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1, active=False).count(), 1) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1, old=False).count(), 1) # Set publishing time to future for period1.assignment1 self.inf1100_period1_assignment1.publishing_time = datetime.now() + timedelta(10) self.inf1100_period1_assignment1.save() self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1).count(), 1) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1, active=False).count(), 1) self.assertEquals(StaticFeedback.published_where_is_candidate(self.student1, old=False).count(), 0)
def to_staticfeedback(self): """ Return a staticfeedback generated from self. """ config = self._get_config() gradeeditor = config._get_gradeeditor() kwargs = gradeeditor.draft_to_staticfeedback_kwargs( self.draft, config.config) # Create StaticFeedback from kwargs. We copy by key instead of **kwargs to make sure we dont get anything extra. return StaticFeedback(is_passing_grade=kwargs['is_passing_grade'], grade=kwargs['grade'], points=kwargs['points'], rendered_view=kwargs['rendered_view'], delivery=self.delivery, save_timestamp=None, saved_by=self.saved_by)
def put(self, request, id): self.assignment = self._get_assignment(id) marker = MarkAsPassedInPreviousPeriod(self.assignment) with transaction.commit_on_success(): for item in self.CONTENT: group = self.assignment.assignmentgroups.get(id=item['id']) newfeedback_points = item['newfeedback_points'] feedback = StaticFeedback.from_points( assignment=self.assignment, points=newfeedback_points, rendered_view='', saved_by=self.request.user) if not feedback.is_passing_grade: raise BadRequestFieldError('newfeedback_points', 'Must be a passing grade') oldgroup = None try: oldgroup = marker.find_previously_passed_group(group) except MarkAsPassedInPreviousPeriodError: pass marker.mark_as_delivered_in_previous(group, oldgroup=oldgroup, feedback=feedback) return self._get_result()
def test_published_where_is_examiner(self): self.add_delivery("inf1100.period1.assignment1.g2", self.goodFile) self.add_delivery("inf1100.period1.assignment1.g2", self.goodFile) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2).count(), 0) self.add_feedback(self.inf1100_period1_assignment1_g2_deliveries[0], verdict=self.okVerdict) self.add_feedback(self.inf1100_period1_assignment1_g2_deliveries[1], verdict=self.okVerdict) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2).count(), 2) # Add to old period self.add_delivery("inf1100.old_period.assignment1.g2", self.goodFile) self.add_delivery("inf1100.old_period.assignment1.g2", self.goodFile) self.add_feedback(self.inf1100_old_period_assignment1_g2_deliveries[0], verdict=self.okVerdict) self.add_feedback(self.inf1100_old_period_assignment1_g2_deliveries[1], verdict=self.okVerdict) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2).count(), 4) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, active=False).count(), 2) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, old=False).count(), 2) # Create assignment2 with delivery and feedback for examiner2 self.add_to_path('uio.ifi;inf1100.period1.assignment2.group1:candidate(student2):examiner(examiner2).d1') d = self.add_delivery("inf1100.period1.assignment2.group1", self.goodFile) self.add_feedback(d, verdict=self.okVerdict) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2).count(), 5) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, active=False).count(), 2) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, old=False).count(), 3) # Set publishing time to future for period1.assignment1 self.inf1100_period1_assignment1.publishing_time = datetime.now() + timedelta(10) self.inf1100_period1_assignment1.save() self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2).count(), 3) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, active=False).count(), 2) # Set publishing time to future old_period.assignment1 self.inf1100_old_period_assignment1.publishing_time = datetime.now() + timedelta(10) self.inf1100_old_period_assignment1.save() self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2).count(), 1) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, active=False).count(), 0) self.assertEquals(StaticFeedback.published_where_is_examiner(self.examiner2, old=False).count(), 1)
def test_where_is_candidate(self): self.assertEquals(StaticFeedback.where_is_candidate(self.student1).count(), 0) self.add_feedback(self.inf1100_period1_assignment1_g1_deliveries[0], verdict=self.okVerdict) self.assertEquals(StaticFeedback.where_is_candidate(self.student1).count(), 1)
def to_staticfeedback(self, assignment=None): return StaticFeedback.from_points(self.points, assignment=assignment, delivery=self.delivery, rendered_view=self.feedbacktext_html, saved_by=self.saved_by)