def test_with_flavours(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.TOPIC, flavours=[JAVASCRIPT, TYPESCRIPT], ) card_ts = factories.AgileCardFactory( content_item=content_item, flavours=[TYPESCRIPT] ) user = card_ts.assignees.first() # card_ts.assignees.add(self.user) card_js = factories.AgileCardFactory( content_item=content_item, flavours=[JAVASCRIPT], assignees=[user] ) assert card_js.assignees.first() == user progress = models.TopicProgress( content_item=content_item, user=user, start_time=timezone.now() ) progress.save() progress.flavours.add( taggit.models.Tag.objects.get_or_create(name=TYPESCRIPT)[0] ) update_topic_card_progress(user) card_ts.refresh_from_db() card_js.refresh_from_db() self.assertEqual(card_js.status, card_ts.READY) self.assertEqual(card_ts.status, card_ts.IN_PROGRESS)
def test_with_flavours(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.WORKSHOP, flavours=[JAVASCRIPT, TYPESCRIPT], ) card_ts = factories.AgileCardFactory( content_item=content_item, flavours=[TYPESCRIPT] ) user = card_ts.assignees.first() # card_ts.assignees.add(self.user) card_js = factories.AgileCardFactory( content_item=content_item, flavours=[JAVASCRIPT], assignees=[user] ) assert user == card_js.assignees.first() # card_js.assignees.add(self.user) progress = factories.WorkshopAttendanceFactory( content_item=content_item, attendee_user=user ) progress.save() progress.flavours.add( taggit.models.Tag.objects.get_or_create(name=TYPESCRIPT)[0] ) update_workshop_card_progress(user) card_ts.refresh_from_db() card_js.refresh_from_db() self.assertEqual(card_js.status, card_ts.READY) self.assertEqual(card_ts.status, card_ts.COMPLETE)
def test_with_flavours(self): content_item = factories.ProjectContentItemFactory( content_type=models.ContentItem.PROJECT, available_flavours=[JAVASCRIPT, TYPESCRIPT], ) card_ts = factories.AgileCardFactory( content_item=content_item, content_flavours=[TYPESCRIPT], recruit_project=None, ) card_ts.assignees.add(self.user) card_js = factories.AgileCardFactory( content_item=content_item, content_flavours=[JAVASCRIPT], recruit_project=None, ) card_js.assignees.add(self.user) progress = factories.RecruitProjectFactory( content_item=content_item, review_request_time=None, ) progress.recruit_users.add(self.user) progress.flavours.add( taggit.models.Tag.objects.get_or_create(name=TYPESCRIPT)[0] ) update_project_card_progress(self.user) card_ts.refresh_from_db() card_js.refresh_from_db() self.assertEqual(card_js.status, card_ts.READY) self.assertEqual(card_ts.status, card_ts.IN_PROGRESS)
def test_no_flavours(self): content_item = factories.ProjectContentItemFactory() card = factories.AgileCardFactory( content_item=content_item, recruit_project=None ) user = card.assignees.first() self.assertIsNone(card.recruit_project) assert user is not None update_project_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, card.READY) progress = factories.RecruitProjectFactory( content_item=content_item, review_request_time=timezone.now() - timezone.timedelta(days=1), start_time=timezone.now() - timezone.timedelta(days=2), ) progress.recruit_users.add(user) factories.RecruitProjectReviewFactory( recruit_project=progress, status=NOT_YET_COMPETENT, timestamp=timezone.now(), ) update_project_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.REVIEW_FEEDBACK)
def setUp(self): self.trusted_user = core_factories.UserFactory( is_staff=True) # TODO: trust different people for diferent reasons self.untrusted_user = core_factories.UserFactory( is_staff=False ) # TODO: trust different people for diferent reasons self.ready_card = factories.AgileCardFactory( status=models.AgileCard.READY) self.ip_card = factories.AgileCardFactory( status=models.AgileCard.IN_PROGRESS) self.feedback_card = factories.AgileCardFactory( status=models.AgileCard.REVIEW_FEEDBACK) self.cards = [ self.ready_card, self.ip_card, self.feedback_card, ]
def setUp(self): self.recruit_cohort = core_factories.RecruitCohortFactory() self.recruit = self.recruit_cohort.user self.curriculum = self.recruit_cohort.cohort.cohort_curriculum self.content_item = factories.ContentItemFactory() self.card = factories.AgileCardFactory( status=models.AgileCard.READY, # assignees=[self.recruit], content_item=self.content_item, ) self.card.assignees.add(self.recruit)
def setUp(self): # self.team_membership = core_factories.TeamMembershipFactory() # self.recruit = self.team_membership.user self.recruit = core_factories.UserFactory() # self.curriculum = self.team_membership.cohort.cohort_curriculum self.content_item = factories.ContentItemFactory() self.card = factories.AgileCardFactory( status=models.AgileCard.READY, # assignees=[self.recruit], content_item=self.content_item, ) self.card.assignees.add(self.recruit)
def setUp(self): self.blocked_card = factories.AgileCardFactory( status=models.AgileCard.BLOCKED) self.ready_card = factories.AgileCardFactory( status=models.AgileCard.READY) self.ip_card = factories.AgileCardFactory( status=models.AgileCard.IN_PROGRESS) self.review_card = factories.AgileCardFactory( status=models.AgileCard.IN_REVIEW) self.feedback_card = factories.AgileCardFactory( status=models.AgileCard.REVIEW_FEEDBACK) self.complete_card = factories.AgileCardFactory( status=models.AgileCard.COMPLETE) self.ip_card.recruit_project.start_time = timezone.now() - timedelta( days=15) self.review_card.recruit_project.start_time = timezone.now( ) - timedelta(days=15) self.feedback_card.recruit_project.start_time = timezone.now( ) - timedelta(days=15) self.complete_card.recruit_project.start_time = timezone.now( ) - timedelta(days=15) self.cards = [ self.blocked_card, self.ready_card, self.ip_card, self.review_card, self.feedback_card, self.complete_card, ]
def test_with_flavours(self): content_item = factories.ProjectContentItemFactory( content_type=models.ContentItem.PROJECT, flavours=[JAVASCRIPT, TYPESCRIPT], ) card_ts = factories.AgileCardFactory( content_item=content_item, flavours=[TYPESCRIPT], recruit_project=None, ) user = card_ts.assignees.first() # card_ts.assignees.add(self.user) card_js = factories.AgileCardFactory( content_item=content_item, flavours=[JAVASCRIPT], recruit_project=None, assignees=[user], ) # card_js.assignees.add(self.user) assert user == card_js.assignees.first() progress = factories.RecruitProjectFactory( content_item=content_item, review_request_time=None, start_time=timezone.now() - timezone.timedelta(days=2), ) progress.recruit_users.add(user) progress.flavours.add( taggit.models.Tag.objects.get_or_create(name=TYPESCRIPT)[0] ) update_project_card_progress(user) card_ts.refresh_from_db() card_js.refresh_from_db() self.assertEqual(card_js.status, card_js.READY) self.assertEqual(card_ts.status, card_ts.IN_PROGRESS)
def setUp(self): self.trusted_user = core_factories.UserFactory() self.untrusted_user = core_factories.UserFactory() self.ready_card = factories.AgileCardFactory(status=models.AgileCard.READY) self.ip_card = factories.AgileCardFactory(status=models.AgileCard.IN_PROGRESS) self.feedback_card = factories.AgileCardFactory( status=models.AgileCard.REVIEW_FEEDBACK ) self.cards = [ self.ready_card, self.ip_card, self.feedback_card, ] for card in self.cards: factories.ReviewTrustFactory( content_item = card.content_item, user=self.trusted_user, flavours = card.recruit_project.flavour_names ) assert card.recruit_project.is_trusted_reviewer(self.trusted_user)
def test_topic_needing_review_gets_correct_status_over_time(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.TOPIC, topic_needs_review=True ) card = factories.AgileCardFactory(content_item=content_item) # card.assignees.add(self.user) user = card.assignees.first() update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.READY) card.start_topic() card.finish_topic() card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.IN_REVIEW) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.IN_REVIEW) factories.TopicReviewFactory( topic_progress=card.topic_progress, status=NOT_YET_COMPETENT ) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.REVIEW_FEEDBACK) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.REVIEW_FEEDBACK) card.finish_topic() card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.IN_REVIEW) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.IN_REVIEW) factories.TopicReviewFactory( topic_progress=card.topic_progress, status=COMPETENT ) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.COMPLETE) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.COMPLETE)
def test_error_gets_raised_if_card_has_flavours_but_progress_doesnt(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.TOPIC, available_flavours=[JAVASCRIPT, TYPESCRIPT], ) card_ts = factories.AgileCardFactory( content_item=content_item, content_flavours=[TYPESCRIPT] ) card_ts.assignees.add(self.user) progress = models.TopicProgress(content_item=content_item, user=self.user) progress.save() with self.assertRaises(FlavourProgressMismatchError): update_topic_card_progress(self.user)
def test_error_gets_raised_if_card_has_flavours_but_progress_doesnt(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.WORKSHOP, available_flavours=[JAVASCRIPT, TYPESCRIPT], ) card_ts = factories.AgileCardFactory(content_item=content_item, content_flavours=[TYPESCRIPT]) card_ts.assignees.add(self.user) progress = factories.WorkshopAttendanceFactory( content_item=content_item, attendee_user=self.user) progress.save() with self.assertRaises(FlavourProgressMismatchError): update_workshop_card_progress(self.user)
def test_unstarted_topic_with_due_time_ready_to_ip(self): tomorrow = timezone.now() + timedelta(days=1) content_item = factories.ContentItemFactory( content_type=models.ContentItem.TOPIC, ) card = factories.AgileCardFactory(content_item=content_item) # card.assignees.add(self.user) user = card.assignees.first() update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.READY) card.set_due_time(tomorrow) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.READY) card.start_topic() card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.IN_PROGRESS) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.IN_PROGRESS) card.stop_topic() card.refresh_from_db() self.assertEqual(card.topic_progress.start_time, None) self.assertEqual(card.topic_progress.due_time, tomorrow) self.assertEqual(card.status, models.AgileCard.READY) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.READY) card.start_topic() card.finish_topic() card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.COMPLETE) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, models.AgileCard.COMPLETE)
def test_no_flavours(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.WORKSHOP) card = factories.AgileCardFactory(content_item=content_item) card.assignees.add(self.user) update_workshop_card_progress(self.user) card.refresh_from_db() self.assertEqual(card.status, card.READY) progress = factories.WorkshopAttendanceFactory( content_item=content_item, attendee_user=self.user) progress.save() update_workshop_card_progress(self.user) card.refresh_from_db() self.assertEqual(card.status, card.COMPLETE)
def test_no_flavours(self): content_item = factories.ContentItemFactory( content_type=models.ContentItem.TOPIC ) card = factories.AgileCardFactory(content_item=content_item) user = card.assignees.first() # card.assignees.add(self.user) update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, card.READY) progress = models.TopicProgress( content_item=content_item, user=user, due_time=timezone.now() ) progress.save() update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, card.READY) progress.start_time = timezone.now() progress.save() update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, card.IN_PROGRESS) progress.review_request_time = timezone.now() progress.save() update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, card.IN_REVIEW) progress.complete_time = timezone.now() progress.save() update_topic_card_progress(user) card.refresh_from_db() self.assertEqual(card.status, card.COMPLETE)
def setUp(self): self.blocked_card = factories.AgileCardFactory( status=models.AgileCard.BLOCKED) self.ready_card = factories.AgileCardFactory( status=models.AgileCard.READY) self.ip_card = factories.AgileCardFactory( status=models.AgileCard.IN_PROGRESS) self.review_card = factories.AgileCardFactory( status=models.AgileCard.IN_REVIEW) self.feedback_card = factories.AgileCardFactory( status=models.AgileCard.REVIEW_FEEDBACK) self.complete_card = factories.AgileCardFactory( status=models.AgileCard.COMPLETE) self.cards = [ self.blocked_card, self.ready_card, self.ip_card, self.review_card, self.feedback_card, self.complete_card, ]