def test_increment_count(self):
        """Tests increment_count."""
        summary = peer.ReviewSummary(
            reviewee_key=db.Key.from_path(
                models.Student.kind(), '*****@*****.**'),
            submission_key=db.Key.from_path(
                student_work.Submission.kind(), 'submission'), unit_id='1')

        self.assertRaises(ValueError, summary.increment_count, 'bad_state')
        self.assertEqual(0, summary.assigned_count)
        summary.increment_count(domain.REVIEW_STATE_ASSIGNED)
        self.assertEqual(1, summary.assigned_count)
        self.assertEqual(0, summary.completed_count)
        summary.increment_count(domain.REVIEW_STATE_COMPLETED)
        self.assertEqual(1, summary.completed_count)
        self.assertEqual(0, summary.expired_count)
        summary.increment_count(domain.REVIEW_STATE_EXPIRED)
        self.assertEqual(1, summary.expired_count)

        check_overflow = peer.ReviewSummary(
            assigned_count=domain.MAX_UNREMOVED_REVIEW_STEPS - 1,
            reviewee_key=db.Key.from_path(
                models.Student.kind(), '*****@*****.**'),
            submission_key=db.Key.from_path(
                student_work.Submission.kind(), 'submission'), unit_id='1')
        # Increment to the limit succeeds...
        check_overflow.increment_count(domain.REVIEW_STATE_ASSIGNED)

        # ...but not beyond.
        self.assertRaises(
            db.BadValueError,
            check_overflow.increment_count, domain.REVIEW_STATE_ASSIGNED)
Exemplo n.º 2
0
    def test_increment_count(self):
        """Tests increment_count."""
        summary = peer.ReviewSummary(
            reviewee_key=self.reviewee_key, submission_key=self.submission_key,
            unit_id=self.unit_id)

        self.assertRaises(ValueError, summary.increment_count, 'bad_state')
        self.assertEqual(0, summary.assigned_count)
        summary.increment_count(domain.REVIEW_STATE_ASSIGNED)
        self.assertEqual(1, summary.assigned_count)
        self.assertEqual(0, summary.completed_count)
        summary.increment_count(domain.REVIEW_STATE_COMPLETED)
        self.assertEqual(1, summary.completed_count)
        self.assertEqual(0, summary.expired_count)
        summary.increment_count(domain.REVIEW_STATE_EXPIRED)
        self.assertEqual(1, summary.expired_count)

        check_overflow = peer.ReviewSummary(
            assigned_count=domain.MAX_UNREMOVED_REVIEW_STEPS - 1,
            reviewee_key=self.reviewee_key, submission_key=self.submission_key,
            unit_id=self.unit_id)
        # Increment to the limit succeeds...
        check_overflow.increment_count(domain.REVIEW_STATE_ASSIGNED)

        # ...but not beyond.
        self.assertRaises(
            db.BadValueError,
            check_overflow.increment_count, domain.REVIEW_STATE_ASSIGNED)
Exemplo n.º 3
0
    def _add_new_reviewer(cls, unit_id, submission_key, reviewee_key,
                          reviewer_key):
        summary = peer.ReviewSummary(assigned_count=1,
                                     reviewee_key=reviewee_key,
                                     submission_key=submission_key,
                                     unit_id=unit_id)
        # Synthesize summary key to avoid a second synchronous put op.
        summary_key = db.Key.from_path(
            peer.ReviewSummary.kind(),
            peer.ReviewSummary.key_name(submission_key))
        step = peer.ReviewStep(assigner_kind=domain.ASSIGNER_KIND_HUMAN,
                               review_summary_key=summary_key,
                               reviewee_key=reviewee_key,
                               reviewer_key=reviewer_key,
                               state=domain.REVIEW_STATE_ASSIGNED,
                               submission_key=submission_key,
                               unit_id=unit_id)
        # pylint: disable=unbalanced-tuple-unpacking,unpacking-non-sequence
        step_key, written_summary_key = entities.put([step, summary])

        if summary_key != written_summary_key:
            COUNTER_ADD_REVIEWER_BAD_SUMMARY_KEY.inc()
            raise AssertionError('Synthesized invalid review summary key %s' %
                                 repr(summary_key))

        COUNTER_ADD_REVIEWER_CREATE_REVIEW_STEP.inc()
        return step_key
Exemplo n.º 4
0
 def test_constructor_sets_key_name(self):
     summary_key = peer.ReviewSummary(
         reviewee_key=self.reviewee_key, submission_key=self.submission_key,
         unit_id=self.unit_id).put()
     self.assertEqual(
         peer.ReviewSummary.key_name(self.submission_key),
         summary_key.name())
Exemplo n.º 5
0
 def setUp(self):
     super(ReviewStepTest, self).setUp()
     self.reviewee_email = '*****@*****.**'
     self.reviewee_key = models.Student(key_name=self.reviewee_email).put()
     self.reviewer_email = '*****@*****.**'
     self.reviewer_key = models.Student(key_name=self.reviewer_email).put()
     self.unit_id = 'unit_id'
     self.submission_key = student_work.Submission(
         reviewee_key=self.reviewee_key, unit_id=self.unit_id).put()
     self.review_key = student_work.Review(reviewee_key=self.reviewee_key,
                                           reviewer_key=self.reviewer_key,
                                           unit_id=self.unit_id).put()
     self.review_summary_key = peer.ReviewSummary(
         reviewee_key=self.reviewee_key,
         submission_key=self.submission_key,
         unit_id=self.unit_id).put()
     self.step = peer.ReviewStep(assigner_kind=domain.ASSIGNER_KIND_AUTO,
                                 review_key=self.review_key,
                                 review_summary_key=self.review_summary_key,
                                 reviewee_key=self.reviewee_key,
                                 reviewer_key=self.reviewer_key,
                                 state=domain.REVIEW_STATE_ASSIGNED,
                                 submission_key=self.submission_key,
                                 unit_id=self.unit_id)
     self.step_key = self.step.put()
 def test_constructor_sets_key_name(self):
     unit_id = 'unit_id'
     reviewee_key = models.Student(key_name='*****@*****.**').put()
     submission_key = student_work.Submission(
         reviewee_key=reviewee_key, unit_id=unit_id).put()
     summary_key = peer.ReviewSummary(
         reviewee_key=reviewee_key, submission_key=submission_key,
         unit_id=unit_id).put()
     self.assertEqual(
         peer.ReviewSummary.key_name(submission_key), summary_key.name())
Exemplo n.º 7
0
    def _create_review_summary(cls, reviewee_key, submission_key, unit_id):
        collision = peer.ReviewSummary.get_by_key_name(
            peer.ReviewSummary.key_name(submission_key))

        if collision:
            COUNTER_START_REVIEW_PROCESS_FOR_ALREADY_STARTED.inc()
            raise domain.ReviewProcessAlreadyStartedError()

        return peer.ReviewSummary(
            reviewee_key=reviewee_key, submission_key=submission_key,
            unit_id=unit_id,
        ).put()
Exemplo n.º 8
0
 def setUp(self):
     super(ReviewSummaryTest, self).setUp()
     self.unit_id = 'unit_id'
     self.reviewee_email = '*****@*****.**'
     self.reviewee_key = models.Student(
         key_name='*****@*****.**').put()
     self.submission_key = student_work.Submission(
         reviewee_key=self.reviewee_key, unit_id=self.unit_id).put()
     self.summary = peer.ReviewSummary(
         reviewee_key=self.reviewee_key, submission_key=self.submission_key,
         unit_id=self.unit_id)
     self.summary_key = self.summary.put()
Exemplo n.º 9
0
    def test_decrement_count(self):
        """Tests decrement_count."""
        summary = peer.ReviewSummary(
            assigned_count=1, completed_count=1, expired_count=1,
            reviewee_key=self.reviewee_key, submission_key=self.submission_key,
            unit_id=self.unit_id)

        self.assertEqual(1, summary.assigned_count)
        summary.decrement_count(domain.REVIEW_STATE_ASSIGNED)
        self.assertEqual(0, summary.assigned_count)
        self.assertEqual(1, summary.completed_count)
        summary.decrement_count(domain.REVIEW_STATE_COMPLETED)
        self.assertEqual(0, summary.completed_count)
        self.assertEqual(1, summary.expired_count)
        summary.decrement_count(domain.REVIEW_STATE_EXPIRED)
        self.assertEqual(0, summary.expired_count)
        self.assertRaises(ValueError, summary.decrement_count, 'bad_state')
    def test_decrement_count(self):
        """Tests decrement_count."""
        summary = peer.ReviewSummary(
            assigned_count=1, completed_count=1, expired_count=1,
            reviewee_key=db.Key.from_path(
                models.Student.kind(), '*****@*****.**'),
            submission_key=db.Key.from_path(
                student_work.Submission.kind(), 'submission'), unit_id='1')

        self.assertEqual(1, summary.assigned_count)
        summary.decrement_count(domain.REVIEW_STATE_ASSIGNED)
        self.assertEqual(0, summary.assigned_count)
        self.assertEqual(1, summary.completed_count)
        summary.decrement_count(domain.REVIEW_STATE_COMPLETED)
        self.assertEqual(0, summary.completed_count)
        self.assertEqual(1, summary.expired_count)
        summary.decrement_count(domain.REVIEW_STATE_EXPIRED)
        self.assertEqual(0, summary.expired_count)
        self.assertRaises(ValueError, summary.decrement_count, 'bad_state')
Exemplo n.º 11
0
    def _submit_review(self, assessment):
        """Submits a review by the current student.

        Creates a new user that completes the assessment as well,
        so that the student can review it.

        Args:
            assessment: The assessment to review.
        """

        reviewer_key = self.student.get_key()
        reviewee = models.Student(key_name='*****@*****.**')
        reviewee_key = reviewee.put()

        submission_key = db.Key.from_path(
            student_work.Submission.kind(),
            student_work.Submission.key_name(reviewee_key=reviewee_key,
                                             unit_id=str(assessment.unit_id)))
        summary_key = peer.ReviewSummary(assigned_count=1,
                                         reviewee_key=reviewee_key,
                                         submission_key=submission_key,
                                         unit_id=str(
                                             assessment.unit_id)).put()
        review_key = student_work.Review(contents='old_contents',
                                         reviewee_key=reviewee_key,
                                         reviewer_key=reviewer_key,
                                         unit_id=str(
                                             assessment.unit_id)).put()
        step_key = peer.ReviewStep(assigner_kind=domain.ASSIGNER_KIND_HUMAN,
                                   review_key=review_key,
                                   review_summary_key=summary_key,
                                   reviewee_key=reviewee_key,
                                   reviewer_key=reviewer_key,
                                   submission_key=submission_key,
                                   state=domain.REVIEW_STATE_ASSIGNED,
                                   unit_id=str(assessment.unit_id)).put()
        updated_step_key = review_module.Manager.write_review(
            step_key, 'new_contents')

        self.assertEqual(step_key, updated_step_key)
Exemplo n.º 12
0
    def test_records_indexed_by_user_id_removed(self):
        """Test a sampling of types whose index is or contains the user ID."""
        user_id = None
        user = actions.login(self.STUDENT_EMAIL)
        actions.register(self, self.STUDENT_EMAIL, course=self.COURSE)

        # Get IDs of those students; make an event for each.
        with common_utils.Namespace(self.NAMESPACE):
            student = models.Student.get_by_user(user)
            user_id = student.user_id

            # Indexed by user ID suffixed with a string.
            p = models.StudentPropertyEntity.create(student, 'foo')
            p.value = 'foo'
            p.put()
            invitation.InvitationStudentProperty.load_or_default(student).put()
            questionnaire.StudentFormEntity.load_or_default(
                student, 'a_form').put()

            # User ID plus skill name.
            cm = competency.BaseCompetencyMeasure.load(user_id, 1)
            cm.save()

            # models.student_work.KeyProperty - a foreign key to Student.
            reviewee_key = db.Key.from_path(models.Student.kind(), user_id)
            reviewer_key = db.Key.from_path(models.Student.kind(), 'xyzzy')
            student_work.Review(contents='abcdef', reviewee_key=reviewee_key,
                                reviewer_key=reviewer_key, unit_id='7').put()
            submission_key = student_work.Submission(
                unit_id='7', reviewee_key=reviewee_key).put()
            peer.ReviewSummary(submission_key=submission_key,
                               reviewee_key=reviewee_key, unit_id='7').put()
            peer.ReviewStep(
                submission_key=submission_key, reviewee_key=reviewee_key,
                reviewer_key=reviewer_key, unit_id='7',
                state=domain.REVIEW_STATE_ASSIGNED,
                assigner_kind=domain.ASSIGNER_KIND_AUTO).put()

        # Assure ourselves that we have all of the items we just added.
        with common_utils.Namespace(self.NAMESPACE):
            l = list(models.StudentPropertyEntity.all().run())
            self.assertEquals(2, len(l))  # 'foo', 'linear-course-completion'
            l = list(invitation.InvitationStudentProperty.all().run())
            self.assertEquals(1, len(l))
            l = list(questionnaire.StudentFormEntity.all().run())
            self.assertEquals(1, len(l))
            l = list(competency.CompetencyMeasureEntity.all().run())
            self.assertEquals(1, len(l))
            l = list(student_work.Review.all().run())
            self.assertEquals(1, len(l))
            l = list(student_work.Submission.all().run())
            self.assertEquals(1, len(l))
            l = list(peer.ReviewSummary.all().run())
            self.assertEquals(1, len(l))
            l = list(peer.ReviewStep.all().run())
            self.assertEquals(1, len(l))


        self._unregister_and_request_data_removal(self.COURSE)
        self._complete_removal()

        # Assure ourselves that all added items are now gone.
        with common_utils.Namespace(self.NAMESPACE):
            l = list(models.StudentPropertyEntity.all().run())
            self.assertEquals(0, len(l))
            l = list(invitation.InvitationStudentProperty.all().run())
            self.assertEquals(0, len(l))
            l = list(questionnaire.StudentFormEntity.all().run())
            self.assertEquals(0, len(l))
            l = list(competency.CompetencyMeasureEntity.all().run())
            self.assertEquals(0, len(l))
            l = list(student_work.Review.all().run())
            self.assertEquals(0, len(l))
            l = list(student_work.Submission.all().run())
            self.assertEquals(0, len(l))
            l = list(peer.ReviewSummary.all().run())
            self.assertEquals(0, len(l))
            l = list(peer.ReviewStep.all().run())
            self.assertEquals(0, len(l))