def test_hard_milestone_and_prereq_two_level_and_branch(self): order1 = factories.ContentItemOrderFactory( post=self.content_item, hard_requirement=True ) order2 = factories.ContentItemOrderFactory( post=self.content_item, hard_requirement=True ) content_requirements = models.CurriculumContentRequirement.objects.filter( curriculum=self.curriculum ).order_by("order") items = list(_recurse_generate_ordered_content_items(content_requirements)) # (content_item, is_hard_milestone, is_soft_milestone) assert items == [ (order1.pre, False, False, []), (order2.pre, False, False, []), (self.content_item, True, False, []), ], items order3 = factories.ContentItemOrderFactory( post=order2.pre, hard_requirement=True ) order4 = factories.ContentItemOrderFactory( post=order2.pre, hard_requirement=True ) items = list(_recurse_generate_ordered_content_items(content_requirements)) self.assertEqual( items, [ (order1.pre, False, False, []), (order3.pre, False, False, []), (order4.pre, False, False, []), (order2.pre, False, False, []), (self.content_item, True, False, []), ], ) # add a repeated requirement (not circular). The order should change order5 = factories.ContentItemOrderFactory( post=order1.pre, pre=order4.pre, hard_requirement=True ) items = list(_recurse_generate_ordered_content_items(content_requirements)) self.assertEqual( items, [ (order4.pre, False, False, []), (order1.pre, False, False, []), (order3.pre, False, False, []), (order2.pre, False, False, []), (self.content_item, True, False, []), ], )
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_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_can_block_cards_that_were_ready(self): # adding a soft requirement. The user doesn't HAVE to do this one item_order = factories.ContentItemOrderFactory( post=self.content_item, hard_requirement=True ) ordered_content_items = [ # (content_item, is_hard_milestone, is_soft_milestone) (item_order.pre, False, False, []), (self.content_item, True, False, []), ] create_or_update_content_cards_for_user(self.recruit, ordered_content_items) cards = models.AgileCard.objects.all() cards = list(cards) self.assertEqual(len(cards), 2) self.assertEqual(cards[1], self.card) self.assertEqual(cards[0].status, models.AgileCard.READY) self.assertEqual(cards[1].status, models.AgileCard.BLOCKED) self.assertEqual(list(cards[0].assignees.all()), list(cards[1].assignees.all()))