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)
Beispiel #3
0
    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)
Beispiel #5
0
    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,
        ]
Beispiel #6
0
 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)
Beispiel #7
0
 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)
Beispiel #10
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
    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)
Beispiel #15
0
    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)
Beispiel #17
0
    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,
        ]