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)
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"])
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