def test_view(self):
     user = factories.UserFactory.create(
         email='*****@*****.**', password='******')
     project = factories.create_sample_project(user)
     backlog = factories.create_org_sample_backlog(user, backlog_kwargs={
         'project': project
     })
     backlog_main = factories.create_org_sample_backlog(
         user, backlog_kwargs={
             'project': project,
             'is_main': True,
         }
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog_main,
         points=22,
         status=Status.IN_PROGRESS,
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog_main,
         points=11,
         status=Status.TODO,
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog,
         points=10,
         status=Status.TODO,
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog,
         points=-1,
         status=Status.TODO,
     )
     project.generate_daily_statistics()
     url = reverse("project_stats", args=(project.pk,))
     self.app.get(url, status=302)
     response = self.app.get(url, user=user)
     self.assertContains(response, "Story points in project")
     self.assertContains(response, "Story points in main backlog")
 def test_view(self):
     user = factories.UserFactory.create(email='*****@*****.**',
                                         password='******')
     project = factories.create_sample_project(user)
     backlog = factories.create_org_sample_backlog(
         user, backlog_kwargs={'project': project})
     backlog_main = factories.create_org_sample_backlog(user,
                                                        backlog_kwargs={
                                                            'project':
                                                            project,
                                                            'is_main': True,
                                                        })
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog_main,
         points=22,
         status=Status.IN_PROGRESS,
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog_main,
         points=11,
         status=Status.TODO,
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog,
         points=10,
         status=Status.TODO,
     )
     factories.UserStoryFactory.create(
         project=project,
         backlog=backlog,
         points=-1,
         status=Status.TODO,
     )
     project.generate_daily_statistics()
     url = reverse("project_stats", args=(project.pk, ))
     self.app.get(url, status=302)
     response = self.app.get(url, user=user)
     self.assertContains(response, "Story points in project")
     self.assertContains(response, "Story points in main backlog")
    def test_generate(self):
        user = factories.UserFactory.create(
            email='*****@*****.**', password='******')
        project = factories.create_sample_project(user)
        backlog = factories.create_org_sample_backlog(user, backlog_kwargs={
            'project': project
        })
        backlog_main = factories.create_org_sample_backlog(
            user, backlog_kwargs={
                'project': project,
                'is_main': True,
            }
        )
        factories.UserStoryFactory.create(
            project=project,
            backlog=backlog_main,
            points=22,
            status=Status.IN_PROGRESS,
        )
        factories.UserStoryFactory.create(
            project=project,
            backlog=backlog_main,
            points=11,
            status=Status.TODO,
        )
        factories.UserStoryFactory.create(
            project=project,
            backlog=backlog,
            points=10,
            status=Status.TODO,
        )
        story = factories.UserStoryFactory.create(
            project=project,
            backlog=backlog,
            points=-1,
            status=Status.TODO,
        )
        project.generate_daily_statistics()
        self.assertEqual(project.statistics.count(), 1)
        project.generate_daily_statistics(timezone.now())
        # not generated twice for the same day
        self.assertEqual(project.statistics.count(), 1)

        project.generate_daily_statistics(timezone.now() - timedelta(days=1))
        # Same statistics data, should not create element
        self.assertEqual(project.statistics.count(), 1)

        story.status = Status.ACCEPTED
        story.save()
        project.generate_daily_statistics(timezone.now() - timedelta(days=1))
        # statistics have changed, should had been generated.
        self.assertEqual(project.statistics.count(), 2)

        today_stats = project.statistics.get(
            day=timezone.now()
        )
        data = today_stats.data
        self.assertEqual(data['backlogs'], 2)
        self.assertEqual(data['all']['points'], 22 + 11 + 10)
        self.assertEqual(data['all']['stories'], 4)
        self.assertEqual(data['all']['non_estimated'], 1)
        self.assertEqual(data['all']['by_status']['to_do']['points'], 10 + 11)
        self.assertEqual(data['all']['by_status']['to_do']['stories'], 3)
        self.assertEqual(data['all']['by_status']['in_progress']['points'], 22)
        self.assertEqual(data['all']['by_status']['in_progress']['stories'], 1)

        self.assertEqual(data['main']['points'], 22 + 11)
        self.assertEqual(data['main']['stories'], 2)
        self.assertEqual(data['main']['by_status']['to_do']['points'], 11)
        self.assertEqual(data['main']['by_status']['to_do']['stories'], 1)
    def test_generate(self):
        user = factories.UserFactory.create(email='*****@*****.**',
                                            password='******')
        project = factories.create_sample_project(user)
        backlog = factories.create_org_sample_backlog(
            user, backlog_kwargs={'project': project})
        backlog_main = factories.create_org_sample_backlog(user,
                                                           backlog_kwargs={
                                                               'project':
                                                               project,
                                                               'is_main': True,
                                                           })
        factories.UserStoryFactory.create(
            project=project,
            backlog=backlog_main,
            points=22,
            status=Status.IN_PROGRESS,
        )
        factories.UserStoryFactory.create(
            project=project,
            backlog=backlog_main,
            points=11,
            status=Status.TODO,
        )
        factories.UserStoryFactory.create(
            project=project,
            backlog=backlog,
            points=10,
            status=Status.TODO,
        )
        story = factories.UserStoryFactory.create(
            project=project,
            backlog=backlog,
            points=-1,
            status=Status.TODO,
        )
        project.generate_daily_statistics()
        self.assertEqual(project.statistics.count(), 1)
        project.generate_daily_statistics(timezone.now())
        # not generated twice for the same day
        self.assertEqual(project.statistics.count(), 1)

        project.generate_daily_statistics(timezone.now() - timedelta(days=1))
        # Same statistics data, should not create element
        self.assertEqual(project.statistics.count(), 1)

        story.status = Status.ACCEPTED
        story.save()
        project.generate_daily_statistics(timezone.now() - timedelta(days=1))
        # statistics have changed, should had been generated.
        self.assertEqual(project.statistics.count(), 2)

        today_stats = project.statistics.get(day=timezone.now())
        data = today_stats.data
        self.assertEqual(data['backlogs'], 2)
        self.assertEqual(data['all']['points'], 22 + 11 + 10)
        self.assertEqual(data['all']['stories'], 4)
        self.assertEqual(data['all']['non_estimated'], 1)
        self.assertEqual(data['all']['by_status']['to_do']['points'], 10 + 11)
        self.assertEqual(data['all']['by_status']['to_do']['stories'], 3)
        self.assertEqual(data['all']['by_status']['in_progress']['points'], 22)
        self.assertEqual(data['all']['by_status']['in_progress']['stories'], 1)

        self.assertEqual(data['main']['points'], 22 + 11)
        self.assertEqual(data['main']['stories'], 2)
        self.assertEqual(data['main']['by_status']['to_do']['points'], 11)
        self.assertEqual(data['main']['by_status']['to_do']['stories'], 1)