Beispiel #1
0
    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, []),
            ],
        )
Beispiel #2
0
    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])
Beispiel #3
0
    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]
Beispiel #4
0
    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()))