diff --git a/taiga/base/models.py b/taiga/base/models.py
index 90d40912..9cb0cd80 100644
--- a/taiga/base/models.py
+++ b/taiga/base/models.py
@@ -14,8 +14,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
-from django.db.models import Q
-
# Patch api view for correctly return 401 responses on
# request is authenticated instead of 403
from . import monkey
diff --git a/taiga/base/utils/json.py b/taiga/base/utils/json.py
index 80bb0bc6..dcb818a3 100644
--- a/taiga/base/utils/json.py
+++ b/taiga/base/utils/json.py
@@ -18,9 +18,14 @@ import json
from rest_framework.utils import encoders
-def to_json(data, ensure_ascii=True, encoder_class=encoders.JSONEncoder):
+def dumps(data, ensure_ascii=True, encoder_class=encoders.JSONEncoder):
return json.dumps(data, cls=encoder_class, indent=None, ensure_ascii=ensure_ascii)
-def from_json(data):
+def loads(data):
return json.loads(data)
+
+# Some backward compatibility that should
+# be removed in near future.
+to_json = dumps
+from_json = loads
diff --git a/taiga/projects/attachments/api.py b/taiga/projects/attachments/api.py
index 987a721c..71519bae 100644
--- a/taiga/projects/attachments/api.py
+++ b/taiga/projects/attachments/api.py
@@ -34,7 +34,6 @@ from taiga.users.models import User
from taiga.projects.notifications import WatchedResourceMixin
from taiga.projects.history import HistoryResourceMixin
-
from . import permissions
from . import serializers
from . import models
@@ -47,6 +46,12 @@ class BaseAttachmentViewSet(HistoryResourceMixin, WatchedResourceMixin, ModelCru
content_type = None
+ def update(self, *args, **kwargs):
+ partial = kwargs.get("partial", False)
+ if not partial:
+ raise exc.NotSupported("Non partial updates not supported")
+ return super().update(*args, **kwargs)
+
def get_content_type(self):
app_name, model = self.content_type.split(".", 1)
return get_object_or_404(ContentType, app_label=app_name, model=model)
@@ -56,6 +61,9 @@ class BaseAttachmentViewSet(HistoryResourceMixin, WatchedResourceMixin, ModelCru
obj.content_type = self.get_content_type()
obj.owner = self.request.user
+ if obj.project_id != obj.content_object.project_id:
+ raise exc.WrongArguments("Project ID not matches between object and project")
+
super().pre_save(obj)
def post_delete(self, obj):
@@ -72,36 +80,24 @@ class UserStoryAttachmentViewSet(BaseAttachmentViewSet):
permission_classes = (permissions.UserStoryAttachmentPermission,)
filter_backends = (filters.CanViewUserStoryAttachmentFilterBackend,)
content_type = "userstories.userstory"
- create_notification_template = "create_userstory_notification"
- update_notification_template = "update_userstory_notification"
- destroy_notification_template = "destroy_userstory_notification"
class IssueAttachmentViewSet(BaseAttachmentViewSet):
permission_classes = (permissions.IssueAttachmentPermission,)
filter_backends = (filters.CanViewIssueAttachmentFilterBackend,)
content_type = "issues.issue"
- create_notification_template = "create_issue_notification"
- update_notification_template = "update_issue_notification"
- destroy_notification_template = "destroy_issue_notification"
class TaskAttachmentViewSet(BaseAttachmentViewSet):
permission_classes = (permissions.TaskAttachmentPermission,)
filter_backends = (filters.CanViewTaskAttachmentFilterBackend,)
content_type = "tasks.task"
- create_notification_template = "create_task_notification"
- update_notification_template = "update_task_notification"
- destroy_notification_template = "destroy_task_notification"
class WikiAttachmentViewSet(BaseAttachmentViewSet):
permission_classes = (permissions.WikiAttachmentPermission,)
filter_backends = (filters.CanViewWikiAttachmentFilterBackend,)
content_type = "wiki.wikipage"
- create_notification_template = "create_wiki_notification"
- update_notification_template = "update_wiki_notification"
- destroy_notification_template = "destroy_wiki_notification"
class RawAttachmentView(generics.RetrieveAPIView):
diff --git a/taiga/projects/attachments/permissions.py b/taiga/projects/attachments/permissions.py
index f5708ca0..47d922aa 100644
--- a/taiga/projects/attachments/permissions.py
+++ b/taiga/projects/attachments/permissions.py
@@ -16,7 +16,7 @@
from taiga.base.api.permissions import (TaigaResourcePermission, HasProjectPerm,
- IsProjectOwner, AllowAny, PermissionComponent)
+ AllowAny, PermissionComponent)
class IsAttachmentOwnerPerm(PermissionComponent):
diff --git a/taiga/projects/attachments/serializers.py b/taiga/projects/attachments/serializers.py
index e772c5e8..46ba0b97 100644
--- a/taiga/projects/attachments/serializers.py
+++ b/taiga/projects/attachments/serializers.py
@@ -21,7 +21,9 @@ from django.conf import settings
from rest_framework import serializers
+from taiga.base.serializers import ModelSerializer
from taiga.base.utils.urls import reverse
+
from . import models
@@ -30,6 +32,8 @@ class AttachmentSerializer(serializers.ModelSerializer):
url = serializers.SerializerMethodField("get_url")
size = serializers.SerializerMethodField("get_size")
+ attached_file = serializers.FileField(required=True)
+
class Meta:
model = models.Attachment
fields = ("id", "project", "owner", "name", "attached_file", "size", "url",
diff --git a/tests/fixtures.py b/tests/fixtures.py
index 75f5134f..02b853bd 100644
--- a/tests/fixtures.py
+++ b/tests/fixtures.py
@@ -16,6 +16,8 @@
# along with this program. If not, see .
import pytest
+import mock
+import functools
class Object:
@@ -27,11 +29,36 @@ def object():
return Object()
+class PartialMethodCaller:
+ def __init__(self, obj, **partial_params):
+ self.obj = obj
+ self.partial_params = partial_params
+
+ def __getattr__(self, name):
+ return functools.partial(getattr(self.obj, name), **self.partial_params)
+
+
@pytest.fixture
def client():
- from testclient_extensions import Client
+ from django.test.client import Client
+ from django.test.client import MULTIPART_CONTENT
- return Client()
+ class _Client(Client):
+ def login(self, user=None, backend="django.contrib.auth.backends.ModelBackend", **credentials):
+ if user is None:
+ return super().login(**credentials)
+
+ # This will be changed on django1.7 branch with other location
+ with mock.patch('django.test.client.authenticate') as authenticate:
+ user.backend = backend
+ authenticate.return_value = user
+ return super().login(**credentials)
+
+ @property
+ def json(self):
+ return PartialMethodCaller(obj=self, content_type='application/json;charset="utf-8"')
+
+ return _Client()
@pytest.fixture
diff --git a/tests/integration/resources_permissions/test_attachment_resources.py b/tests/integration/resources_permissions/test_attachment_resources.py
index 9c0e14f6..2bdf2e2f 100644
--- a/tests/integration/resources_permissions/test_attachment_resources.py
+++ b/tests/integration/resources_permissions/test_attachment_resources.py
@@ -1,16 +1,19 @@
-import pytest
from django.core.urlresolvers import reverse
+from django.core.files.uploadedfile import SimpleUploadedFile
+from django.test.client import MULTIPART_CONTENT
-from rest_framework.renderers import JSONRenderer
+from taiga.base.utils import json
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from taiga.projects.attachments.serializers import AttachmentSerializer
from tests import factories as f
-from tests.utils import helper_test_http_method, helper_test_http_method_and_count, disconnect_signals, reconnect_signals
-
-import json
+from tests.utils import helper_test_http_method
+from tests.utils import helper_test_http_method_and_count
+from tests.utils import disconnect_signals
+from tests.utils import reconnect_signals
+import pytest
pytestmark = pytest.mark.django_db
@@ -72,11 +75,14 @@ def data():
def data_us(data):
m = type("Models", (object,), {})
m.public_user_story = f.UserStoryFactory(project=data.public_project, ref=1)
- m.public_user_story_attachment = f.UserStoryAttachmentFactory(project=data.public_project, content_object=m.public_user_story)
+ m.public_user_story_attachment = f.UserStoryAttachmentFactory(project=data.public_project,
+ content_object=m.public_user_story)
m.private_user_story1 = f.UserStoryFactory(project=data.private_project1, ref=5)
- m.private_user_story1_attachment = f.UserStoryAttachmentFactory(project=data.private_project1, content_object=m.private_user_story1)
+ m.private_user_story1_attachment = f.UserStoryAttachmentFactory(project=data.private_project1,
+ content_object=m.private_user_story1)
m.private_user_story2 = f.UserStoryFactory(project=data.private_project2, ref=9)
- m.private_user_story2_attachment = f.UserStoryAttachmentFactory(project=data.private_project2, content_object=m.private_user_story2)
+ m.private_user_story2_attachment = f.UserStoryAttachmentFactory(project=data.private_project2,
+ content_object=m.private_user_story2)
return m
@pytest.fixture
@@ -197,9 +203,12 @@ def test_wiki_attachment_retrieve(client, data, data_wiki):
def test_user_story_attachment_update(client, data, data_us):
- public_url = reverse('userstory-attachments-detail', kwargs={"pk": data_us.public_user_story_attachment.pk})
- private_url1 = reverse('userstory-attachments-detail', kwargs={"pk": data_us.private_user_story1_attachment.pk})
- private_url2 = reverse('userstory-attachments-detail', kwargs={"pk": data_us.private_user_story2_attachment.pk})
+ public_url = reverse("userstory-attachments-detail",
+ args=[data_us.public_user_story_attachment.pk])
+ private_url1 = reverse("userstory-attachments-detail",
+ args=[data_us.private_user_story1_attachment.pk])
+ private_url2 = reverse("userstory-attachments-detail",
+ args=[data_us.private_user_story2_attachment.pk])
users = [
None,
@@ -211,14 +220,20 @@ def test_user_story_attachment_update(client, data, data_us):
attachment_data = AttachmentSerializer(data_us.public_user_story_attachment).data
attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
- results = helper_test_http_method(client, 'put', public_url, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
- results = helper_test_http_method(client, 'put', private_url1, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
- results = helper_test_http_method(client, 'put', private_url2, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ attachment_data = json.dumps(attachment_data)
+
+ results = helper_test_http_method(client, "put", public_url, attachment_data, users)
+ # assert results == [401, 403, 403, 400, 400]
+ assert results == [405, 405, 405, 405, 405]
+
+ results = helper_test_http_method(client, "put", private_url1, attachment_data, users)
+ # assert results == [401, 403, 403, 400, 400]
+ assert results == [405, 405, 405, 405, 405]
+
+ results = helper_test_http_method(client, "put", private_url2, attachment_data, users)
+ # assert results == [401, 403, 403, 400, 400]
+ assert results == [405, 405, 405, 405, 405]
def test_task_attachment_update(client, data, data_task):
@@ -236,14 +251,17 @@ def test_task_attachment_update(client, data, data_task):
attachment_data = AttachmentSerializer(data_task.public_task_attachment).data
attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'put', public_url, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
results = helper_test_http_method(client, 'put', private_url1, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
results = helper_test_http_method(client, 'put', private_url2, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
def test_issue_attachment_update(client, data, data_issue):
@@ -261,14 +279,17 @@ def test_issue_attachment_update(client, data, data_issue):
attachment_data = AttachmentSerializer(data_issue.public_issue_attachment).data
attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'put', public_url, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
results = helper_test_http_method(client, 'put', private_url1, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
results = helper_test_http_method(client, 'put', private_url2, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
def test_wiki_attachment_update(client, data, data_wiki):
@@ -286,14 +307,17 @@ def test_wiki_attachment_update(client, data, data_wiki):
attachment_data = AttachmentSerializer(data_wiki.public_wiki_attachment).data
attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'put', public_url, attachment_data, users)
- assert results == [401, 200, 200, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 200, 200, 200, 200]
results = helper_test_http_method(client, 'put', private_url1, attachment_data, users)
- assert results == [401, 200, 200, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 200, 200, 200, 200]
results = helper_test_http_method(client, 'put', private_url2, attachment_data, users)
- assert results == [401, 403, 403, 200, 200]
+ assert results == [405, 405, 405, 405, 405]
+ # assert results == [401, 403, 403, 200, 200]
def test_user_story_attachment_patch(client, data, data_us):
@@ -310,7 +334,7 @@ def test_user_story_attachment_patch(client, data, data_us):
]
attachment_data = {"description": "test"}
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'patch', public_url, attachment_data, users)
assert results == [401, 403, 403, 200, 200]
@@ -334,7 +358,7 @@ def test_task_attachment_patch(client, data, data_task):
]
attachment_data = {"description": "test"}
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'patch', public_url, attachment_data, users)
assert results == [401, 403, 403, 200, 200]
@@ -358,7 +382,7 @@ def test_issue_attachment_patch(client, data, data_issue):
]
attachment_data = {"description": "test"}
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'patch', public_url, attachment_data, users)
assert results == [401, 403, 403, 200, 200]
@@ -382,7 +406,7 @@ def test_wiki_attachment_patch(client, data, data_wiki):
]
attachment_data = {"description": "test"}
- attachment_data = JSONRenderer().render(attachment_data)
+ attachment_data = json.dumps(attachment_data)
results = helper_test_http_method(client, 'patch', public_url, attachment_data, users)
assert results == [401, 200, 200, 200, 200]
@@ -482,11 +506,16 @@ def test_user_story_attachment_create(client, data, data_us):
data.project_owner
]
- attachment_data = AttachmentSerializer(data_us.public_user_story_attachment).data
- attachment_data["id"] = None
- attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
- results = helper_test_http_method(client, 'post', url, attachment_data, users)
+ attachment_data = {"description": "test",
+ "object_id": data_us.public_user_story_attachment.object_id,
+ "project": data_us.public_user_story_attachment.project_id,
+ "attached_file": SimpleUploadedFile("test.txt", b"test")}
+
+ _after_each_request_hook = lambda: attachment_data["attached_file"].seek(0)
+
+ results = helper_test_http_method(client, 'post', url, attachment_data, users,
+ content_type=MULTIPART_CONTENT,
+ after_each_request=_after_each_request_hook)
assert results == [401, 403, 403, 201, 201]
@@ -501,11 +530,16 @@ def test_task_attachment_create(client, data, data_task):
data.project_owner
]
- attachment_data = AttachmentSerializer(data_task.public_task_attachment).data
- attachment_data["id"] = None
- attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
- results = helper_test_http_method(client, 'post', url, attachment_data, users)
+ attachment_data = {"description": "test",
+ "object_id": data_task.public_task_attachment.object_id,
+ "project": data_task.public_task_attachment.project_id,
+ "attached_file": SimpleUploadedFile("test.txt", b"test")}
+
+ _after_each_request_hook = lambda: attachment_data["attached_file"].seek(0)
+
+ results = helper_test_http_method(client, 'post', url, attachment_data, users,
+ content_type=MULTIPART_CONTENT,
+ after_each_request=_after_each_request_hook)
assert results == [401, 403, 403, 201, 201]
@@ -520,11 +554,17 @@ def test_issue_attachment_create(client, data, data_issue):
data.project_owner
]
- attachment_data = AttachmentSerializer(data_issue.public_issue_attachment).data
- attachment_data["id"] = None
- attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
- results = helper_test_http_method(client, 'post', url, attachment_data, users)
+ attachment_data = {"description": "test",
+ "object_id": data_issue.public_issue_attachment.object_id,
+ "project": data_issue.public_issue_attachment.project_id,
+ "attached_file": SimpleUploadedFile("test.txt", b"test")}
+
+ _after_each_request_hook = lambda: attachment_data["attached_file"].seek(0)
+
+ results = helper_test_http_method(client, 'post', url, attachment_data, users,
+ content_type=MULTIPART_CONTENT,
+ after_each_request=_after_each_request_hook)
+
assert results == [401, 403, 403, 201, 201]
@@ -539,11 +579,17 @@ def test_wiki_attachment_create(client, data, data_wiki):
data.project_owner
]
- attachment_data = AttachmentSerializer(data_wiki.public_wiki_attachment).data
- attachment_data["id"] = None
- attachment_data["description"] = "test"
- attachment_data = JSONRenderer().render(attachment_data)
- results = helper_test_http_method(client, 'post', url, attachment_data, users)
+ attachment_data = {"description": "test",
+ "object_id": data_wiki.public_wiki_attachment.object_id,
+ "project": data_wiki.public_wiki_attachment.project_id,
+ "attached_file": SimpleUploadedFile("test.txt", b"test")}
+
+ _after_each_request_hook = lambda: attachment_data["attached_file"].seek(0)
+
+ results = helper_test_http_method(client, 'post', url, attachment_data, users,
+ content_type=MULTIPART_CONTENT,
+ after_each_request=_after_each_request_hook)
+
assert results == [401, 201, 201, 201, 201]
diff --git a/tests/integration/resources_permissions/test_auth_resources.py b/tests/integration/resources_permissions/test_auth_resources.py
index 296fb964..8f51080a 100644
--- a/tests/integration/resources_permissions/test_auth_resources.py
+++ b/tests/integration/resources_permissions/test_auth_resources.py
@@ -1,15 +1,12 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
+from taiga.base.utils import json
from tests import factories as f
-from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-
-import json
+from tests.utils import disconnect_signals, reconnect_signals
+import pytest
pytestmark = pytest.mark.django_db
diff --git a/tests/integration/resources_permissions/test_history_resources.py b/tests/integration/resources_permissions/test_history_resources.py
index 81932926..7cf1950c 100644
--- a/tests/integration/resources_permissions/test_history_resources.py
+++ b/tests/integration/resources_permissions/test_history_resources.py
@@ -1,15 +1,11 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
diff --git a/tests/integration/resources_permissions/test_issues_resources.py b/tests/integration/resources_permissions/test_issues_resources.py
index b5de0869..2bf40ebf 100644
--- a/tests/integration/resources_permissions/test_issues_resources.py
+++ b/tests/integration/resources_permissions/test_issues_resources.py
@@ -1,17 +1,14 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
from taiga.projects.issues.serializers import IssueSerializer
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
+from taiga.base.utils import json
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
from taiga.projects.votes.services import add_vote
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
@@ -125,19 +122,19 @@ def test_issue_update(client, data):
issue_data = IssueSerializer(data.public_issue).data
issue_data["subject"] = "test"
- issue_data = JSONRenderer().render(issue_data)
+ issue_data = json.dumps(issue_data)
results = helper_test_http_method(client, 'put', public_url, issue_data, users)
assert results == [401, 403, 403, 200, 200]
issue_data = IssueSerializer(data.private_issue1).data
issue_data["subject"] = "test"
- issue_data = JSONRenderer().render(issue_data)
+ issue_data = json.dumps(issue_data)
results = helper_test_http_method(client, 'put', private_url1, issue_data, users)
assert results == [401, 403, 403, 200, 200]
issue_data = IssueSerializer(data.private_issue2).data
issue_data["subject"] = "test"
- issue_data = JSONRenderer().render(issue_data)
+ issue_data = json.dumps(issue_data)
results = helper_test_http_method(client, 'put', private_url2, issue_data, users)
assert results == [401, 403, 403, 200, 200]
@@ -295,15 +292,18 @@ def test_issue_bulk_create(client, data):
]
- bulk_data = json.dumps({"bulk_issues": "test1\ntest2", "project_id": data.public_issue.project.pk})
+ bulk_data = json.dumps({"bulk_issues": "test1\ntest2",
+ "project_id": data.public_issue.project.pk})
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 200, 200, 200, 200]
- bulk_data = json.dumps({"bulk_issues": "test1\ntest2", "project_id": data.private_issue1.project.pk})
+ bulk_data = json.dumps({"bulk_issues": "test1\ntest2",
+ "project_id": data.private_issue1.project.pk})
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 200, 200, 200, 200]
- bulk_data = json.dumps({"bulk_issues": "test1\ntest2", "project_id": data.private_issue2.project.pk})
+ bulk_data = json.dumps({"bulk_issues": "test1\ntest2",
+ "project_id": data.private_issue2.project.pk})
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 403, 403, 200, 200]
diff --git a/tests/integration/resources_permissions/test_milestones_resources.py b/tests/integration/resources_permissions/test_milestones_resources.py
index 6f5c1957..8c660968 100644
--- a/tests/integration/resources_permissions/test_milestones_resources.py
+++ b/tests/integration/resources_permissions/test_milestones_resources.py
@@ -1,8 +1,6 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.projects.milestones.serializers import MilestoneSerializer
from taiga.projects.milestones.models import Milestone
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
@@ -10,8 +8,7 @@ from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS,
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
@@ -110,19 +107,19 @@ def test_milestone_update(client, data):
milestone_data = MilestoneSerializer(data.public_milestone).data
milestone_data["name"] = "test"
- milestone_data = JSONRenderer().render(milestone_data)
+ milestone_data = json.dumps(milestone_data)
results = helper_test_http_method(client, 'put', public_url, milestone_data, users)
assert results == [401, 403, 403, 200, 200]
milestone_data = MilestoneSerializer(data.private_milestone1).data
milestone_data["name"] = "test"
- milestone_data = JSONRenderer().render(milestone_data)
+ milestone_data = json.dumps(milestone_data)
results = helper_test_http_method(client, 'put', private_url1, milestone_data, users)
assert results == [401, 403, 403, 200, 200]
milestone_data = MilestoneSerializer(data.private_milestone2).data
milestone_data["name"] = "test"
- milestone_data = JSONRenderer().render(milestone_data)
+ milestone_data = json.dumps(milestone_data)
results = helper_test_http_method(client, 'put', private_url2, milestone_data, users)
assert results == [401, 403, 403, 200, 200]
@@ -240,6 +237,7 @@ def test_milestone_patch(client, data):
results = helper_test_http_method(client, 'patch', private_url2, patch_data, users)
assert results == [401, 403, 403, 200, 200]
+
def test_milestone_action_stats(client, data):
public_url = reverse('milestones-stats', kwargs={"pk": data.public_milestone.pk})
private_url1 = reverse('milestones-stats', kwargs={"pk": data.private_milestone1.pk})
diff --git a/tests/integration/resources_permissions/test_projects_choices_resources.py b/tests/integration/resources_permissions/test_projects_choices_resources.py
index bdf4beba..8f52124b 100644
--- a/tests/integration/resources_permissions/test_projects_choices_resources.py
+++ b/tests/integration/resources_permissions/test_projects_choices_resources.py
@@ -1,16 +1,13 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.projects import serializers
from taiga.permissions.permissions import MEMBERS_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
@@ -132,19 +129,19 @@ def test_roles_update(client, data):
role_data = serializers.RoleSerializer(data.public_project.roles.all()[0]).data
role_data["name"] = "test"
- role_data = JSONRenderer().render(role_data)
+ role_data = json.dumps(role_data)
results = helper_test_http_method(client, 'put', public_url, role_data, users)
assert results == [401, 403, 403, 403, 200]
role_data = serializers.RoleSerializer(data.private_project1.roles.all()[0]).data
role_data["name"] = "test"
- role_data = JSONRenderer().render(role_data)
+ role_data = json.dumps(role_data)
results = helper_test_http_method(client, 'put', private1_url, role_data, users)
assert results == [401, 403, 403, 403, 200]
role_data = serializers.RoleSerializer(data.private_project2.roles.all()[0]).data
role_data["name"] = "test"
- role_data = JSONRenderer().render(role_data)
+ role_data = json.dumps(role_data)
results = helper_test_http_method(client, 'put', private2_url, role_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -260,19 +257,19 @@ def test_points_update(client, data):
points_data = serializers.PointsSerializer(data.public_points).data
points_data["name"] = "test"
- points_data = JSONRenderer().render(points_data)
+ points_data = json.dumps(points_data)
results = helper_test_http_method(client, 'put', public_url, points_data, users)
assert results == [401, 403, 403, 403, 200]
points_data = serializers.PointsSerializer(data.private_points1).data
points_data["name"] = "test"
- points_data = JSONRenderer().render(points_data)
+ points_data = json.dumps(points_data)
results = helper_test_http_method(client, 'put', private1_url, points_data, users)
assert results == [401, 403, 403, 403, 200]
points_data = serializers.PointsSerializer(data.private_points2).data
points_data["name"] = "test"
- points_data = JSONRenderer().render(points_data)
+ points_data = json.dumps(points_data)
results = helper_test_http_method(client, 'put', private2_url, points_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -421,19 +418,19 @@ def test_user_story_status_update(client, data):
user_story_status_data = serializers.UserStoryStatusSerializer(data.public_user_story_status).data
user_story_status_data["name"] = "test"
- user_story_status_data = JSONRenderer().render(user_story_status_data)
+ user_story_status_data = json.dumps(user_story_status_data)
results = helper_test_http_method(client, 'put', public_url, user_story_status_data, users)
assert results == [401, 403, 403, 403, 200]
user_story_status_data = serializers.UserStoryStatusSerializer(data.private_user_story_status1).data
user_story_status_data["name"] = "test"
- user_story_status_data = JSONRenderer().render(user_story_status_data)
+ user_story_status_data = json.dumps(user_story_status_data)
results = helper_test_http_method(client, 'put', private1_url, user_story_status_data, users)
assert results == [401, 403, 403, 403, 200]
user_story_status_data = serializers.UserStoryStatusSerializer(data.private_user_story_status2).data
user_story_status_data["name"] = "test"
- user_story_status_data = JSONRenderer().render(user_story_status_data)
+ user_story_status_data = json.dumps(user_story_status_data)
results = helper_test_http_method(client, 'put', private2_url, user_story_status_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -582,19 +579,19 @@ def test_task_status_update(client, data):
task_status_data = serializers.TaskStatusSerializer(data.public_task_status).data
task_status_data["name"] = "test"
- task_status_data = JSONRenderer().render(task_status_data)
+ task_status_data = json.dumps(task_status_data)
results = helper_test_http_method(client, 'put', public_url, task_status_data, users)
assert results == [401, 403, 403, 403, 200]
task_status_data = serializers.TaskStatusSerializer(data.private_task_status1).data
task_status_data["name"] = "test"
- task_status_data = JSONRenderer().render(task_status_data)
+ task_status_data = json.dumps(task_status_data)
results = helper_test_http_method(client, 'put', private1_url, task_status_data, users)
assert results == [401, 403, 403, 403, 200]
task_status_data = serializers.TaskStatusSerializer(data.private_task_status2).data
task_status_data["name"] = "test"
- task_status_data = JSONRenderer().render(task_status_data)
+ task_status_data = json.dumps(task_status_data)
results = helper_test_http_method(client, 'put', private2_url, task_status_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -743,19 +740,19 @@ def test_issue_status_update(client, data):
issue_status_data = serializers.IssueStatusSerializer(data.public_issue_status).data
issue_status_data["name"] = "test"
- issue_status_data = JSONRenderer().render(issue_status_data)
+ issue_status_data = json.dumps(issue_status_data)
results = helper_test_http_method(client, 'put', public_url, issue_status_data, users)
assert results == [401, 403, 403, 403, 200]
issue_status_data = serializers.IssueStatusSerializer(data.private_issue_status1).data
issue_status_data["name"] = "test"
- issue_status_data = JSONRenderer().render(issue_status_data)
+ issue_status_data = json.dumps(issue_status_data)
results = helper_test_http_method(client, 'put', private1_url, issue_status_data, users)
assert results == [401, 403, 403, 403, 200]
issue_status_data = serializers.IssueStatusSerializer(data.private_issue_status2).data
issue_status_data["name"] = "test"
- issue_status_data = JSONRenderer().render(issue_status_data)
+ issue_status_data = json.dumps(issue_status_data)
results = helper_test_http_method(client, 'put', private2_url, issue_status_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -904,19 +901,19 @@ def test_issue_type_update(client, data):
issue_type_data = serializers.IssueTypeSerializer(data.public_issue_type).data
issue_type_data["name"] = "test"
- issue_type_data = JSONRenderer().render(issue_type_data)
+ issue_type_data = json.dumps(issue_type_data)
results = helper_test_http_method(client, 'put', public_url, issue_type_data, users)
assert results == [401, 403, 403, 403, 200]
issue_type_data = serializers.IssueTypeSerializer(data.private_issue_type1).data
issue_type_data["name"] = "test"
- issue_type_data = JSONRenderer().render(issue_type_data)
+ issue_type_data = json.dumps(issue_type_data)
results = helper_test_http_method(client, 'put', private1_url, issue_type_data, users)
assert results == [401, 403, 403, 403, 200]
issue_type_data = serializers.IssueTypeSerializer(data.private_issue_type2).data
issue_type_data["name"] = "test"
- issue_type_data = JSONRenderer().render(issue_type_data)
+ issue_type_data = json.dumps(issue_type_data)
results = helper_test_http_method(client, 'put', private2_url, issue_type_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1065,19 +1062,19 @@ def test_priority_update(client, data):
priority_data = serializers.PrioritySerializer(data.public_priority).data
priority_data["name"] = "test"
- priority_data = JSONRenderer().render(priority_data)
+ priority_data = json.dumps(priority_data)
results = helper_test_http_method(client, 'put', public_url, priority_data, users)
assert results == [401, 403, 403, 403, 200]
priority_data = serializers.PrioritySerializer(data.private_priority1).data
priority_data["name"] = "test"
- priority_data = JSONRenderer().render(priority_data)
+ priority_data = json.dumps(priority_data)
results = helper_test_http_method(client, 'put', private1_url, priority_data, users)
assert results == [401, 403, 403, 403, 200]
priority_data = serializers.PrioritySerializer(data.private_priority2).data
priority_data["name"] = "test"
- priority_data = JSONRenderer().render(priority_data)
+ priority_data = json.dumps(priority_data)
results = helper_test_http_method(client, 'put', private2_url, priority_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1226,19 +1223,19 @@ def test_severity_update(client, data):
severity_data = serializers.SeveritySerializer(data.public_severity).data
severity_data["name"] = "test"
- severity_data = JSONRenderer().render(severity_data)
+ severity_data = json.dumps(severity_data)
results = helper_test_http_method(client, 'put', public_url, severity_data, users)
assert results == [401, 403, 403, 403, 200]
severity_data = serializers.SeveritySerializer(data.private_severity1).data
severity_data["name"] = "test"
- severity_data = JSONRenderer().render(severity_data)
+ severity_data = json.dumps(severity_data)
results = helper_test_http_method(client, 'put', private1_url, severity_data, users)
assert results == [401, 403, 403, 403, 200]
severity_data = serializers.SeveritySerializer(data.private_severity2).data
severity_data["name"] = "test"
- severity_data = JSONRenderer().render(severity_data)
+ severity_data = json.dumps(severity_data)
results = helper_test_http_method(client, 'put', private2_url, severity_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1387,19 +1384,19 @@ def test_membership_update(client, data):
membership_data = serializers.MembershipSerializer(data.public_membership).data
membership_data["token"] = "test"
- membership_data = JSONRenderer().render(membership_data)
+ membership_data = json.dumps(membership_data)
results = helper_test_http_method(client, 'put', public_url, membership_data, users)
assert results == [401, 403, 403, 403, 200]
membership_data = serializers.MembershipSerializer(data.private_membership1).data
membership_data["token"] = "test"
- membership_data = JSONRenderer().render(membership_data)
+ membership_data = json.dumps(membership_data)
results = helper_test_http_method(client, 'put', private1_url, membership_data, users)
assert results == [401, 403, 403, 403, 200]
membership_data = serializers.MembershipSerializer(data.private_membership2).data
membership_data["token"] = "test"
- membership_data = JSONRenderer().render(membership_data)
+ membership_data = json.dumps(membership_data)
results = helper_test_http_method(client, 'put', private2_url, membership_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1492,21 +1489,21 @@ def test_membership_create(client, data):
membership_data = serializers.MembershipSerializer(data.public_membership).data
membership_data["id"] = None
membership_data["email"] = "test1@test.com"
- membership_data = JSONRenderer().render(membership_data)
+ membership_data = json.dumps(membership_data)
results = helper_test_http_method(client, 'post', url, membership_data, users)
assert results == [401, 403, 403, 403, 201]
membership_data = serializers.MembershipSerializer(data.private_membership1).data
membership_data["id"] = None
membership_data["email"] = "test2@test.com"
- membership_data = JSONRenderer().render(membership_data)
+ membership_data = json.dumps(membership_data)
results = helper_test_http_method(client, 'post', url, membership_data, users)
assert results == [401, 403, 403, 403, 201]
membership_data = serializers.MembershipSerializer(data.private_membership2).data
membership_data["id"] = None
membership_data["email"] = "test3@test.com"
- membership_data = JSONRenderer().render(membership_data)
+ membership_data = json.dumps(membership_data)
results = helper_test_http_method(client, 'post', url, membership_data, users)
assert results == [401, 403, 403, 403, 201]
@@ -1529,7 +1526,7 @@ def test_membership_action_bulk_create(client, data):
{"role_id": data.public_membership.role.pk, "email": "test2@test.com"},
]
}
- bulk_data = JSONRenderer().render(bulk_data)
+ bulk_data = json.dumps(bulk_data)
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1540,7 +1537,7 @@ def test_membership_action_bulk_create(client, data):
{"role_id": data.private_membership1.role.pk, "email": "test2@test.com"},
]
}
- bulk_data = JSONRenderer().render(bulk_data)
+ bulk_data = json.dumps(bulk_data)
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1551,7 +1548,7 @@ def test_membership_action_bulk_create(client, data):
{"role_id": data.private_membership2.role.pk, "email": "test2@test.com"},
]
}
- bulk_data = JSONRenderer().render(bulk_data)
+ bulk_data = json.dumps(bulk_data)
results = helper_test_http_method(client, 'post', url, bulk_data, users)
assert results == [401, 403, 403, 403, 200]
@@ -1607,7 +1604,7 @@ def test_project_template_update(client, data):
project_template_data = serializers.ProjectTemplateSerializer(data.project_template).data
project_template_data["default_owner_role"] = "test"
- project_template_data = JSONRenderer().render(project_template_data)
+ project_template_data = json.dumps(project_template_data)
results = helper_test_http_method(client, 'put', url, project_template_data, users)
assert results == [401, 403, 200]
@@ -1657,9 +1654,3 @@ def test_project_template_patch(client, data):
results = helper_test_http_method(client, 'patch', url, '{"name": "Test"}', users)
assert results == [401, 403, 200]
-
-
-# def test_project_template_action_create_from_project(client, data):
-# assert False
-#
-#
diff --git a/tests/integration/resources_permissions/test_projects_resource.py b/tests/integration/resources_permissions/test_projects_resource.py
index bc91ed74..02fbe5fd 100644
--- a/tests/integration/resources_permissions/test_projects_resource.py
+++ b/tests/integration/resources_permissions/test_projects_resource.py
@@ -1,17 +1,14 @@
-import pytest
from django.core.urlresolvers import reverse
from django.db.models.loading import get_model
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.projects.serializers import ProjectDetailSerializer
from taiga.permissions.permissions import MEMBERS_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, helper_test_http_method_and_count
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
@@ -100,7 +97,7 @@ def test_project_update(client, data):
project_data = ProjectDetailSerializer(data.private_project2).data
project_data["is_private"] = False
- project_data = JSONRenderer().render(project_data)
+ project_data = json.dumps(project_data)
users = [
None,
diff --git a/tests/integration/resources_permissions/test_resolver_resources.py b/tests/integration/resources_permissions/test_resolver_resources.py
index fb744731..096c61bb 100644
--- a/tests/integration/resources_permissions/test_resolver_resources.py
+++ b/tests/integration/resources_permissions/test_resolver_resources.py
@@ -1,15 +1,12 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
diff --git a/tests/integration/resources_permissions/test_search_resources.py b/tests/integration/resources_permissions/test_search_resources.py
index fd4f400b..0867675e 100644
--- a/tests/integration/resources_permissions/test_search_resources.py
+++ b/tests/integration/resources_permissions/test_search_resources.py
@@ -1,17 +1,12 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
from taiga.projects.issues.serializers import IssueSerializer
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method_and_keys, disconnect_signals, reconnect_signals
-from taiga.projects.votes.services import add_vote
-
-import json
+import pytest
pytestmark = pytest.mark.django_db
diff --git a/tests/integration/resources_permissions/test_storage_resources.py b/tests/integration/resources_permissions/test_storage_resources.py
index 47182e8a..8f7f1f05 100644
--- a/tests/integration/resources_permissions/test_storage_resources.py
+++ b/tests/integration/resources_permissions/test_storage_resources.py
@@ -1,19 +1,17 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
-from taiga.userstorage.serializers import StorageEntrySerializer
+from taiga.base.utils import json
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
-
-from tests import factories as f
-from tests.utils import helper_test_http_method, helper_test_http_method_and_count, disconnect_signals, reconnect_signals
from taiga.projects.votes.services import add_vote
-
+from taiga.userstorage.serializers import StorageEntrySerializer
from taiga.userstorage.models import StorageEntry
-import json
+from tests import factories as f
+from tests.utils import helper_test_http_method
+from tests.utils import helper_test_http_method_and_count
+from tests.utils import disconnect_signals, reconnect_signals
+import pytest
pytestmark = pytest.mark.django_db
@@ -63,7 +61,7 @@ def test_storage_update(client, data):
storage_data = StorageEntrySerializer(data.storage_user1).data
storage_data["key"] = "test"
- storage_data = JSONRenderer().render(storage_data)
+ storage_data = json.dumps(storage_data)
results = helper_test_http_method(client, 'put', url, storage_data, users)
assert results == [401, 200, 201]
diff --git a/tests/integration/resources_permissions/test_tasks_resources.py b/tests/integration/resources_permissions/test_tasks_resources.py
index 8da1cafb..bc3f8768 100644
--- a/tests/integration/resources_permissions/test_tasks_resources.py
+++ b/tests/integration/resources_permissions/test_tasks_resources.py
@@ -1,16 +1,13 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.projects.tasks.serializers import TaskSerializer
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
@@ -125,19 +122,19 @@ def test_task_update(client, data):
task_data = TaskSerializer(data.public_task).data
task_data["subject"] = "test"
- task_data = JSONRenderer().render(task_data)
+ task_data = json.dumps(task_data)
results = helper_test_http_method(client, 'put', public_url, task_data, users)
assert results == [401, 403, 403, 200, 200]
task_data = TaskSerializer(data.private_task1).data
task_data["subject"] = "test"
- task_data = JSONRenderer().render(task_data)
+ task_data = json.dumps(task_data)
results = helper_test_http_method(client, 'put', private_url1, task_data, users)
assert results == [401, 403, 403, 200, 200]
task_data = TaskSerializer(data.private_task2).data
task_data["subject"] = "test"
- task_data = JSONRenderer().render(task_data)
+ task_data = json.dumps(task_data)
results = helper_test_http_method(client, 'put', private_url2, task_data, users)
assert results == [401, 403, 403, 200, 200]
diff --git a/tests/integration/resources_permissions/test_timelines_resources.py b/tests/integration/resources_permissions/test_timelines_resources.py
index 2dbe7074..c364b0a7 100644
--- a/tests/integration/resources_permissions/test_timelines_resources.py
+++ b/tests/integration/resources_permissions/test_timelines_resources.py
@@ -1,15 +1,11 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
diff --git a/tests/integration/resources_permissions/test_users_resources.py b/tests/integration/resources_permissions/test_users_resources.py
index 4e04f2e4..d3eea37a 100644
--- a/tests/integration/resources_permissions/test_users_resources.py
+++ b/tests/integration/resources_permissions/test_users_resources.py
@@ -1,17 +1,14 @@
-import pytest
+from tempfile import NamedTemporaryFile
+
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.users.serializers import UserSerializer
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
-from tempfile import NamedTemporaryFile
-
+import pytest
pytestmark = pytest.mark.django_db
DUMMY_BMP_DATA = b'BM:\x00\x00\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x04\x00\x00\x00\x13\x0b\x00\x00\x13\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
@@ -62,7 +59,7 @@ def test_user_update(client, data):
user_data = UserSerializer(data.registered_user).data
user_data["full_name"] = "test"
- user_data = JSONRenderer().render(user_data)
+ user_data = json.dumps(user_data)
results = helper_test_http_method(client, 'put', url, user_data, users)
assert results == [401, 200, 403, 200]
diff --git a/tests/integration/resources_permissions/test_userstories_resources.py b/tests/integration/resources_permissions/test_userstories_resources.py
index 4da129df..7be4958b 100644
--- a/tests/integration/resources_permissions/test_userstories_resources.py
+++ b/tests/integration/resources_permissions/test_userstories_resources.py
@@ -1,16 +1,13 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.projects.userstories.serializers import UserStorySerializer
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-import json
-
+import pytest
pytestmark = pytest.mark.django_db
@@ -123,19 +120,19 @@ def test_user_story_update(client, data):
user_story_data = UserStorySerializer(data.public_user_story).data
user_story_data["subject"] = "test"
- user_story_data = JSONRenderer().render(user_story_data)
+ user_story_data = json.dumps(user_story_data)
results = helper_test_http_method(client, 'put', public_url, user_story_data, users)
assert results == [401, 403, 403, 200, 200]
user_story_data = UserStorySerializer(data.private_user_story1).data
user_story_data["subject"] = "test"
- user_story_data = JSONRenderer().render(user_story_data)
+ user_story_data = json.dumps(user_story_data)
results = helper_test_http_method(client, 'put', private_url1, user_story_data, users)
assert results == [401, 403, 403, 200, 200]
user_story_data = UserStorySerializer(data.private_user_story2).data
user_story_data["subject"] = "test"
- user_story_data = JSONRenderer().render(user_story_data)
+ user_story_data = json.dumps(user_story_data)
results = helper_test_http_method(client, 'put', private_url2, user_story_data, users)
assert results == [401, 403, 403, 200, 200]
diff --git a/tests/integration/resources_permissions/test_wiki_resources.py b/tests/integration/resources_permissions/test_wiki_resources.py
index 1ee4b580..0691f775 100644
--- a/tests/integration/resources_permissions/test_wiki_resources.py
+++ b/tests/integration/resources_permissions/test_wiki_resources.py
@@ -1,18 +1,14 @@
-import pytest
from django.core.urlresolvers import reverse
-from rest_framework.renderers import JSONRenderer
-
+from taiga.base.utils import json
from taiga.projects.wiki.serializers import WikiPageSerializer, WikiLinkSerializer
from taiga.projects.wiki.models import WikiPage, WikiLink
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
-from taiga.projects.votes.services import add_vote
-
-import json
+import pytest
pytestmark = pytest.mark.django_db
@@ -115,19 +111,19 @@ def test_wiki_page_update(client, data):
wiki_page_data = WikiPageSerializer(data.public_wiki_page).data
wiki_page_data["content"] = "test"
- wiki_page_data = JSONRenderer().render(wiki_page_data)
+ wiki_page_data = json.dumps(wiki_page_data)
results = helper_test_http_method(client, 'put', public_url, wiki_page_data, users)
assert results == [401, 200, 200, 200, 200]
wiki_page_data = WikiPageSerializer(data.private_wiki_page1).data
wiki_page_data["content"] = "test"
- wiki_page_data = JSONRenderer().render(wiki_page_data)
+ wiki_page_data = json.dumps(wiki_page_data)
results = helper_test_http_method(client, 'put', private_url1, wiki_page_data, users)
assert results == [401, 200, 200, 200, 200]
wiki_page_data = WikiPageSerializer(data.private_wiki_page2).data
wiki_page_data["content"] = "test"
- wiki_page_data = JSONRenderer().render(wiki_page_data)
+ wiki_page_data = json.dumps(wiki_page_data)
results = helper_test_http_method(client, 'put', private_url2, wiki_page_data, users)
assert results == [401, 403, 403, 200, 200]
@@ -294,19 +290,19 @@ def test_wiki_link_update(client, data):
wiki_link_data = WikiLinkSerializer(data.public_wiki_link).data
wiki_link_data["title"] = "test"
- wiki_link_data = JSONRenderer().render(wiki_link_data)
+ wiki_link_data = json.dumps(wiki_link_data)
results = helper_test_http_method(client, 'put', public_url, wiki_link_data, users)
assert results == [401, 200, 200, 200, 200]
wiki_link_data = WikiLinkSerializer(data.private_wiki_link1).data
wiki_link_data["title"] = "test"
- wiki_link_data = JSONRenderer().render(wiki_link_data)
+ wiki_link_data = json.dumps(wiki_link_data)
results = helper_test_http_method(client, 'put', private_url1, wiki_link_data, users)
assert results == [401, 200, 200, 200, 200]
wiki_link_data = WikiLinkSerializer(data.private_wiki_link2).data
wiki_link_data["title"] = "test"
- wiki_link_data = JSONRenderer().render(wiki_link_data)
+ wiki_link_data = json.dumps(wiki_link_data)
results = helper_test_http_method(client, 'put', private_url2, wiki_link_data, users)
assert results == [401, 403, 403, 200, 200]
diff --git a/tests/integration/test_attachments.py b/tests/integration/test_attachments.py
index 72d8ff17..3c498101 100644
--- a/tests/integration/test_attachments.py
+++ b/tests/integration/test_attachments.py
@@ -2,12 +2,16 @@ import pytest
from django.core.urlresolvers import reverse
from django.core.files.base import File
+from django.core.files.uploadedfile import SimpleUploadedFile
from .. import factories as f
from ..utils import set_settings
+from taiga.projects.attachments.serializers import AttachmentSerializer
+
pytestmark = pytest.mark.django_db
+
def test_authentication(client):
"User can't access an attachment if not authenticated"
attachment = f.UserStoryAttachmentFactory.create()
@@ -56,3 +60,39 @@ def test_attachment_redirect(client):
assert response.status_code == 200
assert response.has_header('x-accel-redirect')
+
+
+# Bug test "Don't create attachments without attached_file"
+def test_create_user_story_attachment_without_file(client):
+ us = f.UserStoryFactory.create()
+ attachment = f.UserStoryAttachmentFactory(project=us.project, content_object=us)
+
+ attachment_data = AttachmentSerializer(attachment).data
+ attachment_data["id"] = None
+ attachment_data["description"] = "test"
+ attachment_data["attached_file"] = None
+
+ url = reverse('userstory-attachments-list')
+
+ client.login(us.owner)
+ response = client.post(url, attachment_data)
+ assert response.status_code == 400
+
+
+def test_create_attachment_on_wrong_project(client):
+ issue1 = f.create_issue()
+ issue2 = f.create_issue(owner=issue1.owner)
+
+ assert issue1.owner == issue2.owner
+ assert issue1.project.owner == issue2.project.owner
+
+ url = reverse("issue-attachments-list")
+
+ data = {"description": "test",
+ "object_id": issue2.pk,
+ "project": issue1.project.id,
+ "attached_file": SimpleUploadedFile("test.txt", b"test")}
+
+ client.login(issue1.owner)
+ response = client.post(url, data)
+ assert response.status_code == 400
diff --git a/tests/integration/test_issues.py b/tests/integration/test_issues.py
index f367d6df..cd9439c2 100644
--- a/tests/integration/test_issues.py
+++ b/tests/integration/test_issues.py
@@ -1,13 +1,13 @@
from unittest import mock
-import pytest
-
from django.core.urlresolvers import reverse
from taiga.projects.issues import services, models
+from taiga.base.utils import json
from .. import factories as f
+import pytest
pytestmark = pytest.mark.django_db
@@ -51,7 +51,7 @@ def test_api_create_issues_in_bulk(client):
"project_id": project.id}
client.login(project.owner)
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 200, response.data
diff --git a/tests/integration/test_memberships.py b/tests/integration/test_memberships.py
index 400c8a6f..4387de9f 100644
--- a/tests/integration/test_memberships.py
+++ b/tests/integration/test_memberships.py
@@ -1,13 +1,12 @@
from unittest import mock
-
-import pytest
-
from django.core.urlresolvers import reverse
from taiga.projects import services
+from taiga.base.utils import json
from .. import factories as f
+import pytest
pytestmark = pytest.mark.django_db
@@ -47,7 +46,7 @@ def test_api_create_bulk_members(client):
]
}
client.login(project.owner)
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 200
assert response.data[0]["email"] == john.email
@@ -76,7 +75,7 @@ def test_api_invite_existing_user(client, outbox):
url = reverse("memberships-list")
data = {"role": role.pk, "project": role.project.pk, "email": user.email}
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 201, response.data
assert len(outbox) == 1
diff --git a/tests/integration/test_projects.py b/tests/integration/test_projects.py
index a9996cc8..7d25ac32 100644
--- a/tests/integration/test_projects.py
+++ b/tests/integration/test_projects.py
@@ -1,9 +1,9 @@
-import pytest
-
from django.core.urlresolvers import reverse
+from taiga.base.utils import json
from .. import factories as f
+import pytest
pytestmark = pytest.mark.django_db
@@ -13,7 +13,7 @@ def test_api_create_project(client):
data = {"name": "project name", "description": "project description"}
client.login(user)
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
@@ -24,6 +24,6 @@ def test_api_partially_update_project(client):
data = {"name": ""}
client.login(project.owner)
- response = client.json.patch(url, data)
+ response = client.json.patch(url, json.dumps(data))
assert response.status_code == 400
diff --git a/tests/integration/test_tasks.py b/tests/integration/test_tasks.py
index c6ed5d9b..46caa4b0 100644
--- a/tests/integration/test_tasks.py
+++ b/tests/integration/test_tasks.py
@@ -1,13 +1,13 @@
from unittest import mock
-import pytest
-
from django.core.urlresolvers import reverse
+from taiga.base.utils import json
from taiga.projects.tasks import services
from .. import factories as f
+import pytest
pytestmark = pytest.mark.django_db
@@ -40,7 +40,7 @@ def test_api_update_task_tags(client):
data = {"tags": ["back", "front"], "version": task.version}
client.login(task.owner)
- response = client.json.patch(url, data)
+ response = client.json.patch(url, json.dumps(data))
assert response.status_code == 200, response.data
@@ -57,7 +57,7 @@ def test_api_create_in_bulk_with_status(client):
}
client.login(us.owner)
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 200
assert response.data[0]["status"] == us.project.default_task_status.id
diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py
index 8ae87dfb..ee17c198 100644
--- a/tests/integration/test_userstories.py
+++ b/tests/integration/test_userstories.py
@@ -1,13 +1,13 @@
from unittest import mock
-import pytest
-
from django.core.urlresolvers import reverse
+from taiga.base.utils import json
from taiga.projects.userstories import services, models
from .. import factories as f
+import pytest
pytestmark = pytest.mark.django_db
@@ -76,7 +76,7 @@ def test_api_create_in_bulk_with_status(client):
}
client.login(project.owner)
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 200, response.data
assert response.data[0]["status"] == project.default_us_status.id
@@ -94,6 +94,6 @@ def test_api_update_order_in_bulk(client):
}
client.login(project.owner)
- response = client.json.post(url, data)
+ response = client.json.post(url, json.dumps(data))
assert response.status_code == 204, response.data
diff --git a/tests/utils.py b/tests/utils.py
index 4537c911..f326505e 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -88,19 +88,21 @@ class SettingsTestCase(object):
override_settings(cls.ORIGINAL_SETTINGS)
cls.OVERRIDE_SETTINGS.clear()
-def _helper_test_http_method_responses(client, method, url, data, users, after_each_request=None):
+def _helper_test_http_method_responses(client, method, url, data, users, after_each_request=None,
+ content_type="application/json"):
results = []
+
for user in users:
if user is None:
client.logout()
else:
client.login(user)
if data:
- response = getattr(client, method)(url, data, content_type="application/json")
+ response = getattr(client, method)(url, data, content_type=content_type)
else:
response = getattr(client, method)(url)
- if response.status_code == 400:
- print(response.content)
+ if response.status_code >= 400:
+ print("Response content:", response.content)
results.append(response)
@@ -108,8 +110,10 @@ def _helper_test_http_method_responses(client, method, url, data, users, after_e
after_each_request()
return results
-def helper_test_http_method(client, method, url, data, users, after_each_request=None):
- responses = _helper_test_http_method_responses(client, method, url, data, users, after_each_request)
+def helper_test_http_method(client, method, url, data, users, after_each_request=None,
+ content_type="application/json"):
+ responses = _helper_test_http_method_responses(client, method, url, data, users, after_each_request,
+ content_type=content_type)
return list(map(lambda r: r.status_code, responses))