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)
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)
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
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())
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())
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()
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()
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')
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)
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))