Delete the rest of django test

remotes/origin/enhancement/email-actions
David Barragán Merino 2014-06-15 11:18:16 +02:00
parent c6ec50bb1e
commit 2c8524e146
24 changed files with 3 additions and 5183 deletions

View File

@ -300,8 +300,6 @@ TEST_RUNNER="django.test.runner.DiscoverRunner"
# Test conditions
if "test" in sys.argv:
if "settings" not in ",".join(sys.argv):
print ("\033[1;91mNot settings specified.\033[0m")
print ("Try: \033[1;33mpython manage.py test --settings="
"settings.testing -v2 taiga\033[0m")
sys.exit(0)
print ("\033[1;91mNo django tests.\033[0m")
print ("Try: \033[1;33mpy.test\033[0m")
sys.exit(0)

View File

@ -18,7 +18,3 @@ from .development import *
SKIP_SOUTH_TESTS = True
SOUTH_TESTS_MIGRATE = False
INSTALLED_APPS += [
"taiga.projects.mixins.tests.blocked.foo",
]

View File

@ -1,63 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django import test
from django.test.client import RequestFactory
from django.http import HttpResponse
from taiga.projects.tests import create_project
from taiga.projects.issues.tests import create_issue
from taiga.users.tests import create_user
from . import middleware as mw
from . import changes as ch
class SessionIDMiddlewareTests(test.TestCase):
# fixtures = ["initial_domains.json"]
def setUp(self):
self.factory = RequestFactory()
def test_process_session_id_01(self):
request = self.factory.get("/")
mw_instance = mw.SessionIDMiddleware()
mw_instance.process_request(request)
self.assertEqual(mw.get_current_session_id(), None)
def test_process_session_id_02(self):
request = self.factory.get("/", HTTP_X_SESSION_ID="foobar")
mw_instance = mw.SessionIDMiddleware()
mw_instance.process_request(request)
self.assertEqual(mw.get_current_session_id(), "foobar")
from unittest.mock import MagicMock
from unittest.mock import patch
class ChangesTest(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def test_emit_change_for_model(self):
user = create_user(1) # Project owner
project = create_project(1, user)
issue = create_issue(1, user, project)
with patch("taiga.events.backends.get_events_backend") as mock_instance:
ch.emit_change_event_for_model(issue, "sessionid")
self.assertTrue(mock_instance.return_value.emit_event.called)

View File

@ -1,207 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django import test
from django.core.urlresolvers import reverse
from django.core.files.uploadedfile import SimpleUploadedFile
from django.contrib.contenttypes.models import ContentType
from django.db.models.loading import get_model
from taiga.users.tests import create_user
from taiga.projects.tests import create_project
from taiga.projects.userstories.tests import create_userstory
from . import services as history
from . import models
class HistoryApiViewsTest(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1) # Project owner
self.project1 = create_project(1, self.user1)
def test_resolve_urls(self):
self.assertEqual(reverse("userstory-history-detail", args=[1]), "/api/v1/history/userstory/1")
def test_list_history_entries(self):
userstory1 = create_userstory(1, self.user1, self.project1)
userstory1.subject = "test1"
userstory1.save()
history.take_snapshot(userstory1)
userstory1.subject = "test2"
userstory1.save()
history.take_snapshot(userstory1)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
url = reverse("userstory-history-detail", args=[userstory1.pk])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
class HistoryServicesTest(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1) # Project owner
self.project1 = create_project(1, self.user1)
# def test_freeze_userstory(self):
# userstory1 = create_userstory(1, self.user1, self.project1)
# fobj = history.freeze_model_instance(userstory1)
# self.assertEqual(fobj.key, "userstories.userstory:{}".format(userstory1.id))
# self.assertIn("status", fobj.snapshot)
def test_freeze_wrong_object(self):
some_object = object()
with self.assertRaises(Exception):
history.freeze_model_instance(some_object)
def test_diff(self):
userstory1 = create_userstory(1, self.user1, self.project1)
userstory1.subject = "test1"
userstory1.save()
fobj1 = history.freeze_model_instance(userstory1)
userstory1.subject = "test2"
userstory1.save()
fobj2 = history.freeze_model_instance(userstory1)
fdiff = history.make_diff(fobj1, fobj2)
self.assertEqual(fdiff.diff, {"subject": ('test1', 'test2')})
def test_snapshot(self):
userstory1 = create_userstory(1, self.user1, self.project1)
userstory1.subject = "test1"
userstory1.save()
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test2"
userstory1.save()
self.assertEqual(hentry.key, "userstories.userstory:{}".format(userstory1.id))
self.assertEqual(models.HistoryEntry.objects.count(), 1)
history.take_snapshot(userstory1)
self.assertEqual(models.HistoryEntry.objects.count(), 2)
def test_comment(self):
userstory1 = create_userstory(1, self.user1, self.project1)
self.assertEqual(models.HistoryEntry.objects.count(), 0)
hentry = history.take_snapshot(userstory1, comment="Sample comment")
self.assertEqual(models.HistoryEntry.objects.count(), 1)
self.assertEqual(hentry.comment, "Sample comment")
def test_userstory_points(self):
userstory1 = create_userstory(1, self.user1, self.project1)
hentry = history.take_snapshot(userstory1)
self.assertEqual({}, hentry.values_diff)
rpmodel_cls = get_model("userstories", "RolePoints")
pmodel_cls = get_model("projects", "Points")
rolepoints = rpmodel_cls.objects.filter(user_story=userstory1)[0]
points = pmodel_cls.objects.get(project=userstory1.project, value=15)
rolepoints.points = points
rolepoints.save()
hentry = history.take_snapshot(userstory1)
self.assertIn("points", hentry.values_diff)
self.assertIn("UX", hentry.values_diff["points"])
self.assertEqual(hentry.values_diff["points"]["UX"], ["?", "15"])
def test_userstory_attachments(self):
userstory1 = create_userstory(1, self.user1, self.project1)
hentry = history.take_snapshot(userstory1)
self.assertEqual({}, hentry.values_diff)
# Create attachment file
attachment_modelcls = get_model("attachments", "Attachment")
content_type = ContentType.objects.get_for_model(userstory1.__class__)
temporary_file = SimpleUploadedFile("text.txt", b"sample content")
attachment = attachment_modelcls.objects.create(project=userstory1.project,
content_type=content_type,
content_object=userstory1,
object_id=userstory1.id,
owner=self.user1,
attached_file=temporary_file)
hentry = history.take_snapshot(userstory1)
self.assertIn("attachments", hentry.values_diff)
def test_values(self):
userstory1 = create_userstory(1, self.user1, self.project1)
userstory1.subject = "test1"
userstory1.save()
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test2"
userstory1.assigned_to = self.user1
userstory1.save()
hentry = history.take_snapshot(userstory1)
self.assertIn("users", hentry.values)
self.assertEqual(len(hentry.values), 1)
self.assertIn("assigned_to", hentry.values_diff)
self.assertEqual(hentry.values_diff["assigned_to"], [None, "Foo1 Bar1"])
def test_partial_snapshots(self):
userstory1 = create_userstory(1, self.user1, self.project1)
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test1"
userstory1.save()
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test2"
userstory1.save()
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test3"
userstory1.save()
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test4"
userstory1.save()
hentry = history.take_snapshot(userstory1)
userstory1.subject = "test5"
userstory1.save()
hentry = history.take_snapshot(userstory1)
self.assertEqual(models.HistoryEntry.objects.count(), 6)
self.assertEqual(models.HistoryEntry.objects.filter(is_snapshot=True).count(), 1)
self.assertEqual(models.HistoryEntry.objects.filter(is_snapshot=False).count(), 5)

View File

@ -1,37 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
def create_issue(id, owner, project, milestone=None, save=True):
model = get_model("issues", "Issue")
instance = model(
subject="Issue {0}".format(id),
description="The issue description.",
project=project,
milestone=milestone,
status=project.issue_statuses.all()[0],
severity=project.severities.all()[0],
priority=project.priorities.all()[0],
type=project.issue_types.all()[0],
owner=owner
)
if save:
instance.save()
return instance

View File

@ -1,965 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core import mail
from django.core.urlresolvers import reverse
from taiga.users.tests import create_user
from taiga.projects.tests import create_project, add_membership
from taiga.projects.milestones.tests import create_milestone
from taiga.projects.issues.models import Issue
from . import create_issue
class IssuesTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1) # Project owner
self.user2 = create_user(2) # Owner
self.user3 = create_user(3) # Membership
self.user4 = create_user(4) # No Membership
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user2)
add_membership(self.project1, self.user3)
self.milestone1 = create_milestone(1, self.user2, self.project1)
self.issue1 = create_issue(1, self.user2, self.project1, self.milestone1)
self.issue2 = create_issue(2, self.user2, self.project1, self.milestone1)
self.issue3 = create_issue(3, self.user2, self.project1)
self.project2 = create_project(2, self.user4)
self.milestone2 = create_milestone(2, self.user4, self.project2)
self.issue4 = create_issue(4, self.user4, self.project2)
mail.outbox = []
def test_list_issues_by_anon(self):
response = self.client.get(reverse("issues-list"))
self.assertEqual(response.status_code, 401)
def test_list_issues_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-list"))
self.assertEqual(response.status_code, 200)
issues_list = response.data
self.assertEqual(len(issues_list), 3)
self.client.logout()
def test_list_issues_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-list"))
self.assertEqual(response.status_code, 200)
issues_list = response.data
self.assertEqual(len(issues_list), 3)
self.client.logout()
def test_list_issues_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-list"))
self.assertEqual(response.status_code, 200)
issues_list = response.data
self.assertEqual(len(issues_list), 3)
self.client.logout()
def test_list_issues_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-list"))
self.assertEqual(response.status_code, 200)
issues_list = response.data
self.assertEqual(len(issues_list), 1)
self.client.logout()
def test_view_issue_by_anon(self):
response = self.client.get(reverse("issues-detail", args=(self.issue1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_issue_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-detail", args=(self.issue1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_issue_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-detail", args=(self.issue1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_issue_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-detail", args=(self.issue1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_issue_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("issues-detail", args=(self.issue1.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_issue_by_anon(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Issue.objects.all().count(), 4)
def test_create_issue_by_project_owner(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Issue.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_issue_by_project_owner_with_wron_project(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project2.id,
"status": self.project2.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_project_owner_with_wron_milestone(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"milestone": self.milestone2.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_project_owner_with_wron_status(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project2.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_project_owner_with_wron_severity(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project2.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_project_owner_with_wron_priority(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project2.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_project_owner_with_wron_type(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project2.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_membership(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Issue.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_issue_by_membership_with_wron_project(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project2.id,
"status": self.project2.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_membership_with_wron_milestone(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"milestone": self.milestone2.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_membership_with_wron_status(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project2.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_membership_with_wron_severity(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project2.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_membership_with_wron_priority(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project2.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_membership_with_wron_type(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project2.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_create_issue_by_no_membership(self):
data = {
"subject": "Test Issue",
"description": "A Test Issue example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.issue_statuses.all()[1].id,
"severity": self.project1.severities.all()[1].id,
"priority": self.project1.priorities.all()[1].id,
"type": self.project1.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.post(
reverse("issues-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_anon(self):
data = {
"subject": "Edited test issue",
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.issue1.subject)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Issue.objects.all().count(), 4)
def test_edit_issue_by_project_owner(self):
data = {
"subject": "Modified issue subject",
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.issue1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(Issue.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_issue_by_project_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_project_owner_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_project_owner_with_wron_status(self):
data = {
"status": self.project2.issue_statuses.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_project_owner_with_wron_severity(self):
data = {
"severity": self.project2.severities.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_project_owner_with_wron_priority(self):
data = {
"priority": self.project2.priorities.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_project_owner_with_wron_type(self):
data = {
"type": self.project2.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_owner(self):
data = {
"subject": "Modified issue subject",
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.issue1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(Issue.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_issue_by_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_owner_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_owner_with_wron_status(self):
data = {
"status": self.project2.issue_statuses.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_owner_with_wron_severity(self):
data = {
"severity": self.project2.severities.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_owner_with_wron_priority(self):
data = {
"priority": self.project2.priorities.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_owner_with_wron_type(self):
data = {
"type": self.project2.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_membership(self):
data = {
"subject": "Modified issue subject",
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.issue1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(Issue.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_issue_by_membership_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_membership_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_membership_with_wron_status(self):
data = {
"status": self.project2.issue_statuses.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_membership_with_wron_severity(self):
data = {
"severity": self.project2.severities.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_membership_with_wron_priority(self):
data = {
"priority": self.project2.priorities.all()[1].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_membership_with_wron_type(self):
data = {
"type": self.project2.issue_types.all()[0].id
}
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_edit_issue_by_no_membership(self):
data = {
"subject": "Modified issue subject",
}
self.assertEqual(Issue.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.issue1.subject)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.patch(
reverse("issues-detail", args=(self.issue1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()
def test_delete_issue_by_ano(self):
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.delete(
reverse("issues-detail", args=(self.issue1.id,))
)
self.assertEqual(response.status_code, 401)
self.assertEqual(Issue.objects.all().count(), 4)
def test_delete_issue_by_project_owner(self):
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(
reverse("issues-detail", args=(self.issue1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Issue.objects.all().count(), 3)
self.client.logout()
def test_delete_issue_by_owner(self):
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.delete(
reverse("issues-detail", args=(self.issue1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Issue.objects.all().count(), 3)
self.client.logout()
def test_delete_issue_by_membership(self):
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(
reverse("issues-detail", args=(self.issue1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Issue.objects.all().count(), 3)
self.client.logout()
def test_delete_issue_by_no_membership(self):
self.assertEqual(Issue.objects.all().count(), 4)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.delete(
reverse("issues-detail", args=(self.issue1.id,))
)
self.assertEqual(response.status_code, 404)
self.assertEqual(Issue.objects.all().count(), 4)
self.client.logout()

View File

@ -1,31 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
def create_milestone(id, owner, project, save=True):
model = get_model("milestones", "Milestone")
instance = model(
name="Milestone {0}".format(id),
project=project,
owner=owner
)
if save:
instance.save()
return instance

View File

@ -1,422 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core import mail
from django.core.urlresolvers import reverse
from taiga.users.tests import create_user
from taiga.projects.tests import create_project, add_membership
from taiga.projects.milestones.models import Milestone
from . import create_milestone
class MilestonesTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json",]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.user4 = create_user(4)
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user2)
add_membership(self.project1, self.user3)
self.project2 = create_project(2, self.user4)
self.milestone1 = create_milestone(1, self.user2, self.project1)
self.milestone2 = create_milestone(2, self.user2, self.project1)
def test_list_milestones_by_anon(self):
response = self.client.get(reverse("milestones-list"))
self.assertEqual(response.status_code, 401)
def test_list_milestones_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-list"))
self.assertEqual(response.status_code, 200)
milestones_list = response.data
self.assertEqual(len(milestones_list), 2)
self.client.logout()
def test_list_milestones_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-list"))
self.assertEqual(response.status_code, 200)
milestones_list = response.data
self.assertEqual(len(milestones_list), 2)
self.client.logout()
def test_list_milestones_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-list"))
self.assertEqual(response.status_code, 200)
milestones_list = response.data
self.assertEqual(len(milestones_list), 2)
self.client.logout()
def test_list_milestones_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-list"))
self.assertEqual(response.status_code, 200)
milestones_list = response.data
self.assertEqual(len(milestones_list), 0)
self.client.logout()
def test_view_milestone_by_anon(self):
response = self.client.get(reverse("milestones-detail", args=(self.milestone1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_milestone_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-detail", args=(self.milestone1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_milestone_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-detail", args=(self.milestone1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_milestone_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-detail", args=(self.milestone1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_milestone_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("milestones-detail", args=(self.milestone1.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_milestone_by_anon(self):
data = {
"name": "Test Milestone",
"project": self.project1.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.post(
reverse("milestones-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Milestone.objects.all().count(), 2)
def test_create_milestone_by_project_owner(self):
data = {
"name": "Test Milestone",
"project": self.project1.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("milestones-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Milestone.objects.all().count(), 3)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_milestone_by_membership(self):
data = {
"name": "Test Milestone",
"project": self.project1.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("milestones-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Milestone.objects.all().count(), 3)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_milestone_by_membership_with_wron_project(self):
data = {
"name": "Test Milestone",
"project": self.project2.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("milestones-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()
def test_create_milestone_by_no_membership(self):
data = {
"name": "Test Milestone",
"project": self.project1.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.post(
reverse("milestones-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()
def test_edit_milestone_by_anon(self):
data = {
"name": "Edited test milestone",
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertNotEqual(data["name"], self.milestone1.name)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Milestone.objects.all().count(), 2)
def test_edit_milestone_by_project_owner(self):
data = {
"name": "Modified milestone name",
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertNotEqual(data["name"], self.milestone1.name)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["name"], response.data["name"])
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_milestone_by_project_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()
def test_edit_milestone_by_owner(self):
data = {
"name": "Modified milestone name",
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertNotEqual(data["name"], self.milestone1.name)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["name"], response.data["name"])
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_milestone_by_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()
def test_edit_milestone_by_membership(self):
data = {
"name": "Modified milestone name",
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertNotEqual(data["name"], self.milestone1.name)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["name"], response.data["name"])
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_milestone_by_membership_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()
def test_edit_milestone_by_no_membership(self):
data = {
"name": "Modified milestone name",
}
self.assertEqual(Milestone.objects.all().count(), 2)
self.assertNotEqual(data["name"], self.milestone1.name)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.patch(
reverse("milestones-detail", args=(self.milestone1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()
def test_delete_milestone_by_ano(self):
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.delete(
reverse("milestones-detail", args=(self.milestone1.id,))
)
self.assertEqual(response.status_code, 401)
self.assertEqual(Milestone.objects.all().count(), 2)
def test_delete_milestone_by_project_owner(self):
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(
reverse("milestones-detail", args=(self.milestone1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Milestone.objects.all().count(), 1)
self.client.logout()
def test_delete_milestone_by_owner(self):
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.delete(
reverse("milestones-detail", args=(self.milestone1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Milestone.objects.all().count(), 1)
self.client.logout()
def test_delete_milestone_by_membership(self):
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(
reverse("milestones-detail", args=(self.milestone1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Milestone.objects.all().count(), 1)
self.client.logout()
def test_delete_milestone_by_no_membership(self):
self.assertEqual(Milestone.objects.all().count(), 2)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.delete(
reverse("milestones-detail", args=(self.milestone1.id,))
)
self.assertEqual(response.status_code, 404)
self.assertEqual(Milestone.objects.all().count(), 2)
self.client.logout()

View File

@ -1 +0,0 @@

View File

@ -1,21 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from taiga.projects.mixins.blocked import BlockedMixin
class BlockedFoo(BlockedMixin):
pass

View File

@ -1,78 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django import test
from .foo.models import BlockedFoo
class BlockedMixinModelTestCase(test.TestCase):
def test_block_item_without_note(self):
obj = BlockedFoo.objects.create()
self.assertEqual(BlockedFoo.objects.all().count(), 1)
self.assertFalse(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")
obj.is_blocked = True
obj.save()
self.assertTrue(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")
def test_block_item_with_note(self):
obj = BlockedFoo.objects.create()
self.assertEqual(BlockedFoo.objects.all().count(), 1)
self.assertFalse(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")
obj.is_blocked = True
obj.blocked_note = "Test note"
obj.save()
self.assertTrue(obj.is_blocked)
self.assertEqual(obj.blocked_note, "Test note")
def test_unblock_item_withou_note(self):
obj = BlockedFoo.objects.create(is_blocked=True)
self.assertEqual(BlockedFoo.objects.all().count(), 1)
self.assertTrue(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")
obj.is_blocked = False
obj.save()
self.assertFalse(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")
def test_unblock_item_with_note(self):
obj = BlockedFoo.objects.create(is_blocked=True, blocked_note="Test note")
self.assertEqual(BlockedFoo.objects.all().count(), 1)
self.assertTrue(obj.is_blocked)
self.assertEqual(obj.blocked_note, "Test note")
obj.is_blocked = False
obj.save()
self.assertFalse(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")
def test_unblock_item_with_new_note(self):
obj = BlockedFoo.objects.create(is_blocked=True, blocked_note="Test note")
self.assertEqual(BlockedFoo.objects.all().count(), 1)
self.assertTrue(obj.is_blocked)
self.assertEqual(obj.blocked_note, "Test note")
obj.is_blocked = False
obj.blocked_note = "New test note "
obj.save()
self.assertFalse(obj.is_blocked)
self.assertEqual(obj.blocked_note, "")

View File

@ -1,36 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
def create_task(id, owner, project, milestone=None, user_story=None, save=True):
model = get_model("tasks", "Task")
instance = model(
subject="Task {0}".format(id),
description="The Task description.",
project=project,
milestone=milestone,
user_story=user_story,
status=project.task_statuses.all()[0],
owner=owner
)
if save:
instance.save()
return instance

View File

@ -1,777 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core import mail
from django.core.urlresolvers import reverse
from taiga.users.tests import create_user
from taiga.projects.tests import create_project, add_membership
from taiga.projects.milestones.tests import create_milestone
from taiga.projects.userstories.tests import create_userstory
from taiga.projects.tasks.models import Task
from . import create_task
class TasksTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1) # Project owner
self.user2 = create_user(2) # Owner
self.user3 = create_user(3) # Membership
self.user4 = create_user(4) # No Membership
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user2)
add_membership(self.project1, self.user3)
self.milestone1 = create_milestone(1, self.user2, self.project1)
self.userstory1 = create_userstory(1, self.user2, self.project1, self.milestone1)
self.userstory2 = create_userstory(2, self.user2, self.project1, self.milestone1)
self.userstory3 = create_userstory(3, self.user2, self.project1)
self.task1 = create_task(1, self.user2, self.project1, None, self.userstory1)
self.task2 = create_task(2, self.user3, self.project1, None, self.userstory1)
self.task3 = create_task(3, self.user2, self.project1, None, self.userstory2)
self.task4 = create_task(4, self.user3, self.project1, self.milestone1)
self.project2 = create_project(2, self.user4)
self.milestone2 = create_milestone(2, self.user4, self.project2)
self.userstory4 = create_userstory(4, self.user4, self.project2)
self.task5 = create_task(5, self.user4, self.project2, self.milestone2)
def test_list_tasks_by_anon(self):
response = self.client.get(reverse("tasks-list"))
self.assertEqual(response.status_code, 401)
def test_list_tasks_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-list"), HTTP_X_DISABLE_PAGINATION=True)
self.assertEqual(response.status_code, 200)
tasks_list = response.data
self.assertEqual(len(tasks_list), 4)
response = self.client.get(reverse("tasks-list"), {"page": 2},
HTTP_X_DISABLE_PAGINATION=True)
self.assertEqual(response.status_code, 200)
tasks_list = response.data
self.assertEqual(len(tasks_list), 4)
self.client.logout()
def test_list_tasks_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-list"))
self.assertEqual(response.status_code, 200)
tasks_list = response.data
self.assertEqual(len(tasks_list), 4)
self.client.logout()
def test_list_tasks_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-list"))
self.assertEqual(response.status_code, 200)
tasks_list = response.data
self.assertEqual(len(tasks_list), 4)
self.client.logout()
def test_list_tasks_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-list"))
self.assertEqual(response.status_code, 200)
tasks_list = response.data
self.assertEqual(len(tasks_list), 1)
self.client.logout()
def test_view_task_by_anon(self):
response = self.client.get(reverse("tasks-detail", args=(self.task1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_task_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-detail", args=(self.task1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_task_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-detail", args=(self.task1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_task_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("tasks-detail", args=(self.task1.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_task_by_anon(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Task.objects.all().count(), 5)
def test_create_task_by_project_owner(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Task.objects.all().count(), 6)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_task_by_project_owner_with_wron_project(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project2.id,
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_project_owner_with_wron_milestone(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"milestone": self.milestone2.id,
"status": self.project1.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_project_owner_with_wron_userstory(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"user_story": self.userstory4.id,
"status": self.project1.task_statuses.all()[1].id,
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_project_owner_with_wron_status(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_membership(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Task.objects.all().count(), 6)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_task_by_membership_with_wron_project(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project2.id,
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_membership_with_wron_milestone(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"milestone": self.milestone2.id,
"status": self.project1.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_membership_with_wron_userstory(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"user_story": self.userstory4.id,
"status": self.project1.task_statuses.all()[1].id,
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_membership_with_wron_status(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_create_task_by_no_membership(self):
data = {
"subject": "Test Task",
"description": "A Test Task example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.post(
reverse("tasks-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_anon(self):
data = {
"subject": "Edited test task",
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertNotEqual(data["subject"], self.task1.subject)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Task.objects.all().count(), 5)
def test_edit_task_by_project_owner(self):
data = {
"subject": "Modified task subject",
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertNotEqual(data["subject"], self.task1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(Task.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_task_by_project_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_project_owner_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["milestone"], self.milestone1.id)
self.assertEqual(Task.objects.all().count(), 5)
data = {
"milestone": self.milestone2.id,
"user_story": None
}
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_project_owner_with_wron_userstory(self):
data = {
"user_story": self.userstory4.id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_project_owner_with_wron_status(self):
data = {
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_owner(self):
data = {
"subject": "Modified task subject",
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertNotEqual(data["subject"], self.task1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(Task.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_task_by_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_owner_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["milestone"], self.milestone1.id)
self.assertEqual(Task.objects.all().count(), 5)
data = {
"milestone": self.milestone2.id,
"user_story": None
}
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_owner_with_wron_userstory(self):
data = {
"user_story": self.userstory4.id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_owner_with_wron_status(self):
data = {
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_membership(self):
data = {
"subject": "Modified task subject",
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertNotEqual(data["subject"], self.task1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(Task.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_task_by_membership_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_membership_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["milestone"], self.milestone1.id)
self.assertEqual(Task.objects.all().count(), 5)
data = {
"milestone": self.milestone2.id,
"user_story": None
}
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_membership_with_wron_userstory(self):
data = {
"user_story": self.userstory4.id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_membership_with_wron_status(self):
data = {
"status": self.project2.task_statuses.all()[1].id
}
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_edit_task_by_no_membership(self):
data = {
"subject": "Modified task subject",
}
self.assertEqual(Task.objects.all().count(), 5)
self.assertNotEqual(data["subject"], self.task1.subject)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.patch(
reverse("tasks-detail", args=(self.task1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()
def test_delete_task_by_ano(self):
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.delete(
reverse("tasks-detail", args=(self.task1.id,))
)
self.assertEqual(response.status_code, 401)
self.assertEqual(Task.objects.all().count(), 5)
def test_delete_task_by_project_owner(self):
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(
reverse("tasks-detail", args=(self.task1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Task.objects.all().count(), 4)
self.client.logout()
def test_delete_task_by_owner(self):
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.delete(
reverse("tasks-detail", args=(self.task1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Task.objects.all().count(), 4)
self.client.logout()
def test_delete_task_by_membership(self):
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(
reverse("tasks-detail", args=(self.task1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(Task.objects.all().count(), 4)
self.client.logout()
def test_delete_task_by_no_membership(self):
self.assertEqual(Task.objects.all().count(), 5)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.delete(
reverse("tasks-detail", args=(self.task1.id,))
)
self.assertEqual(response.status_code, 404)
self.assertEqual(Task.objects.all().count(), 5)
self.client.logout()

View File

@ -1,47 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
from taiga.domains import get_active_domain
def create_project(id, owner, save=True):
model = get_model("projects", "Project")
instance = model(
name="Project {0}".format(id),
description="This is a test project",
owner=owner,
total_story_points=id,
domain=get_active_domain()
)
if save:
instance.save()
return instance
def add_membership(project, user, role_slug="back"):
model = get_model("users", "Role")
role = model.objects.get(slug=role_slug, project=project)
model = get_model("projects", "Membership")
instance = model.objects.create(
project=project,
user=user,
role=role
)
return instance

View File

@ -1,845 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core.urlresolvers import reverse
from django.core import mail
from django.db.models import get_model
from taiga.users.tests import create_user
from taiga.projects.models import Project, Membership, ProjectTemplate
from taiga.domains.models import Domain
from . import create_project
from . import add_membership
class ProfileTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1, is_superuser=True)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.project1 = create_project(1, self.user1)
self.project2 = create_project(2, self.user1)
self.project3 = create_project(3, self.user2)
add_membership(self.project1, self.user3, "back")
add_membership(self.project3, self.user3, "back")
add_membership(self.project3, self.user2, "back")
def test_list_users(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("users-list"))
self.assertEqual(response.status_code, 200)
users_list = response.data
self.assertEqual(len(users_list), 1)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("users-list"))
self.assertEqual(response.status_code, 200)
users_list = response.data
self.assertEqual(len(users_list), 3)
def test_update_users(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
data = {"full_name": "Foo Bar"}
response = self.client.patch(
reverse("users-detail", args=[self.user2.pk]),
content_type="application/json",
data=json.dumps(data))
self.assertEqual(response.status_code, 404)
def test_update_users_self(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
data = {"full_name": "Foo Bar"}
response = self.client.patch(
reverse("users-detail", args=[self.user3.pk]),
content_type="application/json",
data=json.dumps(data))
self.assertEqual(response.status_code, 200)
def test_update_users_superuser(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
data = {"full_name": "Foo Bar"}
response = self.client.patch(
reverse("users-detail", args=[self.user3.pk]),
content_type="application/json",
data=json.dumps(data))
self.assertEqual(response.status_code, 200)
def test_delete_users(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
data = {"full_name": "Foo Bar"}
response = self.client.delete(
reverse("users-detail", args=[self.user2.pk]))
self.assertEqual(response.status_code, 404)
def test_delete_users_self(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
data = {"full_name": "Foo Bar"}
response = self.client.delete(
reverse("users-detail", args=[self.user3.pk]))
self.assertEqual(response.status_code, 204)
def test_delete_users_superuser(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
data = {"full_name": "Foo Bar"}
response = self.client.delete(
reverse("users-detail", args=[self.user3.pk]))
self.assertEqual(response.status_code, 204)
def test_password_recovery(self):
url = reverse("users-password-recovery")
data = {"username": self.user1.username}
response = self.client.post(url, data=json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(len(mail.outbox), 1)
self.assertNotEqual(len(mail.outbox[0].body), 0)
def test_users_change_password_from_recovery(self):
self.user1.token = "1111-1111-1111-1111"
self.user1.save()
url = reverse("users-change-password-from-recovery")
data = {"token": self.user1.token, "password": "111111"}
response = self.client.post(url, data=json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 204)
user = get_model("users", "User").objects.get(pk=self.user1.pk)
self.assertTrue(user.check_password("111111"))
def test_users_change_password(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
url = reverse("users-change-password")
data = {"password": "111111"}
response = self.client.post(url, data=json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 204)
user = get_model("users", "User").objects.get(pk=self.user1.pk)
self.assertTrue(user.check_password("111111"))
class ProjectsTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.user3 = create_user(4)
self.project1 = create_project(1, self.user1)
self.project2 = create_project(2, self.user1)
self.project3 = create_project(3, self.user2)
self.project4 = create_project(4, self.user2)
add_membership(self.project1, self.user3, "back")
add_membership(self.project3, self.user3, "back")
self.dev_role1 = get_model("users", "Role").objects.get(slug="back", project=self.project1)
self.dev_role2 = get_model("users", "Role").objects.get(slug="back", project=self.project2)
self.dev_role3 = get_model("users", "Role").objects.get(slug="back", project=self.project3)
self.dev_role4 = get_model("users", "Role").objects.get(slug="back", project=self.project4)
def test_send_invitations_01(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
url = reverse("memberships-list")
data = {"role": self.dev_role4.id,
"email": "pepe@pepe.com",
"project": self.project4.id}
response = self.client.post(url, data=json.dumps(data), content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(self.project4.memberships.count(), 2)
self.assertEqual(len(mail.outbox), 1)
self.assertNotEqual(len(mail.outbox[0].body), 0)
def test_send_invitations_02(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
url = reverse("memberships-list")
data = {"role": self.dev_role4.id,
"email": "pepe@pepe.com",
"project": self.project4.id}
response = self.client.post(url, data=json.dumps(data), content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(self.project4.memberships.count(), 2)
self.assertEqual(len(mail.outbox), 1)
self.assertNotEqual(len(mail.outbox[0].body), 0)
response = self.client.post(url, data=json.dumps(data), content_type="application/json")
self.assertEqual(self.project4.memberships.count(), 2)
self.assertEqual(response.status_code, 400)
self.assertEqual(len(mail.outbox), 1)
self.assertNotEqual(len(mail.outbox[0].body), 0)
def test_send_invitations_03(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
url = reverse("memberships-list")
data = {"role": self.dev_role3.id,
"email": self.user3.email,
"project": self.project3.id}
response = self.client.post(url, data=json.dumps(data), content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertEqual(len(mail.outbox), 0)
def test_list_projects_by_anon(self):
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 401)
def test_list_projects_by_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 2)
self.client.logout()
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 2)
self.client.logout()
def test_list_projects_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 2)
self.client.logout()
def test_view_project_by_anon(self):
response = self.client.get(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_project_by_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("projects-detail", args=(self.project2.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_project_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("projects-detail", args=(self.project3.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_project_by_not_membership(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("projects-detail", args=(self.project3.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_project_by_anon(self):
data = {
"name": "Test Project",
"description": "A new Test Project",
"total_story_points": 10
}
self.assertEqual(Project.objects.all().count(), 4)
response = self.client.post(
reverse("projects-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Project.objects.all().count(), 4)
def test_create_project_by_auth(self):
data = {
"name": "Test Project",
"description": "A new Test Project",
"total_story_points": 10
}
self.assertEqual(Project.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(reverse("projects-list"), json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(Project.objects.all().count(), 5)
self.client.logout()
def test_edit_project_by_anon(self):
data = {
"description": "Edited project description",
}
self.assertEqual(Project.objects.all().count(), 4)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(Project.objects.all().count(), 4)
def test_edit_project_by_owner(self):
data = {
"description": "Modified project description",
}
self.assertEqual(Project.objects.all().count(), 4)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["description"], response.data["description"])
self.assertEqual(Project.objects.all().count(), 4)
self.client.logout()
def test_edit_project_by_membership(self):
data = {
"description": "Edited project description",
}
self.assertEqual(Project.objects.all().count(), 4)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["description"], response.data["description"])
self.assertEqual(Project.objects.all().count(), 4)
self.client.logout()
def test_edit_project_by_not_membership(self):
data = {
"description": "Edited project description",
}
self.assertEqual(Project.objects.all().count(), 4)
self.assertNotEqual(data["description"], self.project1.description)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("projects-detail", args=(self.project1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(Project.objects.all().count(), 4)
self.client.logout()
def test_delete_project_by_anon(self):
self.assertEqual(Project.objects.all().count(), 4)
response = self.client.delete(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 401)
self.assertEqual(Project.objects.all().count(), 4)
def test_delete_project_by_owner(self):
self.assertEqual(Project.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 204)
self.assertEqual(Project.objects.all().count(), 3)
self.client.logout()
def test_delete_project_by_membership(self):
self.assertEqual(Project.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(reverse("projects-detail", args=(self.project1.id,)))
self.assertEqual(response.status_code, 403)
self.assertEqual(Project.objects.all().count(), 4)
self.client.logout()
def test_delete_project_by_not_membership(self):
self.assertEqual(Project.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(reverse("projects-detail", args=(self.project3.id,)))
self.assertEqual(response.status_code, 404)
self.assertEqual(Project.objects.all().count(), 4)
self.client.logout()
class ProjectTemplatesTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.domain = Domain.objects.all()[0]
self.domain.owner = self.user1
def test_list_project_templates_by_anon(self):
response = self.client.get(reverse("project-templates-list"))
self.assertEqual(response.status_code, 401)
def test_list_project_templates_by_domain_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("project-templates-list"))
self.assertEqual(response.status_code, 200)
projects_list = response.data
self.assertEqual(len(projects_list), 2)
self.client.logout()
def test_list_projects_by_not_domain_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("project-templates-list"))
self.assertEqual(response.status_code, 403)
def test_view_project_template_by_anon(self):
response = self.client.get(reverse("project-templates-detail", args=(1,)))
self.assertEqual(response.status_code, 401)
def test_view_project_template_by_domain_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("project-templates-detail", args=(1,)))
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse("project-templates-detail", args=(2,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_project_template_by_not_domain_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("project-templates-detail", args=(1,)))
self.assertEqual(response.status_code, 403)
response = self.client.get(reverse("project-templates-detail", args=(2,)))
self.assertEqual(response.status_code, 403)
self.client.logout()
def test_create_project_template_by_anon(self):
data = {
"name": "Test Project Template",
"slug": "test-project-template",
"description": "A new Test Project Template",
}
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.post(
reverse("project-templates-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
data = {
"name": "Test Project Template 2",
"slug": "test-project-template-2",
"description": "A new Test Project Template",
"domain": 100,
}
response = self.client.post(
reverse("project-templates-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
def test_create_project_template_by_domain_owner(self):
data = {
"name": "Test Project Template",
"slug": "test-project-template",
"description": "A new Test Project Template",
"default_owner_role": "test",
}
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(reverse("project-templates-list"), json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
data = {
"name": "Test Project Template 2",
"slug": "test-project-template-2",
"description": "A new Test Project Template",
"default_owner_role": "test",
"domain": 100,
}
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(reverse("project-templates-list"), json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(ProjectTemplate.objects.all().count(), 4)
template = ProjectTemplate.objects.order_by('-created_date')[0]
self.assertEqual(template.domain.id, 1)
self.client.logout()
ProjectTemplate.objects.order_by("created_date")[0].delete()
ProjectTemplate.objects.order_by("created_date")[1].delete()
def test_create_project_template_by_not_domain_owner(self):
data = {
"name": "Test Project Template",
"slug": "test-project-template",
"description": "A new Test Project Template",
}
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("project-templates-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
data = {
"name": "Test Project Template 2",
"slug": "test-project-template-2",
"description": "A new Test Project Template",
"domain": 100
}
response = self.client.post(
reverse("project-templates-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
self.client.logout()
def test_edit_project_template_by_anon(self):
template = ProjectTemplate.objects.create(
name="Test Project Template with domain",
slug="test-project-template-with-domain",
description="A new Test Project Template with domain",
domain_id=1
)
data = {"description": "A new Test Project Template", }
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.patch(
reverse("project-templates-detail", args=(1,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
response = self.client.patch(
reverse("project-templates-detail", args=(template.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
template.delete()
def test_edit_project_template_by_domain_owner(self):
template = ProjectTemplate.objects.create(
name="Test Project Template with domain",
slug="test-project-template-with-domain",
description="A new Test Project Template with domain",
domain_id=1
)
data = {"description": "A new Test Project Template", }
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.patch(
reverse("project-templates-detail", args=(1,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
response = self.client.patch(
reverse("project-templates-detail", args=(template.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
template.delete()
self.client.logout()
def test_edit_project_template_by_not_domain_owner(self):
template = ProjectTemplate.objects.create(
name="Test Project Template with domain",
slug="test-project-template-with-domain",
description="A new Test Project Template with domain",
domain_id=1
)
data = {"description": "A new Test Project Template", }
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.patch(
reverse("project-templates-detail", args=(1,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
response = self.client.patch(
reverse("project-templates-detail", args=(template.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
template.delete()
self.client.logout()
def test_delete_project_template_by_anon(self):
template = ProjectTemplate.objects.create(
name="Test Project Template with domain",
slug="test-project-template-with-domain",
description="A new Test Project Template with domain",
domain_id=1
)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.delete(reverse("projects-detail", args=(1,)))
self.assertEqual(response.status_code, 401)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.delete(reverse("projects-detail", args=(template.id,)))
self.assertEqual(response.status_code, 401)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
template.delete()
def test_delete_project_template_by_domain_owner(self):
template = ProjectTemplate.objects.create(
name="Test Project Template with domain",
slug="test-project-template-with-domain",
description="A new Test Project Template with domain",
domain_id=1
)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(reverse("project-templates-detail", args=(1,)))
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.delete(reverse("project-templates-detail", args=(template.id,)))
self.assertEqual(response.status_code, 204)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
template.delete()
self.client.logout()
def test_delete_project_template_by_not_domain_owner(self):
template = ProjectTemplate.objects.create(
name="Test Project Template with domain",
slug="test-project-template-with-domain",
description="A new Test Project Template with domain",
domain_id=1
)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.delete(reverse("project-templates-detail", args=(1,)))
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
response = self.client.delete(reverse("project-templates-detail", args=(template.id,)))
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
template.delete()
self.client.logout()
def test_create_project_template_from_project_by_anon(self):
data = {
"project_id": 1,
"template_name": "Test",
"template_description": "Test"
}
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 401)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 401)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
def test_create_project_template_from_project_by_domain_owner(self):
project = create_project(1, self.user1)
data = {
"project_id": project.id,
"template_description": "Test"
}
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 400)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
data = {
"template_name": "Test",
"template_description": "Test"
}
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 400)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
data = {
"project_id": project.id,
"template_name": "Test",
"template_description": "Test"
}
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 201)
self.assertEqual(ProjectTemplate.objects.all().count(), 3)
ProjectTemplate.objects.get(slug="test").delete()
self.client.logout()
def test_create_project_template_from_project_by_not_domain_owner(self):
data = {
"project_id": 1,
"template_name": "Test",
"template_description": "Test"
}
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
response = self.client.post(reverse("project-templates-create-from-project"), data)
self.assertEqual(response.status_code, 403)
self.assertEqual(ProjectTemplate.objects.all().count(), 2)
self.client.logout()

View File

@ -1,77 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core.urlresolvers import reverse
from django.core import mail
from django.db.models import get_model
from django.conf import settings
from taiga.users.tests import create_user
from taiga.projects.models import Project, Membership, ProjectTemplate, Role
from taiga.domains.models import Domain
from . import create_project
from . import add_membership
class ProjectTemplateModelTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user = create_user(1)
self.domain = Domain.objects.all()[0]
self.template = ProjectTemplate.objects.get(slug="scrum")
def test_apply_to_not_saved_project(self):
not_saved_project = Project()
self.assertRaises(Exception, self.template.apply_to_project, (not_saved_project,))
def test_apply_to_saved_project(self):
# Post-save apply the default template
project = Project.objects.create(name="Test", slug="test", owner=self.user)
self.assertEqual(project.creation_template.slug, settings.DEFAULT_PROJECT_TEMPLATE)
self.assertEqual(project.memberships.filter(user=self.user).count(), 1)
def test_load_data_from_project_with_invalid_object(self):
self.assertRaises(Exception, self.template.load_data_from_project, (None,))
def test_load_data_from_project_not_defaults(self):
project = Project.objects.create(name="Test", slug="test", owner=self.user)
project.default_points = None
project.default_us_status = None
project.default_task_status = None
project.default_issue_status = None
project.default_issue_type = None
project.default_priority = None
project.default_severity = None
membership = project.memberships.get(user=self.user)
membership.role = Role.objects.get(slug="ux")
membership.save()
template = ProjectTemplate()
template.load_data_from_project(project)
self.assertIsNone(template.default_options["points"])
self.assertIsNone(template.default_options["us_status"])
self.assertIsNone(template.default_options["task_status"])
self.assertIsNone(template.default_options["issue_status"])
self.assertIsNone(template.default_options["issue_type"])
self.assertIsNone(template.default_options["priority"])
self.assertIsNone(template.default_options["severity"])
self.assertEqual(template.default_owner_role, "ux")

View File

@ -1,220 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core.urlresolvers import reverse
from django.core import mail
from django.db.models import get_model
from taiga.users.tests import create_user
from taiga.projects.models import Project, Membership
from taiga.projects.issues.tests import create_issue
from taiga.projects.tasks.tests import create_task
from . import create_project
from . import add_membership
class AllProjectEventsNotificationsTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.user4 = create_user(4)
self.user5 = create_user(5)
self.user1.notify_level = "all_owned_projects"
self.user1.save()
self.user2.notify_level = "all_owned_projects"
self.user2.save()
self.user3.notify_level = "all_owned_projects"
self.user3.save()
self.user4.notify_level = "all_owned_projects"
self.user4.save()
self.user5.notify_level = "all_owned_projects"
self.user5.save()
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user1, "back")
add_membership(self.project1, self.user2, "back")
add_membership(self.project1, self.user3, "back")
add_membership(self.project1, self.user4, "back")
add_membership(self.project1, self.user5, "back")
def test_issue(self):
issue = create_issue(1, self.user1, self.project1)
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user2, self.user3, self.user4, self.user5]
self.assertEqual(notified,set(expected_notified))
issue.delete()
def test_issue_with_owner_notification(self):
self.user1.notify_changes_by_me = True
self.user1.save()
issue = create_issue(1, self.user1, self.project1)
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user1, self.user2, self.user3, self.user4, self.user5]
self.assertEqual(notified,set(expected_notified))
issue.delete()
self.user1.notify_changes_by_me = False
self.user1.save()
class OnlyAssigendNotificationsTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.user4 = create_user(4)
self.user5 = create_user(5)
self.user1.notify_level = "only_assigned"
self.user1.save()
self.user2.notify_level = "only_assigned"
self.user2.save()
self.user3.notify_level = "only_assigned"
self.user3.save()
self.user4.notify_level = "only_assigned"
self.user4.save()
self.user5.notify_level = "only_assigned"
self.user5.save()
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user1, "back")
add_membership(self.project1, self.user2, "back")
add_membership(self.project1, self.user3, "back")
add_membership(self.project1, self.user4, "back")
add_membership(self.project1, self.user5, "back")
def test_issue(self):
issue = create_issue(1, self.user1, self.project1)
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = []
self.assertEqual(notified,set(expected_notified))
issue.assigned_to = self.user1
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = []
self.assertEqual(notified,set(expected_notified))
issue.assigned_to = self.user2
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user2]
self.assertEqual(notified,set(expected_notified))
issue.delete()
def test_issue_with_owner_notification(self):
self.user1.notify_changes_by_me = True
self.user1.save()
issue = create_issue(1, self.user1, self.project1)
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user1]
self.assertEqual(notified,set(expected_notified))
issue.assigned_to = self.user1
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user1]
self.assertEqual(notified,set(expected_notified))
issue.assigned_to = self.user2
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user1, self.user2]
self.assertEqual(notified,set(expected_notified))
issue.delete()
self.user1.notify_changes_by_me = False
self.user1.save()
class OnlyOwnerNotificationsTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.user4 = create_user(4)
self.user5 = create_user(5)
self.user1.notify_level = "only_owner"
self.user1.save()
self.user2.notify_level = "only_owner"
self.user2.save()
self.user3.notify_level = "only_owner"
self.user3.save()
self.user4.notify_level = "only_owner"
self.user4.save()
self.user5.notify_level = "only_owner"
self.user5.save()
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user1, "back")
add_membership(self.project1, self.user2, "back")
add_membership(self.project1, self.user3, "back")
add_membership(self.project1, self.user4, "back")
add_membership(self.project1, self.user5, "back")
def test_issue(self):
issue = create_issue(1, self.user1, self.project1)
notified = issue.get_watchers_to_notify(self.user2)
expected_notified = [self.user1]
self.assertEqual(notified,set(expected_notified))
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = []
self.assertEqual(notified,set(expected_notified))
issue.owner = self.user2
notified = issue.get_watchers_to_notify(self.user2)
expected_notified = []
self.assertEqual(notified,set(expected_notified))
issue.delete()
def test_issue_with_owner_notification(self):
self.user1.notify_changes_by_me = True
self.user1.save()
issue = create_issue(1, self.user1, self.project1)
notified = issue.get_watchers_to_notify(self.user2)
expected_notified = [self.user1]
self.assertEqual(notified,set(expected_notified))
notified = issue.get_watchers_to_notify(self.user1)
expected_notified = [self.user1]
self.assertEqual(notified,set(expected_notified))
issue.owner = self.user2
notified = issue.get_watchers_to_notify(self.user2)
expected_notified = []
self.assertEqual(notified,set(expected_notified))
issue.delete()
self.user1.notify_changes_by_me = False
self.user1.save()

View File

@ -1,35 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
def create_userstory(id, owner, project, milestone=None, save=True):
model = get_model("userstories", "UserStory")
instance = model(
subject="User Story {0}".format(id),
description="The US description.",
project=project,
milestone=milestone,
status=project.us_statuses.all()[0],
owner=owner
)
if save:
instance.save()
return instance

View File

@ -1,746 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django import test
from django.core import mail
from django.core.urlresolvers import reverse
from taiga.users.tests import create_user
from taiga.projects.tests import create_project, add_membership
from taiga.projects.milestones.tests import create_milestone
from taiga.projects.userstories.models import UserStory
from taiga.projects.issues.tests import create_issue
from . import create_userstory
import json
class UserStoriesTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1) # Project owner
self.user2 = create_user(2) # Owner
self.user3 = create_user(3) # Membership
self.user4 = create_user(4) # No Membership
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user2)
add_membership(self.project1, self.user3)
self.milestone1 = create_milestone(1, self.user2, self.project1)
self.userstory1 = create_userstory(1, self.user2, self.project1, self.milestone1)
self.userstory2 = create_userstory(2, self.user2, self.project1, self.milestone1)
self.userstory3 = create_userstory(3, self.user2, self.project1)
self.project2 = create_project(2, self.user4)
self.milestone2 = create_milestone(2, self.user4, self.project2)
self.userstory4 = create_userstory(4, self.user4, self.project2)
mail.outbox = []
def test_list_userstories_by_anon(self):
response = self.client.get(reverse("userstories-list"))
self.assertEqual(response.status_code, 401)
def test_list_userstories_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-list"))
self.assertEqual(response.status_code, 200)
userstories_list = response.data
self.assertEqual(len(userstories_list), 3)
self.client.logout()
def test_list_userstories_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-list"))
self.assertEqual(response.status_code, 200)
userstories_list = response.data
self.assertEqual(len(userstories_list), 3)
self.client.logout()
def test_list_userstories_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-list"))
self.assertEqual(response.status_code, 200)
userstories_list = response.data
self.assertEqual(len(userstories_list), 3)
self.client.logout()
def test_list_userstories_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-list"))
self.assertEqual(response.status_code, 200)
userstories_list = response.data
self.assertEqual(len(userstories_list), 1)
self.client.logout()
def test_view_userstory_by_anon(self):
response = self.client.get(reverse("userstories-detail", args=(self.userstory1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_userstory_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-detail", args=(self.userstory1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_userstory_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-detail", args=(self.userstory1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_userstory_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-detail", args=(self.userstory1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_userstory_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("userstories-detail", args=(self.userstory1.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_userstory_by_anon(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(UserStory.objects.all().count(), 4)
def test_create_userstory_by_project_owner(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(UserStory.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_userstory_by_project_owner_with_wron_project(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project2.id,
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_create_userstory_by_project_owner_with_wron_milestone(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone2.id,
"status": self.project1.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_create_userstory_by_project_owner_with_wron_status(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_create_userstory_by_membership(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(UserStory.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_userstory_by_membership_with_wron_project(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project2.id,
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_create_userstory_by_membership_with_wron_milestone(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone2.id,
"status": self.project1.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_create_userstory_by_membership_with_wron_status(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_create_userstory_by_no_membership(self):
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_anon(self):
data = {
"subject": "Edited test userstory",
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.userstory1.subject)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(UserStory.objects.all().count(), 4)
def test_edit_userstory_by_project_owner(self):
data = {
"subject": "Modified userstory subject",
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.userstory1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_userstory_by_project_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_project_owner_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_project_owner_with_wron_status(self):
data = {
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_owner(self):
data = {
"subject": "Modified userstory subject",
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.userstory1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_userstory_by_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_owner_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_owner_with_wron_status(self):
data = {
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_membership(self):
data = {
"subject": "Modified userstory subject",
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.userstory1.subject)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["subject"], response.data["subject"])
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_userstory_by_membership_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_membership_with_wron_milestone(self):
data = {
"milestone": self.milestone2.id,
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_membership_with_wron_status(self):
data = {
"status": self.project2.us_statuses.all()[1].id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_edit_userstory_by_no_membership(self):
data = {
"subject": "Modified userstory subject",
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertNotEqual(data["subject"], self.userstory1.subject)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.patch(
reverse("userstories-detail", args=(self.userstory1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
def test_delete_userstory_by_ano(self):
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.delete(
reverse("userstories-detail", args=(self.userstory1.id,))
)
self.assertEqual(response.status_code, 401)
self.assertEqual(UserStory.objects.all().count(), 4)
def test_delete_userstory_by_project_owner(self):
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(
reverse("userstories-detail", args=(self.userstory1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(UserStory.objects.all().count(), 3)
self.client.logout()
def test_delete_userstory_by_owner(self):
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.delete(
reverse("userstories-detail", args=(self.userstory1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(UserStory.objects.all().count(), 3)
self.client.logout()
def test_delete_userstory_by_membership(self):
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(
reverse("userstories-detail", args=(self.userstory1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(UserStory.objects.all().count(), 3)
self.client.logout()
def test_delete_userstory_by_no_membership(self):
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.delete(
reverse("userstories-detail", args=(self.userstory1.id,))
)
self.assertEqual(response.status_code, 404)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()
##########################################
def test_create_userstory_from_issue_by_anon(self):
issue = create_issue(1, self.user2, self.project1, self.milestone1)
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id,
"generated_from_issue": issue.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(UserStory.objects.all().count(), 4)
def test_create_userstory_from_issue_by_project_owner(self):
issue = create_issue(1, self.user2, self.project1, self.milestone1)
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id,
"generated_from_issue": issue.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(UserStory.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.assertEqual(response.data["origin_issue"]["subject"], issue.subject)
self.client.logout()
def test_create_userstory_from_issue_by_membership(self):
issue = create_issue(1, self.user2, self.project1, self.milestone1)
data = {
"subject": "Test UserStory creation from issue",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id,
"generated_from_issue": issue.id,
"issue_comment": "This is a test example",
"generated_from_issue": issue.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(UserStory.objects.all().count(), 5)
self.assertEqual(len(mail.outbox), 2)
self.assertEqual(response.data["origin_issue"]["subject"], issue.subject)
self.client.logout()
def test_create_userstory_from_issue_by_no_membership(self):
issue = create_issue(1, self.user2, self.project1, self.milestone1)
data = {
"subject": "Test UserStory",
"description": "A Test UserStory example description",
"project": self.project1.id,
"milestone": self.milestone1.id,
"status": self.project1.us_statuses.all()[1].id,
"generated_from_issue": issue.id
}
self.assertEqual(UserStory.objects.all().count(), 4)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.post(
reverse("userstories-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(UserStory.objects.all().count(), 4)
self.client.logout()

View File

@ -1,61 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from taiga.users.tests import create_user
from taiga.projects.tests import create_project
from .. import services
from .. import models
from . import create_userstory
class UserStoriesServiceTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1) # Project owner
self.project1 = create_project(1, self.user1)
def test_bulk_insert(self):
model = models.UserStory
self.assertEqual(model.objects.count(), 0)
service = services.UserStoriesService()
service.bulk_insert(self.project1, self.user1, "kk1\nkk2\n")
self.assertEqual(model.objects.count(), 2)
def test_bulk_order_update(self):
userstory1 = create_userstory(1, self.user1, self.project1)
userstory2 = create_userstory(2, self.user1, self.project1)
data = [
[userstory1.id, 20],
[userstory2.id, 30],
]
service = services.UserStoriesService()
service.bulk_update_order(self.project1, self.user1, data)
model = models.UserStory
userstory1 = model.objects.get(pk=userstory1.id)
userstory2 = model.objects.get(pk=userstory2.id)
self.assertEqual(userstory1.order, 20)
self.assertEqual(userstory2.order, 30)

View File

@ -1,32 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
def create_wiki_page(id, owner, project, save=True):
model = get_model("wiki", "WikiPage")
instance = model(
slug="wikipage-{0}".format(id),
content="WikiPage {0}".format(id),
project=project,
owner=owner
)
if save:
instance.save()
return instance

View File

@ -1,426 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from django import test
from django.core import mail
from django.core.urlresolvers import reverse
from taiga.users.tests import create_user
from taiga.projects.tests import create_project, add_membership
from taiga.projects.wiki.models import WikiPage
from . import create_wiki_page
class WikiPagesTestCase(test.TestCase):
fixtures = ["initial_domains.json", "initial_project_templates.json"]
def setUp(self):
self.user1 = create_user(1)
self.user2 = create_user(2)
self.user3 = create_user(3)
self.user4 = create_user(4)
self.project1 = create_project(1, self.user1)
add_membership(self.project1, self.user2)
add_membership(self.project1, self.user3)
self.project2 = create_project(2, self.user4)
self.wiki_page1 = create_wiki_page(1, self.user2, self.project1)
self.wiki_page2 = create_wiki_page(2, self.user2, self.project1)
def test_list_wiki_pages_by_anon(self):
response = self.client.get(reverse("wiki-list"))
self.assertEqual(response.status_code, 401)
def test_list_wiki_pages_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-list"))
self.assertEqual(response.status_code, 200)
wiki_pages_list = response.data
self.assertEqual(len(wiki_pages_list), 2)
self.client.logout()
def test_list_wiki_pages_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-list"))
self.assertEqual(response.status_code, 200)
wiki_pages_list = response.data
self.assertEqual(len(wiki_pages_list), 2)
self.client.logout()
def test_list_wiki_pages_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-list"))
self.assertEqual(response.status_code, 200)
wiki_pages_list = response.data
self.assertEqual(len(wiki_pages_list), 2)
self.client.logout()
def test_list_wiki_pages_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-list"))
self.assertEqual(response.status_code, 200)
wiki_pages_list = response.data
self.assertEqual(len(wiki_pages_list), 0)
self.client.logout()
def test_view_wiki_page_by_anon(self):
response = self.client.get(reverse("wiki-detail", args=(self.wiki_page1.id,)))
self.assertEqual(response.status_code, 401)
def test_view_wiki_page_by_project_owner(self):
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-detail", args=(self.wiki_page1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_wiki_page_by_owner(self):
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-detail", args=(self.wiki_page1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_wiki_page_by_membership(self):
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-detail", args=(self.wiki_page1.id,)))
self.assertEqual(response.status_code, 200)
self.client.logout()
def test_view_wiki_page_by_no_membership(self):
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.get(reverse("wiki-detail", args=(self.wiki_page1.id,)))
self.assertEqual(response.status_code, 404)
self.client.logout()
def test_create_wiki_page_by_anon(self):
data = {
"slug": "test-wiki-page",
"content": "Test WikiPage",
"project": self.project1.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.post(
reverse("wiki-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(WikiPage.objects.all().count(), 2)
def test_create_wiki_page_by_project_owner(self):
data = {
"slug": "test-wiki-page",
"content": "Test WikiPage",
"project": self.project1.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.post(
reverse("wiki-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(WikiPage.objects.all().count(), 3)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_wiki_page_by_membership(self):
data = {
"slug": "test-wiki-page",
"content": "Test WikiPage",
"project": self.project1.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("wiki-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 201)
self.assertEqual(WikiPage.objects.all().count(), 3)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_create_wiki_page_by_membership_with_wron_project(self):
data = {
"slug": "test-wiki-page",
"content": "Test WikiPage",
"project": self.project2.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.post(
reverse("wiki-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()
def test_create_wiki_page_by_no_membership(self):
data = {
"slug": "test-wiki-page",
"content": "Test WikiPage",
"project": self.project1.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.post(
reverse("wiki-list"),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()
def test_edit_wiki_page_by_anon(self):
data = {
"content": "Edited test wiki_page",
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertNotEqual(data["content"], self.wiki_page1.content)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 401)
self.assertEqual(WikiPage.objects.all().count(), 2)
def test_edit_wiki_page_by_project_owner(self):
data = {
"content": "Edited test wiki_page",
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertNotEqual(data["content"], self.wiki_page1.content)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["content"], response.data["content"])
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_wiki_page_by_project_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()
def test_edit_wiki_page_by_owner(self):
data = {
"content": "Edited test wiki_page",
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertNotEqual(data["content"], self.wiki_page1.content)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["content"], response.data["content"])
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_wiki_page_by_owner_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()
def test_edit_wiki_page_by_membership(self):
data = {
"content": "Edited test wiki_page",
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertNotEqual(data["content"], self.wiki_page1.content)
self.assertEqual(len(mail.outbox), 0)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertEqual(data["content"], response.data["content"])
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertEqual(len(mail.outbox), 2)
self.client.logout()
def test_edit_wiki_page_by_membership_with_wron_project(self):
data = {
"project": self.project2.id
}
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 403)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()
def test_edit_wiki_page_by_no_membership(self):
data = {
"content": "Edited test wiki_page",
}
self.assertEqual(WikiPage.objects.all().count(), 2)
self.assertNotEqual(data["content"], self.wiki_page1.content)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.patch(
reverse("wiki-detail", args=(self.wiki_page1.id,)),
json.dumps(data),
content_type="application/json")
self.assertEqual(response.status_code, 404)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()
def test_delete_wiki_page_by_ano(self):
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.delete(
reverse("wiki-detail", args=(self.wiki_page1.id,))
)
self.assertEqual(response.status_code, 401)
self.assertEqual(WikiPage.objects.all().count(), 2)
def test_delete_wiki_page_by_project_owner(self):
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user1.username,
password=self.user1.username)
self.assertTrue(response)
response = self.client.delete(
reverse("wiki-detail", args=(self.wiki_page1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(WikiPage.objects.all().count(), 1)
self.client.logout()
def test_delete_wiki_page_by_owner(self):
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user2.username,
password=self.user2.username)
self.assertTrue(response)
response = self.client.delete(
reverse("wiki-detail", args=(self.wiki_page1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(WikiPage.objects.all().count(), 1)
self.client.logout()
def test_delete_wiki_page_by_membership(self):
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user3.username,
password=self.user3.username)
self.assertTrue(response)
response = self.client.delete(
reverse("wiki-detail", args=(self.wiki_page1.id,))
)
self.assertEqual(response.status_code, 204)
self.assertEqual(WikiPage.objects.all().count(), 1)
self.client.logout()
def test_delete_wiki_page_by_no_membership(self):
self.assertEqual(WikiPage.objects.all().count(), 2)
response = self.client.login(username=self.user4.username,
password=self.user4.username)
self.assertTrue(response)
response = self.client.delete(
reverse("wiki-detail", args=(self.wiki_page1.id,))
)
self.assertEqual(response.status_code, 404)
self.assertEqual(WikiPage.objects.all().count(), 2)
self.client.logout()

View File

@ -1,47 +0,0 @@
# Copyright (C) 2014 Andrey Antukh <niwi@niwi.be>
# Copyright (C) 2014 Jesús Espino <jespinog@gmail.com>
# Copyright (C) 2014 David Barragán <bameda@dbarragan.com>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db.models.loading import get_model
def create_user(id, save=True, is_superuser=False):
model = get_model("users", "User")
domain_member_model = get_model("domains", "DomainMember")
domain_model = get_model("domains", "Domain")
instance = model(
username="user{0}".format(id),
email="user{0}@taiga.io".format(id),
full_name="Foo{0} Bar{0}".format(id)
)
instance.set_password(instance.username)
if is_superuser:
instance.is_staff = True
instance.is_superuser = True
instance.save()
domain = domain_model.objects.get(pk=1)
dm = domain_member_model.objects.create(user=instance,
email=instance.email,
domain=domain)
if id == 1:
dm.is_owner = True
dm.is_staff = True
dm.save()
return instance