From 8560c97ebd665bad1a01e308c9631f8ce4e5e4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89lie=20Bouttier?= Date: Wed, 3 Sep 2014 00:14:20 -0700 Subject: [PATCH] tests: begin tracker tests --- tracker/fixtures/test_tracker_views.json | 170 +++++++++++++++++ tracker/tests.py | 230 ++++++++++++++++++++++- 2 files changed, 399 insertions(+), 1 deletion(-) create mode 100644 tracker/fixtures/test_tracker_views.json diff --git a/tracker/fixtures/test_tracker_views.json b/tracker/fixtures/test_tracker_views.json new file mode 100644 index 0000000..d4dee97 --- /dev/null +++ b/tracker/fixtures/test_tracker_views.json @@ -0,0 +1,170 @@ +[ + { + "fields": { + "color": "#FF0000", + "deleted": false, + "inverted": true, + "name": "bug", + "project": 1 + }, + "model": "tracker.label", + "pk": 1 + }, + { + "fields": { + "color": "#00A000", + "deleted": false, + "inverted": true, + "name": "feature", + "project": 1 + }, + "model": "tracker.label", + "pk": 2 + }, + { + "fields": { + "color": "#1D3DBE", + "deleted": false, + "inverted": true, + "name": "documentation", + "project": 1 + }, + "model": "tracker.label", + "pk": 3 + }, + { + "fields": { + "color": "#FF0000", + "deleted": false, + "inverted": true, + "name": "bug", + "project": 2 + }, + "model": "tracker.label", + "pk": 4 + }, + { + "fields": { + "color": "#00A000", + "deleted": false, + "inverted": true, + "name": "feature", + "project": 2 + }, + "model": "tracker.label", + "pk": 5 + }, + { + "fields": { + "color": "#1D3DBE", + "deleted": false, + "inverted": true, + "name": "documentation", + "project": 2 + }, + "model": "tracker.label", + "pk": 6 + }, + { + "fields": { + "closed": false, + "due_date": "2014-09-02T23:35:00Z", + "name": "v1.0", + "project": 1 + }, + "model": "tracker.milestone", + "pk": 1 + }, + { + "fields": { + "date_joined": "2014-09-03T06:34:06.019Z", + "email": "", + "first_name": "", + "groups": [], + "is_active": true, + "is_staff": true, + "is_superuser": true, + "last_login": "2014-09-03T06:34:26.544Z", + "last_name": "", + "password": "pbkdf2_sha256$12000$WrD5Mo69v7O1$JqUWSog9wxF7wyJz+esO9EHlv9j+boD58VODEq+jYLY=", + "user_permissions": [], + "username": "admin" + }, + "model": "accounts.user", + "pk": 1 + }, + { + "fields": { + "date_joined": "2014-09-03T06:34:39.486Z", + "email": "", + "first_name": "", + "groups": [], + "is_active": true, + "is_staff": false, + "is_superuser": false, + "last_login": "2014-09-03T06:34:39.486Z", + "last_name": "", + "password": "pbkdf2_sha256$12000$51A5s5i71FWd$yOFaM/fJGEdykCbfhDRWbz0z/KGHiUNbM3mPzrieDe4=", + "user_permissions": [], + "username": "user1" + }, + "model": "accounts.user", + "pk": 2 + }, + { + "fields": { + "_args": "{}", + "additionnal_section": "", + "author": 1, + "code": 11, + "date": "2014-09-03T06:34:57.233Z", + "issue": 1 + }, + "model": "tracker.event", + "pk": 1 + }, + { + "fields": { + "assignee": null, + "author": 1, + "closed": false, + "id": 1, + "labels": [], + "milestone": null, + "opened_at": "2014-09-03T06:34:56.913Z", + "project": 1, + "subscribers": [ + 1 + ], + "title": "Issue 1" + }, + "model": "tracker.issue", + "pk": 1 + }, + { + "fields": { + "access": 1, + "description": "", + "display_name": "Project 1", + "name": "project-1", + "subscribers": [ + 1 + ] + }, + "model": "tracker.project", + "pk": 1 + }, + { + "fields": { + "access": 1, + "description": "", + "display_name": "Project 2", + "name": "project-2", + "subscribers": [ + 1 + ] + }, + "model": "tracker.project", + "pk": 2 + } +] diff --git a/tracker/tests.py b/tracker/tests.py index 7ce503c..eb760ec 100644 --- a/tracker/tests.py +++ b/tracker/tests.py @@ -1,3 +1,231 @@ from django.test import TestCase +from django.core.urlresolvers import reverse -# Create your tests here. +from tracker.models import * +from accounts.models import User + + +class TestViews(TestCase): + + fixtures = ['test_tracker_views'] + + def setUp(self): + self.client.login(username='admin', password='admin') + + def test_admin(self): + response = self.client.get(reverse('admin')) + self.assertRedirects(response, reverse('settings')) + + def test_settings(self): + response = self.client.get(reverse('settings')) + self.assertEqual(response.status_code, 200) + + # Projects + + def test_project_list(self): + response = self.client.get(reverse('list-project')) + self.assertEqual(response.status_code, 200) + Project.objects.all().delete() + response = self.client.get(reverse('list-project')) + self.assertRedirects(response, reverse('add-project')) + + def test_project_add(self): + response = self.client.get(reverse('add-project')) + self.assertEqual(response.status_code, 200) + + def test_project_edit(self): + project = Project.objects.first() + response = self.client.get(reverse('edit-project', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_project_delete(self): + project = Project.objects.first() + response = self.client.get(reverse('delete-project', args=[project.name])) + self.assertEqual(response.status_code, 405) # get method not allowed + response = self.client.post(reverse('delete-project', args=[project.name])) + self.assertRedirects(response, reverse('list-project')) + + def test_project_subscribe_unsubscribe(self): + self.client.logout() + self.client.login(username='user1', password='user1') + user = User.objects.get(username='user1') + project = Project.objects.get(name='project-1') + self.assertFalse(user in project.subscribers.all()) + response = self.client.get(reverse('subscribe-project', args=[project.name])) + self.assertRedirects(response, reverse('profile')) + user.email = 'user@example.com' + user.save() + response = self.client.get(reverse('subscribe-project', args=[project.name])) + self.assertRedirects(response, reverse('list-issue', args=[project.name])) + project = Project.objects.get(pk=project.pk) + self.assertTrue(user in project.subscribers.all()) + response = self.client.get(reverse('unsubscribe-project', args=[project.name])) + self.assertRedirects(response, reverse('list-issue', args=[project.name])) + project = Project.objects.get(pk=project.pk) + self.assertFalse(user in project.subscribers.all()) + + # Issue + + def test_issue_list(self): + project = Project.objects.get(name='project-1') + response = self.client.get(reverse('list-issue', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_issue_add(self): + project = Project.objects.get(name='project-1') + response = self.client.get(reverse('add-issue', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_issue_edit(self): + project = Project.objects.get(name='project-1') + issue = project.issues.first() + response = self.client.get(reverse('edit-issue', args=[project.name, issue.id])) + self.assertEqual(response.status_code, 200) + + def test_issue_details(self): + project = Project.objects.get(name='project-1') + issue = project.issues.get(title='Issue 1') + response = self.client.get(reverse('show-issue', args=[project.name, issue.id])) + self.assertEqual(response.status_code, 200) + + def test_issue_comment_add(self): + pass + + def test_issue_comment_edit(self): + pass + + def test_issue_comment_delete(self): + pass + + def test_issue_close_reopen(self): + issue = Issue.objects.filter(closed=False).first() + project = issue.project + response = self.client.get(reverse('reopen-issue', args=[project.name, issue.id])) + self.assertEqual(response.status_code, 404) + response = self.client.get(reverse('close-issue', args=[project.name, issue.id])) + self.assertRedirects(response, reverse('list-issue', args=[project.name])) + issue = Issue.objects.get(pk=issue.pk) + self.assertTrue(issue.closed) + response = self.client.get(reverse('close-issue', args=[project.name, issue.id])) + self.assertEqual(response.status_code, 404) + response = self.client.get(reverse('reopen-issue', args=[project.name, issue.id])) + self.assertRedirects(response, reverse('show-issue', args=[project.name, issue.id])) + issue = Issue.objects.get(pk=issue.pk) + self.assertFalse(issue.closed) + + def test_issue_delete(self): + count = Issue.objects.count() + issue = Issue.objects.first() + project = issue.project + response = self.client.get(reverse('delete-issue', args=[project.name, issue.id])) + self.assertEqual(response.status_code, 405) # get method forbidden + response = self.client.post(reverse('delete-issue', args=[project.name, issue.id])) + self.assertRedirects(response, reverse('list-issue', args=[project.name])) + self.assertEqual(Issue.objects.count(), count - 1) + + def test_issue_add_label(self): + pass + + def test_issue_remove_label(self): + pass + + def test_issue_add_milestone(self): + pass + + def test_issue_remove_milestone(self): + pass + + def test_issue_subscribe_unsubscribe(self): + self.client.logout() + self.client.login(username='user1', password='user1') + user = User.objects.get(username='user1') + issue = Issue.objects.get(title='Issue 1') + project = issue.project + self.assertFalse(user in issue.subscribers.all()) + response = self.client.get(reverse('subscribe-issue', args=[project.name, issue.id])) + self.assertRedirects(response, reverse('profile')) + user.email = 'user@example.com' + user.save() + response = self.client.get(reverse('subscribe-issue', args=[project.name, issue.id])) + self.assertRedirects(response, reverse('show-issue', args=[project.name, issue.id])) + issue = Issue.objects.get(pk=issue.pk) + self.assertTrue(user in issue.subscribers.all()) + response = self.client.get(reverse('unsubscribe-issue', args=[project.name, issue.id])) + self.assertRedirects(response, reverse('show-issue', args=[project.name, issue.id])) + issue = Issue.objects.get(pk=issue.pk) + self.assertFalse(user in issue.subscribers.all()) + + # Labels + + def test_label_list(self): + project = Project.objects.get(name='project-1') + response = self.client.get(reverse('list-label', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_label_add(self): + project = Project.objects.get(name='project-1') + response = self.client.get(reverse('add-label', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_label_edit(self): + project = Project.objects.get(name='project-1') + label = project.labels.first() + response = self.client.get(reverse('edit-label', args=[project.name, label.id])) + self.assertEqual(response.status_code, 200) + + def test_label_delete(self): + count_active = Label.objects.filter(deleted=False).count() + count_deleted = Label.objects.filter(deleted=True).count() + label = Label.objects.first() + project = label.project + response = self.client.get(reverse('delete-label', args=[project.name, label.id])) + self.assertEqual(response.status_code, 405) # get method forbidden + response = self.client.post(reverse('delete-label', args=[project.name, label.id])) + self.assertRedirects(response, reverse('list-label', args=[project.name])) + self.assertEqual(Label.objects.filter(deleted=False).count(), count_active - 1) + self.assertEqual(Label.objects.filter(deleted=True).count(), count_deleted + 1) + + + # Milestones + + def test_milestone_list(self): + project = Project.objects.get(name='project-1') + response = self.client.get(reverse('list-milestone', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_milestone_add(self): + project = Project.objects.get(name='project-1') + response = self.client.get(reverse('add-milestone', args=[project.name])) + self.assertEqual(response.status_code, 200) + + def test_milestone_edit(self): + project = Project.objects.get(name='project-1') + milestone = project.milestones.first() + response = self.client.get(reverse('edit-milestone', args=[project.name, milestone.name])) + self.assertEqual(response.status_code, 200) + + def test_milestone_close_reopen(self): + milestone = Milestone.objects.filter(closed=False).first() + project = milestone.project + response = self.client.get(reverse('reopen-milestone', args=[project.name, milestone.name])) + self.assertEqual(response.status_code, 404) + response = self.client.get(reverse('close-milestone', args=[project.name, milestone.name])) + self.assertRedirects(response, reverse('list-milestone', args=[project.name])) + milestone = Milestone.objects.get(pk=milestone.pk) + self.assertTrue(milestone.closed) + response = self.client.get(reverse('close-milestone', args=[project.name, milestone.name])) + self.assertEqual(response.status_code, 404) + response = self.client.get(reverse('reopen-milestone', args=[project.name, milestone.name])) + self.assertRedirects(response, reverse('list-milestone', args=[project.name])) + milestone = Milestone.objects.get(pk=milestone.pk) + self.assertFalse(milestone.closed) + + def test_milestone_delete(self): + count = Milestone.objects.count() + project = Project.objects.get(name='project-1') + milestone = project.milestones.first() + response = self.client.get(reverse('delete-milestone', args=[project.name, milestone.name])) + self.assertEqual(response.status_code, 405) # get method forbidden + response = self.client.post(reverse('delete-milestone', args=[project.name, milestone.name])) + self.assertRedirects(response, reverse('list-milestone', args=[project.name])) + self.assertEqual(Milestone.objects.count(), count - 1)