def test_relationship_is_in_correct_order(self): item1 = factories.ContentItemFactory() item2 = factories.ContentItemFactory() # item 1 as a prerequisite to item 2 order = factories.ContentItemOrderFactory(pre=item1, post=item2) prereq_1 = list(item1.prerequisites.all()) unlocks_1 = list(item1.unlocks.all()) post_order_1 = list(item1.post_ordered_content.all()) pre_order_1 = list(item1.pre_ordered_content.all()) assert post_order_1 == [order], post_order_1 assert pre_order_1 == [], pre_order_1 assert prereq_1 == [], prereq_1 assert unlocks_1 == [item2], unlocks_1 prereq_2 = list(item2.prerequisites.all()) unlocks_2 = list(item2.unlocks.all()) assert prereq_2 == [item1], prereq_2 assert unlocks_2 == [], unlocks_2 assert item2.all_prerequisite_content_items() == [item1]
def test_prereq_with_flavours(self): """ requirements have flavours and prereq does too, therefore moar cards """ content_item = factories.ContentItemFactory( flavours=[TYPESCRIPT, JAVASCRIPT] ) requirement1 = factories.CurriculumContentRequirementFactory( content_item=factories.ContentItemFactory(flavours=[TYPESCRIPT]), curriculum=self.curriculum, hard_requirement=True, flavours=[TYPESCRIPT], ) requirement2 = factories.CurriculumContentRequirementFactory( content_item=factories.ContentItemFactory(flavours=[JAVASCRIPT]), curriculum=self.curriculum, hard_requirement=False, flavours=[JAVASCRIPT], ) factories.ContentItemOrderFactory( post=requirement1.content_item, pre=content_item ) factories.ContentItemOrderFactory( post=requirement2.content_item, pre=content_item ) l = gen_helpers.get_ordered_content_items(self.curriculum) # since content_item has available flavours, it will be associated with TWO cards self.assertEqual(len(l), 4) self.assertEqual(l[0].content_item, content_item) self.assertEqual(l[0].is_hard_milestone, False) self.assertEqual(l[0].is_soft_milestone, False) self.assertEqual([o.name for o in l[0].flavours], [TYPESCRIPT]) self.assertEqual(l[1].content_item, requirement1.content_item) self.assertEqual(l[1].is_hard_milestone, True) self.assertEqual(l[1].is_soft_milestone, False) self.assertEqual([o.name for o in l[1].flavours], [TYPESCRIPT]) self.assertEqual(l[2].content_item, content_item) self.assertEqual(l[2].is_hard_milestone, False) self.assertEqual(l[2].is_soft_milestone, False) self.assertEqual([o.name for o in l[2].flavours], [JAVASCRIPT]) self.assertEqual(l[3].content_item, requirement2.content_item) self.assertEqual(l[3].is_hard_milestone, False) self.assertEqual(l[3].is_soft_milestone, True) self.assertEqual([o.name for o in l[3].flavours], [JAVASCRIPT])
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.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 setUp(self): self.javascript = Tag.objects.get_or_create(name=JAVASCRIPT)[0] self.python = Tag.objects.get_or_create(name=PYTHON)[0] self.content_item = factories.ContentItemFactory() models.ContentAvailableFlavour.objects.create( content_item=self.content_item, tag=self.javascript) models.ContentAvailableFlavour.objects.create( content_item=self.content_item, tag=self.python) self.user = core_factories.UserFactory()
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 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.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 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)