def test_issue_kanban_moveleftright(self):
        self.assertEqual(self.project.kanbancol.count(), 4)
        issue1 = Issue(title="issue1",
                       project=self.project,
                       kanbancol=self.project.kanbancol.first())
        issue1.save()

        self.assertEqual(issue1.get_left_kCol_for_issue(), -1)
        self.assertEqual(issue1.get_right_kCol_for_issue(), 1)

        # move issue to next row and check results
        issue1.kanbancol = self.project.kanbancol.get(position='1')
        issue1.save()
        self.assertEqual(issue1.get_left_kCol_for_issue(), 0)
        self.assertEqual(issue1.get_right_kCol_for_issue(), 2)

        # move issue to last row and check results
        issue1.kanbancol = self.project.kanbancol.get(position='3')
        issue1.save()
        self.assertEqual(issue1.get_left_kCol_for_issue(), 2)
        self.assertEqual(issue1.get_right_kCol_for_issue(), -1)

        # test view function
        response = self.client.post(
            reverse('issue:setkanbancol',
                    kwargs={'project': self.project.name_short}), {
                        'sqn_k': '0',
                        'sqn_i': issue1.number,
                    },
            follow=True)
        self.assertRedirects(
            response,
            reverse('issue:projList',
                    kwargs={'project': self.project.name_short}))
        issue1.refresh_from_db()
        self.assertEqual(issue1.kanbancol.position, 0)

        # check if error handling works (set col too high)
        response = self.client.post(
            reverse('issue:setkanbancol',
                    kwargs={'project': self.project.name_short}), {
                        'sqn_k': '4',
                        'sqn_i': issue1.number,
                    },
            follow=True)
        self.assertRedirects(
            response,
            reverse('issue:projList',
                    kwargs={'project': self.project.name_short}))
        self.assertEqual(len(list(response.context['messages'])), 1)
        issue1.refresh_from_db()
        self.assertEqual(issue1.kanbancol.position, 0)

        # check with invalid issue
        response = self.client.post(
            reverse('issue:setkanbancol',
                    kwargs={'project': self.project.name_short}), {
                        'sqn_k': '2',
                        'sqn_i': issue1.number + 1,
                    },
            follow=True)
        self.assertRedirects(
            response,
            reverse('issue:projList',
                    kwargs={'project': self.project.name_short}))
        self.assertEqual(len(list(response.context['messages'])), 1)
        issue1.refresh_from_db()
        self.assertEqual(issue1.kanbancol.position, 0)
Beispiel #2
0
    def test_form(self):
        # create
        vals = {
            'name': "Testcolumn",
            'type': 'ToDo',
            'project': self.project.pk
        }
        response = self.client.post(
            reverse('kanbancol:create', kwargs={'project': self.short}), vals)
        self.client.get(reverse("project:edit", kwargs={"project":
                                                        self.short}))
        self.assertRedirects(
            response, reverse('project:edit', kwargs={'project': self.short}))

        response = self.client.get(response['location'])
        self.assertEqual(response.status_code, 200)
        # We always insert at the end
        self.assertEqual(response.context['columns'][3].name, "Testcolumn")
        self.assertEqual(str(response.context['columns'][3]), "Testcolumn")

        # modify
        vals = {
            'name': "Testmodification",
            'type': 'ToDo',
        }
        response = self.client.post(
            reverse('kanbancol:update',
                    kwargs={
                        'position': 3,
                        'project': self.short
                    }), vals)
        self.assertRedirects(
            response, reverse('project:edit', kwargs={'project': self.short}))

        response = self.client.get(response['location'])
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context['columns'][3].name,
                         "Testmodification")

        # assign issue to column and try to delete
        issue = Issue(title="Test-Issue",
                      kanbancol=KanbanColumn.objects.get(
                          position=3, project__name_short=self.short),
                      project=self.project,
                      type="Bug")
        issue.save()

        self.assertEqual(KanbanColumn.objects.count(), 4)

        response = self.client.post(
            reverse('kanbancol:delete',
                    kwargs={
                        'position': 3,
                        'project': self.short
                    }), {'delete': 'true'})
        self.assertRedirects(
            response, reverse('project:edit', kwargs={'project': self.short}))
        self.assertEqual(KanbanColumn.objects.count(), 4)

        issue.kanbancol = KanbanColumn.objects.get(
            position=2, project__name_short=self.short)
        issue.save()

        # delete
        response = self.client.post(
            reverse('kanbancol:delete',
                    kwargs={
                        'position': 3,
                        'project': self.short
                    }), {'delete': 'true'})
        self.assertRedirects(
            response, reverse('project:edit', kwargs={'project': self.short}))
        response = self.client.get(response['location'])
        self.assertEqual(KanbanColumn.objects.count(), 3)
        self.assertNotContains(response, vals["name"])
Beispiel #3
0
    def test_start_and_stop_sprint(self):
        # self.sprint should not have started
        self.assertNotEqual(self.sprint.seqnum, -1)
        project = Project(creator=self.user, name_short='APF')
        project.save()
        project.manager.add(self.user)

        n = Sprint.objects.get_new_sprints().count()
        sprint = Sprint(project=project)
        sprint.save()
        self.assertEqual(Sprint.objects.get_new_sprints().count(), (n+1))
        self.assertTrue(sprint in Sprint.objects.get_new_sprints())
        self.assertFalse(sprint in Sprint.objects.get_current_sprints())
        self.assertFalse(sprint in Sprint.objects.get_old_sprints())
        self.assertIsNone(project.currentsprint)

        # columns and issues for testing archiving function
        kanbancol3 = KanbanColumn.objects.get(name='Todo', project=project)
        kanbancol3.type = 'Done'
        kanbancol3.save()
        kanbancol2 = KanbanColumn.objects.get(name='In Progress', project=project)
        kanbancol1 = KanbanColumn.objects.get(name='Done', project=project)
        kanbancol1.type = 'ToDo'
        kanbancol1.save()

        issue = Issue(title="Test-Issue", kanbancol=kanbancol1, project=project, type="Bug", sprint=sprint)
        issue.save()
        issue2 = Issue(title="Test-Issue2", kanbancol=kanbancol2, project=project, type="Bug", sprint=sprint)
        issue2.save()
        issue3 = Issue(title="Test-Issue3", kanbancol=kanbancol3, project=project, type="Bug", sprint=sprint)
        issue3.save()
        issue4 = Issue(title="Test-Issue4", kanbancol=kanbancol3, project=project, type="Bug")
        issue4.save()

        # issues (except issue4) should be in not started sprint
        self.assertFalse(issue in Issue.objects.without_sprint())
        self.assertFalse(issue in Issue.objects.current_sprint())
        self.assertFalse(issue in Issue.objects.archived())
        self.assertFalse(project.has_active_sprint())

        # start sprint
        response = self.client.post(reverse('sprint:startsprint',
                                    kwargs={'project': project.name_short, 'sqn_s': sprint.seqnum}))
        self.assertRedirects(response, reverse('backlog:backlog',
                             kwargs={'project': project.name_short, 'sqn_s': sprint.seqnum}))
        sprint.refresh_from_db()
        project.refresh_from_db()

        # sprint should be current sprint
        self.assertIsNotNone(project.currentsprint)
        self.assertEqual(project.currentsprint.seqnum, sprint.seqnum)
        self.assertTrue(project.has_active_sprint())
        self.assertFalse(sprint in Sprint.objects.get_new_sprints())
        self.assertTrue(sprint in Sprint.objects.get_current_sprints())
        self.assertFalse(sprint in Sprint.objects.get_old_sprints())

        # no issues archived until now
        self.assertFalse(issue in Issue.objects.without_sprint())
        self.assertTrue(issue in Issue.objects.current_sprint())
        self.assertFalse(issue in Issue.objects.archived())
        self.assertFalse(issue2 in Issue.objects.archived())
        self.assertFalse(issue3 in Issue.objects.archived())
        self.assertFalse(issue4 in Issue.objects.archived())

        # set sprint inactive(and archive)
        response = self.client.post(reverse('sprint:stopsprint',
                                            kwargs={'project': project.name_short, 'sqn_s': sprint.seqnum}),
                                    {'sprint': 'new', 'move_to_new_sprint': []},
                                    follow=True)
        self.assertRedirects(response, reverse('backlog:backlog',
                             kwargs={'project': project.name_short}))
        sprint.refresh_from_db()
        project.refresh_from_db()

        # sprint should no more be current sprint. not-done-issues back in backlog (not archived, without sprint)

        self.assertFalse(sprint in Sprint.objects.get_new_sprints())
        self.assertFalse(sprint in Sprint.objects.get_current_sprints())
        self.assertTrue(sprint in Sprint.objects.get_old_sprints())
        self.assertIsNone(project.currentsprint)
        self.assertFalse(project.has_active_sprint())
        self.assertTrue(issue in Issue.objects.without_sprint())
        self.assertFalse(issue in Issue.objects.current_sprint())

        # issue3 is archived because of column type and finished sprint,
        # issue (wrong type), issue2 (wrong type) and 4 (wrong sprint) arent
        self.assertFalse(issue in Issue.objects.archived())
        self.assertFalse(issue2 in Issue.objects.archived())
        self.assertTrue(issue3 in Issue.objects.archived())
        self.assertFalse(issue4 in Issue.objects.archived())

        # issue and issue4 are in same column, both without sprint
        issue4.kanbancol = kanbancol1
        issue4.save()

        # archive column of issue and issue4
        values = {'pos_c': kanbancol1.position}
        response = self.client.post(reverse('issue:archivecol',
                                    kwargs={'project': project.name_short}),
                                    values)
        self.assertRedirects(response, reverse('sprint:sprintboard',
                             kwargs={'project': project.name_short}))
        issue4.refresh_from_db()

        self.assertTrue(issue in Issue.objects.archived())  # archived by archivecol
        self.assertFalse(issue2 in Issue.objects.archived())  # not archived wrong type
        self.assertTrue(issue3 in Issue.objects.archived())  # archived by stopsprint
        self.assertTrue(issue4 in Issue.objects.archived())  # archived by archivecol