Fixing a lot of flake8 errors on tests

remotes/origin/enhancement/email-actions
Jesús Espino 2015-02-24 14:00:22 +01:00 committed by David Barragán Merino
parent 1ba41671b4
commit c328414b4d
50 changed files with 436 additions and 410 deletions

View File

@ -34,4 +34,3 @@ def pytest_runtest_setup(item):
def pytest_configure(config):
django.setup()

View File

@ -49,9 +49,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -83,6 +83,7 @@ def data():
return m
@pytest.fixture
def data_us(data):
m = type("Models", (object,), {})
@ -97,6 +98,7 @@ def data_us(data):
content_object=m.private_user_story2)
return m
@pytest.fixture
def data_task(data):
m = type("Models", (object,), {})
@ -108,6 +110,7 @@ def data_task(data):
m.private_task2_attachment = f.TaskAttachmentFactory(project=data.private_project2, content_object=m.private_task2)
return m
@pytest.fixture
def data_issue(data):
m = type("Models", (object,), {})
@ -119,6 +122,7 @@ def data_issue(data):
m.private_issue2_attachment = f.IssueAttachmentFactory(project=data.private_project2, content_object=m.private_issue2)
return m
@pytest.fixture
def data_wiki(data):
m = type("Models", (object,), {})
@ -130,6 +134,7 @@ def data_wiki(data):
m.private_wiki2_attachment = f.WikiAttachmentFactory(project=data.private_project2, content_object=m.private_wiki2)
return m
def test_user_story_attachment_retrieve(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})
@ -507,6 +512,7 @@ def test_wiki_attachment_delete(client, data, data_wiki):
results = helper_test_http_method(client, 'delete', private_url2, None, users)
assert results == [401, 403, 403, 204]
def test_user_story_attachment_create(client, data, data_us):
url = reverse('userstory-attachments-list')

View File

@ -1,6 +1,5 @@
from django.core.urlresolvers import reverse
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from taiga.base.utils import json
from tests import factories as f

View File

@ -41,9 +41,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -75,6 +75,7 @@ def data():
is_owner=True)
return m
@pytest.fixture
def data_us(data):
m = type("Models", (object,), {})
@ -83,6 +84,7 @@ def data_us(data):
m.private_user_story2 = f.UserStoryFactory(project=data.private_project2, ref=9)
return m
@pytest.fixture
def data_task(data):
m = type("Models", (object,), {})
@ -91,6 +93,7 @@ def data_task(data):
m.private_task2 = f.TaskFactory(project=data.private_project2, ref=10)
return m
@pytest.fixture
def data_issue(data):
m = type("Models", (object,), {})
@ -99,6 +102,7 @@ def data_issue(data):
m.private_issue2 = f.IssueFactory(project=data.private_project2, ref=11)
return m
@pytest.fixture
def data_wiki(data):
m = type("Models", (object,), {})

View File

@ -47,9 +47,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -135,7 +135,7 @@ def test_issue_update(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
issue_data = IssueSerializer(data.public_issue).data
issue_data["subject"] = "test"
issue_data = json.dumps(issue_data)
@ -285,7 +285,7 @@ def test_issue_patch(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
patch_data = json.dumps({"subject": "test", "version": data.public_issue.version})
results = helper_test_http_method(client, 'patch', public_url, patch_data, users)
assert results == [401, 403, 403, 200, 200]
@ -412,6 +412,7 @@ def test_issue_voters_list(client, data):
results = helper_test_http_method(client, 'get', private_url2, None, users)
assert results == [401, 403, 403, 200, 200]
def test_issue_voters_retrieve(client, data):
add_vote(data.public_issue, data.project_owner)
public_url = reverse('issue-voters-detail', kwargs={"issue_id": data.public_issue.pk, "pk": data.project_owner.pk})

View File

@ -44,9 +44,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,

View File

@ -36,10 +36,10 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
email=m.project_member_with_perms.email,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
email=m.project_member_with_perms.email,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
email=m.project_member_with_perms.email,
@ -375,21 +375,21 @@ def test_points_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_points": [(1,2)],
"bulk_points": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_points": [(1,2)],
"bulk_points": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_points": [(1,2)],
"bulk_points": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -536,21 +536,21 @@ def test_user_story_status_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_userstory_statuses": [(1,2)],
"bulk_userstory_statuses": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_userstory_statuses": [(1,2)],
"bulk_userstory_statuses": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_userstory_statuses": [(1,2)],
"bulk_userstory_statuses": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -697,21 +697,21 @@ def test_task_status_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_task_statuses": [(1,2)],
"bulk_task_statuses": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_task_statuses": [(1,2)],
"bulk_task_statuses": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_task_statuses": [(1,2)],
"bulk_task_statuses": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -858,21 +858,21 @@ def test_issue_status_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_issue_statuses": [(1,2)],
"bulk_issue_statuses": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_issue_statuses": [(1,2)],
"bulk_issue_statuses": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_issue_statuses": [(1,2)],
"bulk_issue_statuses": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -1019,21 +1019,21 @@ def test_issue_type_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_issue_types": [(1,2)],
"bulk_issue_types": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_issue_types": [(1,2)],
"bulk_issue_types": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_issue_types": [(1,2)],
"bulk_issue_types": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -1180,21 +1180,21 @@ def test_priority_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_priorities": [(1,2)],
"bulk_priorities": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_priorities": [(1,2)],
"bulk_priorities": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_priorities": [(1,2)],
"bulk_priorities": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -1341,21 +1341,21 @@ def test_severity_action_bulk_update_order(client, data):
]
post_data = json.dumps({
"bulk_severities": [(1,2)],
"bulk_severities": [(1, 2)],
"project": data.public_project.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_severities": [(1,2)],
"bulk_severities": [(1, 2)],
"project": data.private_project1.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 403, 403, 403, 204]
post_data = json.dumps({
"bulk_severities": [(1,2)],
"bulk_severities": [(1, 2)],
"project": data.private_project2.pk
})
results = helper_test_http_method(client, 'post', url, post_data, users)
@ -1489,6 +1489,7 @@ def test_membership_patch(client, data):
results = helper_test_http_method(client, 'patch', private2_url, '{"name": "Test"}', users)
assert results == [401, 403, 403, 403, 200]
def test_membership_create(client, data):
url = reverse('memberships-list')

View File

@ -1,6 +1,5 @@
from django.core.urlresolvers import reverse
from taiga.base.utils import json
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
@ -45,9 +44,9 @@ def data():
slug="private2")
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -78,9 +77,9 @@ def data():
is_owner=True)
m.view_only_membership = f.MembershipFactory(project=m.private_project2,
user=m.other_user,
role__project=m.private_project2,
role__permissions=["view_project"])
user=m.other_user,
role__project=m.private_project2,
role__permissions=["view_project"])
m.us = f.UserStoryFactory(project=m.private_project2, ref=1)
m.task = f.TaskFactory(project=m.private_project2, ref=2)
@ -103,7 +102,7 @@ def test_resolver_list(client, data):
results = helper_test_http_method(client, 'get', "{}?project={}".format(url, data.public_project.slug), None, users)
assert results == [200, 200, 200, 200, 200]
results = helper_test_http_method(client, 'get', "{}?project={}".format(url,data.private_project1.slug), None, users)
results = helper_test_http_method(client, 'get', "{}?project={}".format(url, data.private_project1.slug), None, users)
assert results == [200, 200, 200, 200, 200]
results = helper_test_http_method(client, 'get', "{}?project={}".format(url, data.private_project2.slug), None, users)
assert results == [401, 403, 403, 200, 200]

View File

@ -1,6 +1,5 @@
from django.core.urlresolvers import reverse
from taiga.projects.issues.serializers import IssueSerializer
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from tests import factories as f
@ -42,9 +41,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,

View File

@ -1,8 +1,6 @@
from django.core.urlresolvers import reverse
from taiga.base.utils import json
from taiga.permissions.permissions import MEMBERS_PERMISSIONS, ANON_PERMISSIONS, USER_PERMISSIONS
from taiga.projects.votes.services import add_vote
from taiga.userstorage.serializers import StorageEntrySerializer
from taiga.userstorage.models import StorageEntry

View File

@ -46,9 +46,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -135,7 +135,7 @@ def test_task_update(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
task_data = TaskSerializer(data.public_task).data
task_data["subject"] = "test"
task_data = json.dumps(task_data)
@ -256,7 +256,7 @@ def test_task_patch(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
patch_data = json.dumps({"subject": "test", "version": data.public_task.version})
results = helper_test_http_method(client, 'patch', public_url, patch_data, users)
assert results == [401, 403, 403, 200, 200]

View File

@ -41,9 +41,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,

View File

@ -148,6 +148,7 @@ def test_user_patch(client, data):
results = helper_test_http_method(client, 'patch', url, patch_data, users)
assert results == [401, 200, 403, 200]
def test_user_action_change_password(client, data):
url = reverse('users-change-password')
@ -165,7 +166,6 @@ def test_user_action_change_password(client, data):
data.superuser,
]
post_data = json.dumps({"current_password": "test-current-password", "password": "test-password"})
results = helper_test_http_method(client, 'post', url, post_data, users)
assert results == [401, 204, 204, 204]
@ -236,6 +236,7 @@ def test_user_action_change_password_from_recovery(client, data):
results = helper_test_http_method(client, 'post', url, patch_data, users, reset_token)
assert results == [204, 204, 204, 204]
def test_user_action_password_recovery(client, data):
url = reverse('users-password-recovery')
@ -252,6 +253,7 @@ def test_user_action_password_recovery(client, data):
results = helper_test_http_method(client, 'post', url, patch_data, users)
assert results == [200, 200, 200, 200]
def test_user_action_change_email(client, data):
url = reverse('users-change-email')

View File

@ -46,9 +46,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -133,7 +133,7 @@ def test_user_story_update(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
user_story_data = UserStorySerializer(data.public_user_story).data
user_story_data["subject"] = "test"
user_story_data = json.dumps(user_story_data)
@ -239,7 +239,7 @@ def test_user_story_patch(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
patch_data = json.dumps({"subject": "test", "version": data.public_user_story.version})
results = helper_test_http_method(client, 'patch', public_url, patch_data, users)
assert results == [401, 403, 403, 200, 200]

View File

@ -3,7 +3,6 @@ from django.core.urlresolvers import reverse
from taiga.base.utils import json
from taiga.webhooks.serializers import WebhookSerializer
from taiga.webhooks.models import Webhook
from taiga.webhooks import tasks
from tests import factories as f
from tests.utils import helper_test_http_method, disconnect_signals, reconnect_signals
@ -187,12 +186,12 @@ def test_webhook_action_test(client, data):
with mock.patch('taiga.webhooks.tasks._send_request') as _send_request_mock:
results = helper_test_http_method(client, 'post', url1, None, users)
assert results == [404, 404, 200]
assert _send_request_mock.called == True
assert _send_request_mock.called is True
with mock.patch('taiga.webhooks.tasks._send_request') as _send_request_mock:
results = helper_test_http_method(client, 'post', url2, None, users)
assert results == [404, 404, 404]
assert _send_request_mock.called == False
assert _send_request_mock.called is False
def test_webhooklogs_list(client, data):

View File

@ -47,9 +47,9 @@ def data():
owner=m.project_owner)
m.public_membership = f.MembershipFactory(project=m.public_project,
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
user=m.project_member_with_perms,
role__project=m.public_project,
role__permissions=list(map(lambda x: x[0], MEMBERS_PERMISSIONS)))
m.private_membership1 = f.MembershipFactory(project=m.private_project1,
user=m.project_member_with_perms,
role__project=m.private_project1,
@ -124,7 +124,7 @@ def test_wiki_page_update(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
wiki_page_data = WikiPageSerializer(data.public_wiki_page).data
wiki_page_data["content"] = "test"
wiki_page_data = json.dumps(wiki_page_data)
@ -242,7 +242,7 @@ def test_wiki_page_patch(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
patch_data = json.dumps({"content": "test", "version": data.public_wiki_page.version})
results = helper_test_http_method(client, 'patch', public_url, patch_data, users)
assert results == [401, 200, 200, 200, 200]
@ -255,6 +255,7 @@ def test_wiki_page_patch(client, data):
results = helper_test_http_method(client, 'patch', private_url2, patch_data, users)
assert results == [401, 403, 403, 200, 200]
def test_wiki_page_action_render(client, data):
url = reverse('wiki-render')
@ -305,7 +306,7 @@ def test_wiki_link_update(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
wiki_link_data = WikiLinkSerializer(data.public_wiki_link).data
wiki_link_data["title"] = "test"
wiki_link_data = json.dumps(wiki_link_data)
@ -423,7 +424,7 @@ def test_wiki_link_patch(client, data):
data.project_owner
]
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version") as _validate_and_update_version_mock:
with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"):
patch_data = json.dumps({"title": "test"})
results = helper_test_http_method(client, 'patch', public_url, patch_data, users)
assert results == [401, 200, 200, 200, 200]

View File

@ -1,10 +1,8 @@
import pytest
from django.core.urlresolvers import reverse
from django.core.files.base import File
from django.core.files.uploadedfile import SimpleUploadedFile
from taiga.projects.attachments.serializers import AttachmentSerializer
from .. import factories as f
pytestmark = pytest.mark.django_db
@ -15,7 +13,7 @@ def test_create_user_story_attachment_without_file(client):
Bug test "Don't create attachments without attached_file"
"""
us = f.UserStoryFactory.create()
membership = f.MembershipFactory(project=us.project, user=us.owner, is_owner=True)
f.MembershipFactory(project=us.project, user=us.owner, is_owner=True)
attachment_data = {
"description": "test",
"attached_file": None,
@ -32,7 +30,7 @@ def test_create_user_story_attachment_without_file(client):
def test_create_attachment_on_wrong_project(client):
issue1 = f.create_issue()
issue2 = f.create_issue(owner=issue1.owner)
membership = f.MembershipFactory(project=issue1.project, user=issue1.owner, is_owner=True)
f.MembershipFactory(project=issue1.project, user=issue1.owner, is_owner=True)
assert issue1.owner == issue2.owner
assert issue1.project.owner == issue2.project.owner

View File

@ -1,7 +1,6 @@
from django.core.urlresolvers import reverse
from tests import factories as f
from tests.utils import helper_test_http_method
from taiga.base.utils import json

View File

@ -16,7 +16,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import pytest
from unittest.mock import MagicMock
from unittest.mock import patch
from django.core.urlresolvers import reverse
@ -83,6 +82,7 @@ def test_take_two_snapshots_without_changes():
assert qs_created.count() == 1
assert qs_hidden.count() == 0
def test_take_snapshot_from_deleted_object():
issue = f.IssueFactory.create()
@ -143,7 +143,7 @@ def test_issue_resource_history_test(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
role = f.RoleFactory.create(project=project)
membership = f.MembershipFactory.create(project=project, user=user, role=role, is_owner=True)
f.MembershipFactory.create(project=project, user=user, role=role, is_owner=True)
issue = f.IssueFactory.create(owner=user, project=project)
mock_path = "taiga.projects.issues.api.IssueViewSet.pre_conditions_on_save"
@ -158,7 +158,7 @@ def test_issue_resource_history_test(client):
assert qs_all.count() == 0
with patch(mock_path) as m:
with patch(mock_path):
data = {"subject": "Fooooo", "version": issue.version}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -168,7 +168,7 @@ def test_issue_resource_history_test(client):
assert qs_changed.count() == 0
assert qs_deleted.count() == 0
with patch(mock_path) as m:
with patch(mock_path):
response = client.delete(url)
assert response.status_code == 204
@ -200,7 +200,7 @@ def test_take_hidden_snapshot():
def test_history_with_only_comment_shouldnot_be_hidden(client):
project = f.create_project()
us = f.create_userstory(project=project)
membership = f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
qs_all = HistoryEntry.objects.all()
qs_hidden = qs_all.filter(is_hidden=True)
@ -221,14 +221,14 @@ def test_history_with_only_comment_shouldnot_be_hidden(client):
def test_delete_comment_by_project_owner(client):
project = f.create_project()
us = f.create_userstory(project=project)
membership = f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
key = make_key_from_model_object(us)
history_entry = f.HistoryEntryFactory.create(type=HistoryType.change,
comment="testing",
key=key)
comment="testing",
key=key)
client.login(project.owner)
url = reverse("userstory-history-delete-comment", args=(us.id,))
url = "%s?id=%s"%(url, history_entry.id)
url = "%s?id=%s" % (url, history_entry.id)
response = client.post(url, content_type="application/json")
assert 200 == response.status_code, response.status_code

View File

@ -14,17 +14,14 @@ from taiga.hooks.exceptions import ActionSyntaxException
from taiga.projects.issues.models import Issue
from taiga.projects.tasks.models import Task
from taiga.projects.userstories.models import UserStory
from taiga.projects.models import Membership
from taiga.projects.history.services import get_history_queryset_by_model_instance, take_snapshot
from taiga.projects.notifications.choices import NotifyLevel
from taiga.projects.notifications.models import NotifyPolicy
from taiga.projects import services
from .. import factories as f
pytestmark = pytest.mark.django_db
def test_bad_signature(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"bitbucket": {
"secret": "tpnIwJDz4e"
@ -41,7 +38,7 @@ def test_bad_signature(client):
def test_ok_signature(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"bitbucket": {
"secret": "tpnIwJDz4e"
@ -57,8 +54,9 @@ def test_ok_signature(client):
REMOTE_ADDR=settings.BITBUCKET_VALID_ORIGIN_IPS[0])
assert response.status_code == 204
def test_invalid_ip(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"bitbucket": {
"secret": "tpnIwJDz4e"
@ -76,7 +74,7 @@ def test_invalid_ip(client):
def test_not_ip_filter(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"bitbucket": {
"secret": "tpnIwJDz4e",
@ -95,16 +93,16 @@ def test_not_ip_filter(client):
def test_push_event_detected(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
url = reverse("bitbucket-hook-list")
url = "%s?project=%s"%(url, project.id)
url = "%s?project=%s" % (url, project.id)
data = {'payload': ['{"commits": [{"message": "test message"}]}']}
BitBucketViewSet._validate_signature = mock.Mock(return_value=True)
with mock.patch.object(event_hooks.PushEventHook, "process_event") as process_event_mock:
response = client.post(url, urllib.parse.urlencode(data, True),
content_type="application/x-www-form-urlencoded")
content_type="application/x-www-form-urlencoded")
assert process_event_mock.call_count == 1
@ -114,11 +112,11 @@ def test_push_event_detected(client):
def test_push_event_issue_processing(client):
creation_status = f.IssueStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_issues"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.IssueStatusFactory(project=creation_status.project)
issue = f.IssueFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = [
'{"commits": [{"message": "test message test TG-%s #%s ok bye!"}]}'%(issue.ref, new_status.slug)
'{"commits": [{"message": "test message test TG-%s #%s ok bye!"}]}' % (issue.ref, new_status.slug)
]
mail.outbox = []
ev_hook = event_hooks.PushEventHook(issue.project, payload)
@ -131,11 +129,11 @@ def test_push_event_issue_processing(client):
def test_push_event_task_processing(client):
creation_status = f.TaskStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_tasks"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.TaskStatusFactory(project=creation_status.project)
task = f.TaskFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = [
'{"commits": [{"message": "test message test TG-%s #%s ok bye!"}]}'%(task.ref, new_status.slug)
'{"commits": [{"message": "test message test TG-%s #%s ok bye!"}]}' % (task.ref, new_status.slug)
]
mail.outbox = []
ev_hook = event_hooks.PushEventHook(task.project, payload)
@ -148,11 +146,11 @@ def test_push_event_task_processing(client):
def test_push_event_user_story_processing(client):
creation_status = f.UserStoryStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_us"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.UserStoryStatusFactory(project=creation_status.project)
user_story = f.UserStoryFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = [
'{"commits": [{"message": "test message test TG-%s #%s ok bye!"}]}'%(user_story.ref, new_status.slug)
'{"commits": [{"message": "test message test TG-%s #%s ok bye!"}]}' % (user_story.ref, new_status.slug)
]
mail.outbox = []
ev_hook = event_hooks.PushEventHook(user_story.project, payload)
@ -165,11 +163,11 @@ def test_push_event_user_story_processing(client):
def test_push_event_processing_case_insensitive(client):
creation_status = f.TaskStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_tasks"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.TaskStatusFactory(project=creation_status.project)
task = f.TaskFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = [
'{"commits": [{"message": "test message test tg-%s #%s ok bye!"}]}'%(task.ref, new_status.slug.upper())
'{"commits": [{"message": "test message test tg-%s #%s ok bye!"}]}' % (task.ref, new_status.slug.upper())
]
mail.outbox = []
ev_hook = event_hooks.PushEventHook(task.project, payload)
@ -182,7 +180,7 @@ def test_push_event_processing_case_insensitive(client):
def test_push_event_task_bad_processing_non_existing_ref(client):
issue_status = f.IssueStatusFactory()
payload = [
'{"commits": [{"message": "test message test TG-6666666 #%s ok bye!"}]}'%(issue_status.slug)
'{"commits": [{"message": "test message test TG-6666666 #%s ok bye!"}]}' % (issue_status.slug)
]
mail.outbox = []
@ -197,7 +195,7 @@ def test_push_event_task_bad_processing_non_existing_ref(client):
def test_push_event_us_bad_processing_non_existing_status(client):
user_story = f.UserStoryFactory.create()
payload = [
'{"commits": [{"message": "test message test TG-%s #non-existing-slug ok bye!"}]}'%(user_story.ref)
'{"commits": [{"message": "test message test TG-%s #non-existing-slug ok bye!"}]}' % (user_story.ref)
]
mail.outbox = []
@ -213,7 +211,7 @@ def test_push_event_us_bad_processing_non_existing_status(client):
def test_push_event_bad_processing_non_existing_status(client):
issue = f.IssueFactory.create()
payload = [
'{"commits": [{"message": "test message test TG-%s #non-existing-slug ok bye!"}]}'%(issue.ref)
'{"commits": [{"message": "test message test TG-%s #non-existing-slug ok bye!"}]}' % (issue.ref)
]
mail.outbox = []
@ -227,7 +225,7 @@ def test_push_event_bad_processing_non_existing_status(client):
def test_api_get_project_modules(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("projects-modules", args=(project.id,))
@ -242,7 +240,7 @@ def test_api_get_project_modules(client):
def test_api_patch_project_modules(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("projects-modules", args=(project.id,))
@ -261,6 +259,7 @@ def test_api_patch_project_modules(client):
assert config["bitbucket"]["secret"] == "test_secret"
assert config["bitbucket"]["webhooks_url"] != "test_url"
def test_replace_bitbucket_references():
assert event_hooks.replace_bitbucket_references("project-url", "#2") == "[BitBucket#2](project-url/issues/2)"
assert event_hooks.replace_bitbucket_references("project-url", "#2 ") == "[BitBucket#2](project-url/issues/2) "

View File

@ -23,20 +23,20 @@ pytestmark = pytest.mark.django_db
def test_bad_signature(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
url = reverse("github-hook-list")
url = "%s?project=%s"%(url, project.id)
url = "%s?project=%s" % (url, project.id)
data = {}
response = client.post(url, json.dumps(data),
HTTP_X_HUB_SIGNATURE="sha1=badbadbad",
content_type="application/json")
HTTP_X_HUB_SIGNATURE="sha1=badbadbad",
content_type="application/json")
response_content = json.loads(response.content.decode("utf-8"))
assert response.status_code == 400
assert "Bad signature" in response_content["_error_message"]
def test_ok_signature(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"github": {
"secret": "tpnIwJDz4e"
@ -44,29 +44,29 @@ def test_ok_signature(client):
})
url = reverse("github-hook-list")
url = "%s?project=%s"%(url, project.id)
url = "%s?project=%s" % (url, project.id)
data = {"test:": "data"}
response = client.post(url, json.dumps(data),
HTTP_X_HUB_SIGNATURE="sha1=3c8e83fdaa266f81c036ea0b71e98eb5e054581a",
content_type="application/json")
HTTP_X_HUB_SIGNATURE="sha1=3c8e83fdaa266f81c036ea0b71e98eb5e054581a",
content_type="application/json")
assert response.status_code == 204
def test_push_event_detected(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
url = reverse("github-hook-list")
url = "%s?project=%s"%(url, project.id)
url = "%s?project=%s" % (url, project.id)
data = {"commits": [
{"message": "test message"},
{"message": "test message"},
]}
GitHubViewSet._validate_signature = mock.Mock(return_value=True)
with mock.patch.object(event_hooks.PushEventHook, "process_event") as process_event_mock:
response = client.post(url, json.dumps(data),
HTTP_X_GITHUB_EVENT="push",
content_type="application/json")
HTTP_X_GITHUB_EVENT="push",
content_type="application/json")
assert process_event_mock.call_count == 1
@ -76,14 +76,14 @@ def test_push_event_detected(client):
def test_push_event_issue_processing(client):
creation_status = f.IssueStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_issues"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.IssueStatusFactory(project=creation_status.project)
issue = f.IssueFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test TG-%s #%s ok
bye!
"""%(issue.ref, new_status.slug)},
""" % (issue.ref, new_status.slug)},
]}
mail.outbox = []
ev_hook = event_hooks.PushEventHook(issue.project, payload)
@ -96,14 +96,14 @@ def test_push_event_issue_processing(client):
def test_push_event_task_processing(client):
creation_status = f.TaskStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_tasks"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.TaskStatusFactory(project=creation_status.project)
task = f.TaskFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test TG-%s #%s ok
bye!
"""%(task.ref, new_status.slug)},
""" % (task.ref, new_status.slug)},
]}
mail.outbox = []
ev_hook = event_hooks.PushEventHook(task.project, payload)
@ -116,14 +116,14 @@ def test_push_event_task_processing(client):
def test_push_event_user_story_processing(client):
creation_status = f.UserStoryStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_us"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.UserStoryStatusFactory(project=creation_status.project)
user_story = f.UserStoryFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test TG-%s #%s ok
bye!
"""%(user_story.ref, new_status.slug)},
""" % (user_story.ref, new_status.slug)},
]}
mail.outbox = []
@ -137,14 +137,14 @@ def test_push_event_user_story_processing(client):
def test_push_event_processing_case_insensitive(client):
creation_status = f.TaskStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_tasks"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.TaskStatusFactory(project=creation_status.project)
task = f.TaskFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test tg-%s #%s ok
bye!
"""%(task.ref, new_status.slug.upper())},
""" % (task.ref, new_status.slug.upper())},
]}
mail.outbox = []
ev_hook = event_hooks.PushEventHook(task.project, payload)
@ -160,7 +160,7 @@ def test_push_event_task_bad_processing_non_existing_ref(client):
{"message": """test message
test TG-6666666 #%s ok
bye!
"""%(issue_status.slug)},
""" % (issue_status.slug)},
]}
mail.outbox = []
@ -178,7 +178,7 @@ def test_push_event_us_bad_processing_non_existing_status(client):
{"message": """test message
test TG-%s #non-existing-slug ok
bye!
"""%(user_story.ref)},
""" % (user_story.ref)},
]}
mail.outbox = []
@ -197,7 +197,7 @@ def test_push_event_bad_processing_non_existing_status(client):
{"message": """test message
test TG-%s #non-existing-slug ok
bye!
"""%(issue.ref)},
""" % (issue.ref)},
]}
mail.outbox = []
@ -244,6 +244,7 @@ def test_issues_event_opened_issue(client):
assert Issue.objects.count() == 2
assert len(mail.outbox) == 1
def test_issues_event_other_than_opened_issue(client):
issue = f.IssueFactory.create()
issue.project.default_issue_status = issue.status
@ -271,6 +272,7 @@ def test_issues_event_other_than_opened_issue(client):
assert Issue.objects.count() == 1
assert len(mail.outbox) == 0
def test_issues_event_bad_issue(client):
issue = f.IssueFactory.create()
issue.project.default_issue_status = issue.status
@ -301,7 +303,7 @@ def test_issues_event_bad_issue(client):
def test_issue_comment_event_on_existing_issue_task_and_us(client):
project = f.ProjectFactory()
role = f.RoleFactory(project=project, permissions=["view_tasks", "view_issues", "view_us"])
membership = f.MembershipFactory(project=project, role=role, user=project.owner)
f.MembershipFactory(project=project, role=role, user=project.owner)
user = f.UserFactory()
issue = f.IssueFactory.create(external_reference=["github", "http://github.com/test/project/issues/11"], owner=project.owner, project=project)
@ -412,7 +414,7 @@ def test_issues_event_bad_comment(client):
def test_api_get_project_modules(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("projects-modules", args=(project.id,))
@ -427,7 +429,7 @@ def test_api_get_project_modules(client):
def test_api_patch_project_modules(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("projects-modules", args=(project.id,))
@ -446,6 +448,7 @@ def test_api_patch_project_modules(client):
assert config["github"]["secret"] == "test_secret"
assert config["github"]["webhooks_url"] != "test_url"
def test_replace_github_references():
assert event_hooks.replace_github_references("project-url", "#2") == "[GitHub#2](project-url/issues/2)"
assert event_hooks.replace_github_references("project-url", "#2 ") == "[GitHub#2](project-url/issues/2) "

View File

@ -13,7 +13,6 @@ from taiga.projects.issues.models import Issue
from taiga.projects.tasks.models import Task
from taiga.projects.userstories.models import UserStory
from taiga.projects.models import Membership
from taiga.projects.history.services import get_history_queryset_by_model_instance, take_snapshot
from taiga.projects.notifications.choices import NotifyLevel
from taiga.projects.notifications.models import NotifyPolicy
from taiga.projects import services
@ -21,8 +20,9 @@ from .. import factories as f
pytestmark = pytest.mark.django_db
def test_bad_signature(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"gitlab": {
"secret": "tpnIwJDz4e"
@ -39,7 +39,7 @@ def test_bad_signature(client):
def test_ok_signature(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"gitlab": {
"secret": "tpnIwJDz4e",
@ -59,7 +59,7 @@ def test_ok_signature(client):
def test_invalid_ip(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"gitlab": {
"secret": "tpnIwJDz4e",
@ -79,7 +79,7 @@ def test_invalid_ip(client):
def test_not_ip_filter(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
f.ProjectModulesConfigFactory(project=project, config={
"gitlab": {
"secret": "tpnIwJDz4e",
@ -99,19 +99,19 @@ def test_not_ip_filter(client):
def test_push_event_detected(client):
project=f.ProjectFactory()
project = f.ProjectFactory()
url = reverse("gitlab-hook-list")
url = "%s?project=%s"%(url, project.id)
url = "%s?project=%s" % (url, project.id)
data = {"commits": [
{"message": "test message"},
{"message": "test message"},
]}
GitLabViewSet._validate_signature = mock.Mock(return_value=True)
with mock.patch.object(event_hooks.PushEventHook, "process_event") as process_event_mock:
response = client.post(url, json.dumps(data),
HTTP_X_GITHUB_EVENT="push",
content_type="application/json")
HTTP_X_GITHUB_EVENT="push",
content_type="application/json")
assert process_event_mock.call_count == 1
@ -121,14 +121,14 @@ def test_push_event_detected(client):
def test_push_event_issue_processing(client):
creation_status = f.IssueStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_issues"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.IssueStatusFactory(project=creation_status.project)
issue = f.IssueFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test TG-%s #%s ok
bye!
"""%(issue.ref, new_status.slug)},
""" % (issue.ref, new_status.slug)},
]}
mail.outbox = []
ev_hook = event_hooks.PushEventHook(issue.project, payload)
@ -141,14 +141,14 @@ def test_push_event_issue_processing(client):
def test_push_event_task_processing(client):
creation_status = f.TaskStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_tasks"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.TaskStatusFactory(project=creation_status.project)
task = f.TaskFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test TG-%s #%s ok
bye!
"""%(task.ref, new_status.slug)},
""" % (task.ref, new_status.slug)},
]}
mail.outbox = []
ev_hook = event_hooks.PushEventHook(task.project, payload)
@ -161,14 +161,14 @@ def test_push_event_task_processing(client):
def test_push_event_user_story_processing(client):
creation_status = f.UserStoryStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_us"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.UserStoryStatusFactory(project=creation_status.project)
user_story = f.UserStoryFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test TG-%s #%s ok
bye!
"""%(user_story.ref, new_status.slug)},
""" % (user_story.ref, new_status.slug)},
]}
mail.outbox = []
@ -182,14 +182,14 @@ def test_push_event_user_story_processing(client):
def test_push_event_processing_case_insensitive(client):
creation_status = f.TaskStatusFactory()
role = f.RoleFactory(project=creation_status.project, permissions=["view_tasks"])
membership = f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
f.MembershipFactory(project=creation_status.project, role=role, user=creation_status.project.owner)
new_status = f.TaskStatusFactory(project=creation_status.project)
task = f.TaskFactory.create(status=creation_status, project=creation_status.project, owner=creation_status.project.owner)
payload = {"commits": [
{"message": """test message
test tg-%s #%s ok
bye!
"""%(task.ref, new_status.slug.upper())},
""" % (task.ref, new_status.slug.upper())},
]}
mail.outbox = []
ev_hook = event_hooks.PushEventHook(task.project, payload)
@ -205,7 +205,7 @@ def test_push_event_task_bad_processing_non_existing_ref(client):
{"message": """test message
test TG-6666666 #%s ok
bye!
"""%(issue_status.slug)},
""" % (issue_status.slug)},
]}
mail.outbox = []
@ -223,7 +223,7 @@ def test_push_event_us_bad_processing_non_existing_status(client):
{"message": """test message
test TG-%s #non-existing-slug ok
bye!
"""%(user_story.ref)},
""" % (user_story.ref)},
]}
mail.outbox = []
@ -242,7 +242,7 @@ def test_push_event_bad_processing_non_existing_status(client):
{"message": """test message
test TG-%s #non-existing-slug ok
bye!
"""%(issue.ref)},
""" % (issue.ref)},
]}
mail.outbox = []
@ -342,7 +342,7 @@ def test_issues_event_bad_issue(client):
def test_api_get_project_modules(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("projects-modules", args=(project.id,))
@ -357,7 +357,7 @@ def test_api_get_project_modules(client):
def test_api_patch_project_modules(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("projects-modules", args=(project.id,))
@ -376,6 +376,7 @@ def test_api_patch_project_modules(client):
assert config["gitlab"]["secret"] == "test_secret"
assert config["gitlab"]["webhooks_url"] != "test_url"
def test_replace_gitlab_references():
assert event_hooks.replace_gitlab_references("project-url", "#2") == "[GitLab#2](project-url/issues/2)"
assert event_hooks.replace_gitlab_references("project-url", "#2 ") == "[GitLab#2](project-url/issues/2) "

View File

@ -16,7 +16,6 @@
import pytest
import base64
import datetime
from django.core.urlresolvers import reverse
from django.core.files.base import ContentFile
@ -30,9 +29,6 @@ from taiga.projects.userstories.models import UserStory
from taiga.projects.tasks.models import Task
from taiga.projects.wiki.models import WikiPage
from taiga.export_import.service import project_to_dict
from taiga.export_import.dump_service import dict_to_project
pytestmark = pytest.mark.django_db
@ -46,6 +42,7 @@ def test_invalid_project_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_project_import_without_extra_data(client):
user = f.UserFactory.create()
client.login(user)
@ -68,6 +65,7 @@ def test_valid_project_import_without_extra_data(client):
assert all(map(lambda x: len(response_data[x]) == 0, must_empty_children))
assert response_data["owner"] == user.email
def test_valid_project_import_with_not_existing_memberships(client):
user = f.UserFactory.create()
client.login(user)
@ -89,6 +87,7 @@ def test_valid_project_import_with_not_existing_memberships(client):
# The new membership and the owner membership
assert len(response_data["memberships"]) == 2
def test_valid_project_import_with_extra_data(client):
user = f.UserFactory.create()
client.login(user)
@ -142,6 +141,7 @@ def test_valid_project_import_with_extra_data(client):
assert all(map(lambda x: len(response_data[x]) == 1, must_one_instance_children))
assert response_data["owner"] == user.email
def test_invalid_project_import_with_extra_data(client):
user = f.UserFactory.create()
client.login(user)
@ -150,14 +150,14 @@ def test_invalid_project_import_with_extra_data(client):
data = {
"name": "Imported project",
"description": "Imported project",
"roles": [{ }],
"us_statuses": [{ }],
"severities": [{ }],
"priorities": [{ }],
"points": [{ }],
"issue_types": [{ }],
"task_statuses": [{ }],
"issue_statuses": [{ }],
"roles": [{}],
"us_statuses": [{}],
"severities": [{}],
"priorities": [{}],
"points": [{}],
"issue_types": [{}],
"task_statuses": [{}],
"issue_statuses": [{}],
}
response = client.post(url, json.dumps(data), content_type="application/json")
@ -166,10 +166,11 @@ def test_invalid_project_import_with_extra_data(client):
assert len(response_data) == 8
assert Project.objects.filter(slug="imported-project").count() == 0
def test_invalid_issue_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-issue", args=[project.pk])
@ -178,10 +179,11 @@ def test_invalid_issue_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_user_story_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_us_status = f.UserStoryStatusFactory.create(project=project)
project.save()
client.login(user)
@ -202,7 +204,7 @@ def test_valid_user_story_import(client):
def test_valid_issue_import_without_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_issue_type = f.IssueTypeFactory.create(project=project)
project.default_issue_status = f.IssueStatusFactory.create(project=project)
project.default_severity = f.SeverityFactory.create(project=project)
@ -221,10 +223,11 @@ def test_valid_issue_import_without_extra_data(client):
assert response_data["owner"] == user.email
assert response_data["ref"] is not None
def test_valid_issue_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_issue_type = f.IssueTypeFactory.create(project=project)
project.default_issue_status = f.IssueStatusFactory.create(project=project)
project.default_severity = f.SeverityFactory.create(project=project)
@ -254,10 +257,11 @@ def test_valid_issue_import_with_extra_data(client):
assert response_data["ref"] is not None
assert response_data["finished_date"] == "2014-10-24T00:00:00+0000"
def test_invalid_issue_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_issue_type = f.IssueTypeFactory.create(project=project)
project.default_issue_status = f.IssueStatusFactory.create(project=project)
project.default_severity = f.SeverityFactory.create(project=project)
@ -269,7 +273,7 @@ def test_invalid_issue_import_with_extra_data(client):
data = {
"subject": "Imported issue",
"description": "Imported issue",
"attachments": [{ }],
"attachments": [{}],
}
response = client.post(url, json.dumps(data), content_type="application/json")
@ -278,10 +282,11 @@ def test_invalid_issue_import_with_extra_data(client):
assert len(response_data) == 1
assert Issue.objects.filter(subject="Imported issue").count() == 0
def test_invalid_issue_import_with_bad_choices(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_issue_type = f.IssueTypeFactory.create(project=project)
project.default_issue_status = f.IssueStatusFactory.create(project=project)
project.default_severity = f.SeverityFactory.create(project=project)
@ -337,10 +342,11 @@ def test_invalid_issue_import_with_bad_choices(client):
response_data = json.loads(response.content.decode("utf-8"))
assert len(response_data) == 1
def test_invalid_us_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-us", args=[project.pk])
@ -349,10 +355,11 @@ def test_invalid_us_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_us_import_without_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_us_status = f.UserStoryStatusFactory.create(project=project)
project.save()
client.login(user)
@ -368,10 +375,11 @@ def test_valid_us_import_without_extra_data(client):
assert response_data["owner"] == user.email
assert response_data["ref"] is not None
def test_valid_us_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_us_status = f.UserStoryStatusFactory.create(project=project)
project.save()
client.login(user)
@ -396,10 +404,11 @@ def test_valid_us_import_with_extra_data(client):
assert response_data["owner"] == user.email
assert response_data["ref"] is not None
def test_invalid_us_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_us_status = f.UserStoryStatusFactory.create(project=project)
project.save()
client.login(user)
@ -408,7 +417,7 @@ def test_invalid_us_import_with_extra_data(client):
data = {
"subject": "Imported us",
"description": "Imported us",
"attachments": [{ }],
"attachments": [{}],
}
response = client.post(url, json.dumps(data), content_type="application/json")
@ -417,10 +426,11 @@ def test_invalid_us_import_with_extra_data(client):
assert len(response_data) == 1
assert UserStory.objects.filter(subject="Imported us").count() == 0
def test_invalid_us_import_with_bad_choices(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_us_status = f.UserStoryStatusFactory.create(project=project)
project.save()
client.login(user)
@ -437,10 +447,11 @@ def test_invalid_us_import_with_bad_choices(client):
response_data = json.loads(response.content.decode("utf-8"))
assert len(response_data) == 1
def test_invalid_task_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-task", args=[project.pk])
@ -449,10 +460,11 @@ def test_invalid_task_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_task_import_without_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_task_status = f.TaskStatusFactory.create(project=project)
project.save()
client.login(user)
@ -468,10 +480,11 @@ def test_valid_task_import_without_extra_data(client):
assert response_data["owner"] == user.email
assert response_data["ref"] is not None
def test_valid_task_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_task_status = f.TaskStatusFactory.create(project=project)
project.save()
client.login(user)
@ -496,10 +509,11 @@ def test_valid_task_import_with_extra_data(client):
assert response_data["owner"] == user.email
assert response_data["ref"] is not None
def test_invalid_task_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_task_status = f.TaskStatusFactory.create(project=project)
project.save()
client.login(user)
@ -508,7 +522,7 @@ def test_invalid_task_import_with_extra_data(client):
data = {
"subject": "Imported task",
"description": "Imported task",
"attachments": [{ }],
"attachments": [{}],
}
response = client.post(url, json.dumps(data), content_type="application/json")
@ -517,10 +531,11 @@ def test_invalid_task_import_with_extra_data(client):
assert len(response_data) == 1
assert Task.objects.filter(subject="Imported task").count() == 0
def test_invalid_task_import_with_bad_choices(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_task_status = f.TaskStatusFactory.create(project=project)
project.save()
client.login(user)
@ -537,10 +552,11 @@ def test_invalid_task_import_with_bad_choices(client):
response_data = json.loads(response.content.decode("utf-8"))
assert len(response_data) == 1
def test_valid_task_with_user_story(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
project.default_task_status = f.TaskStatusFactory.create(project=project)
us = f.UserStoryFactory.create(project=project)
project.save()
@ -557,10 +573,11 @@ def test_valid_task_with_user_story(client):
assert response.status_code == 201
assert us.tasks.all().count() == 1
def test_invalid_wiki_page_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-wiki-page", args=[project.pk])
@ -569,10 +586,11 @@ def test_invalid_wiki_page_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_wiki_page_import_without_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-wiki-page", args=[project.pk])
@ -585,10 +603,11 @@ def test_valid_wiki_page_import_without_extra_data(client):
response_data = json.loads(response.content.decode("utf-8"))
assert response_data["owner"] == user.email
def test_valid_wiki_page_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-wiki-page", args=[project.pk])
@ -610,17 +629,18 @@ def test_valid_wiki_page_import_with_extra_data(client):
assert len(response_data["attachments"]) == 1
assert response_data["owner"] == user.email
def test_invalid_wiki_page_import_with_extra_data(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-wiki-page", args=[project.pk])
data = {
"slug": "imported-wiki-page",
"content": "Imported wiki_page",
"attachments": [{ }],
"attachments": [{}],
}
response = client.post(url, json.dumps(data), content_type="application/json")
@ -629,10 +649,11 @@ def test_invalid_wiki_page_import_with_extra_data(client):
assert len(response_data) == 1
assert WikiPage.objects.filter(slug="imported-wiki-page").count() == 0
def test_invalid_wiki_link_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-wiki-link", args=[project.pk])
@ -641,10 +662,11 @@ def test_invalid_wiki_link_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_wiki_link_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-wiki-link", args=[project.pk])
@ -655,12 +677,13 @@ def test_valid_wiki_link_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 201
response_data = json.loads(response.content.decode("utf-8"))
json.loads(response.content.decode("utf-8"))
def test_invalid_milestone_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-milestone", args=[project.pk])
@ -669,10 +692,11 @@ def test_invalid_milestone_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
def test_valid_milestone_import(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-milestone", args=[project.pk])
@ -684,12 +708,13 @@ def test_valid_milestone_import(client):
response = client.post(url, json.dumps(data), content_type="application/json")
assert response.status_code == 201
response_data = json.loads(response.content.decode("utf-8"))
json.loads(response.content.decode("utf-8"))
def test_milestone_import_duplicated_milestone(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory(project=project, user=user, is_owner=True)
f.MembershipFactory(project=project, user=user, is_owner=True)
client.login(user)
url = reverse("importer-milestone", args=[project.pk])
@ -705,6 +730,7 @@ def test_milestone_import_duplicated_milestone(client):
response_data = json.loads(response.content.decode("utf-8"))
assert response_data["milestones"][0]["name"][0] == "Name duplicated for the project"
def test_invalid_dump_import(client):
user = f.UserFactory.create()
client.login(user)
@ -719,6 +745,7 @@ def test_invalid_dump_import(client):
response_data = json.loads(response.content.decode("utf-8"))
assert response_data["_error_message"] == "Invalid dump format"
def test_valid_dump_import_with_celery_disabled(client, settings):
settings.CELERY_ENABLED = False
@ -740,6 +767,7 @@ def test_valid_dump_import_with_celery_disabled(client, settings):
assert "id" in response_data
assert response_data["name"] == "Valid project"
def test_valid_dump_import_with_celery_enabled(client, settings):
settings.CELERY_ENABLED = True
@ -760,6 +788,7 @@ def test_valid_dump_import_with_celery_enabled(client, settings):
response_data = json.loads(response.content.decode("utf-8"))
assert "import_id" in response_data
def test_dump_import_duplicated_project(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
@ -780,6 +809,7 @@ def test_dump_import_duplicated_project(client):
assert response_data["name"] == "Test import"
assert response_data["slug"] == "{}-test-import".format(user.username)
def test_dump_import_throttling(client, settings):
settings.REST_FRAMEWORK["DEFAULT_THROTTLE_RATES"]["import-dump-mode"] = "1/minute"

View File

@ -45,7 +45,7 @@ def test_update_issues_order_in_bulk():
def test_api_create_issues_in_bulk(client):
project = f.create_project()
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("issues-bulk-create")
@ -86,6 +86,7 @@ def test_api_filter_by_text_1(client):
assert response.status_code == 200
assert number_of_issues == 1
def test_api_filter_by_text_2(client):
user = f.UserFactory(is_superuser=True)
f.create_issue(owner=user)
@ -100,6 +101,7 @@ def test_api_filter_by_text_2(client):
assert response.status_code == 200
assert number_of_issues == 1
def test_api_filter_by_text_3(client):
user = f.UserFactory(is_superuser=True)
f.create_issue(owner=user)
@ -114,6 +116,7 @@ def test_api_filter_by_text_3(client):
assert response.status_code == 200
assert number_of_issues == 2
def test_api_filter_by_text_4(client):
user = f.UserFactory(is_superuser=True)
f.create_issue(owner=user)
@ -128,6 +131,7 @@ def test_api_filter_by_text_4(client):
assert response.status_code == 200
assert number_of_issues == 0
def test_api_filter_by_text_5(client):
user = f.UserFactory(is_superuser=True)
f.create_issue(owner=user)

View File

@ -34,7 +34,7 @@ def test_api_create_bulk_members(client):
joseph = f.UserFactory.create()
tester = f.RoleFactory(project=project, name="Tester")
gamer = f.RoleFactory(project=project, name="Gamer")
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("memberships-bulk-create")
@ -52,10 +52,11 @@ def test_api_create_bulk_members(client):
assert response.data[0]["email"] == john.email
assert response.data[1]["email"] == joseph.email
def test_api_create_bulk_members_with_extra_text(client, outbox):
project = f.ProjectFactory()
tester = f.RoleFactory(project=project, name="Tester")
membership = f.MembershipFactory(project=project, user=project.owner, is_owner=True)
f.MembershipFactory(project=project, user=project.owner, is_owner=True)
url = reverse("memberships-bulk-create")
invitation_extra_text = "this is a not so random invitation text"
@ -77,9 +78,10 @@ def test_api_create_bulk_members_with_extra_text(client, outbox):
assert message.to == ["john@email.com"]
assert "this is a not so random invitation text" in message.body
def test_api_resend_invitation(client, outbox):
invitation = f.create_invitation()
membership = f.MembershipFactory(project=invitation.project, user=invitation.project.owner, is_owner=True)
f.MembershipFactory(project=invitation.project, user=invitation.project.owner, is_owner=True)
url = reverse("memberships-resend-invitation", kwargs={"pk": invitation.pk})
client.login(invitation.project.owner)
@ -94,7 +96,7 @@ def test_api_invite_existing_user(client, outbox):
"Should create the invitation linked to that user"
user = f.UserFactory.create()
role = f.RoleFactory.create()
membership = f.MembershipFactory(project=role.project, user=role.project.owner, is_owner=True)
f.MembershipFactory(project=role.project, user=role.project.owner, is_owner=True)
client.login(role.project.owner)
@ -189,7 +191,7 @@ def test_api_delete_membership(client):
def test_api_delete_membership_without_user(client):
membership_owner = f.MembershipFactory(is_owner=True)
membership_without_user_one = f.MembershipFactory(project=membership_owner.project, user=None)
membership_without_user_two = f.MembershipFactory(project=membership_owner.project, user=None)
f.MembershipFactory(project=membership_owner.project, user=None)
client.login(membership_owner.user)
url = reverse("memberships-detail", args=[membership_without_user_one.id])
response = client.json.delete(url)

View File

@ -16,9 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import pytest
from unittest.mock import patch, Mock
from django.apps import apps
from django.core.urlresolvers import reverse
from taiga.base.utils import json
@ -29,13 +27,14 @@ from .. import factories as f
pytestmark = pytest.mark.django_db
def test_update_milestone_with_userstories_list(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
role = f.RoleFactory.create(project=project)
member = f.MembershipFactory.create(project=project, user=user, role=role, is_owner=True)
f.MembershipFactory.create(project=project, user=user, role=role, is_owner=True)
sprint = f.MilestoneFactory.create(project=project, owner=user)
points = f.PointsFactory.create(project=project, value=None)
f.PointsFactory.create(project=project, value=None)
us = f.UserStoryFactory.create(project=project, owner=user)
url = reverse("milestones-detail", args=[sprint.pk])

View File

@ -15,8 +15,6 @@
# 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 functools import partial
import pytest
from taiga.projects.userstories.models import UserStory

View File

@ -45,7 +45,7 @@ def mail():
def test_attach_notify_policy_to_project_queryset():
project1 = f.ProjectFactory.create()
project2 = f.ProjectFactory.create()
f.ProjectFactory.create()
qs = project1.__class__.objects.order_by("id")
qs = services.attach_notify_policy_to_project_queryset(project1.owner, qs)
@ -115,7 +115,7 @@ def test_users_to_notify():
policy_model_cls = apps.get_model("notifications", "NotifyPolicy")
policy1 = policy_model_cls.objects.get(user=member1.user)
policy2 = policy_model_cls.objects.get(user=member2.user)
policy_model_cls.objects.get(user=member2.user)
policy3 = policy_model_cls.objects.get(user=member3.user)
history = MagicMock()
@ -197,7 +197,6 @@ def test_send_notifications_using_services_method(settings, mail):
services.send_notifications(issue,
history=history_delete)
# Userstories
us = f.UserStoryFactory.create(project=project, owner=member2.user)
take_snapshot(us)
@ -240,6 +239,7 @@ def test_send_notifications_using_services_method(settings, mail):
services.process_sync_notifications()
assert len(mail.outbox) == 12
def test_resource_notification_test(client, settings, mail):
settings.CHANGE_NOTIFICATIONS_MIN_INTERVAL = 1
@ -247,8 +247,8 @@ def test_resource_notification_test(client, settings, mail):
user2 = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user1)
role = f.RoleFactory.create(project=project, permissions=["view_issues"])
member1 = f.MembershipFactory.create(project=project, user=user1, role=role, is_owner=True)
member2 = f.MembershipFactory.create(project=project, user=user2, role=role)
f.MembershipFactory.create(project=project, user=user1, role=role, is_owner=True)
f.MembershipFactory.create(project=project, user=user2, role=role)
issue = f.IssueFactory.create(owner=user2, project=project)
mock_path = "taiga.projects.issues.api.IssueViewSet.pre_conditions_on_save"
@ -256,7 +256,7 @@ def test_resource_notification_test(client, settings, mail):
client.login(user1)
with patch(mock_path) as m:
with patch(mock_path):
data = {"subject": "Fooooo", "version": issue.version}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -267,7 +267,7 @@ def test_resource_notification_test(client, settings, mail):
assert len(mail.outbox) == 1
assert models.HistoryChangeNotification.objects.count() == 0
with patch(mock_path) as m:
with patch(mock_path):
response = client.delete(url)
assert response.status_code == 204
assert len(mail.outbox) == 1
@ -285,8 +285,8 @@ def test_watchers_assignation_for_issue(client):
project2 = f.ProjectFactory.create(owner=user2)
role1 = f.RoleFactory.create(project=project1)
role2 = f.RoleFactory.create(project=project2)
member1 = f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True)
member2 = f.MembershipFactory.create(project=project2, user=user2, role=role2)
f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True)
f.MembershipFactory.create(project=project2, user=user2, role=role2)
client.login(user1)
@ -298,7 +298,6 @@ def test_watchers_assignation_for_issue(client):
response = client.json.patch(url, json.dumps(data))
assert response.status_code == 200, response.content
issue = f.create_issue(project=project1, owner=user1)
data = {"version": issue.version,
"watchers": [user1.pk, user2.pk]}
@ -338,8 +337,8 @@ def test_watchers_assignation_for_task(client):
project2 = f.ProjectFactory.create(owner=user2)
role1 = f.RoleFactory.create(project=project1)
role2 = f.RoleFactory.create(project=project2)
member1 = f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True)
member2 = f.MembershipFactory.create(project=project2, user=user2, role=role2)
f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True)
f.MembershipFactory.create(project=project2, user=user2, role=role2)
client.login(user1)
@ -351,7 +350,6 @@ def test_watchers_assignation_for_task(client):
response = client.json.patch(url, json.dumps(data))
assert response.status_code == 200, response.content
task = f.create_task(project=project1, owner=user1)
data = {"version": task.version,
"watchers": [user1.pk, user2.pk]}
@ -391,8 +389,8 @@ def test_watchers_assignation_for_us(client):
project2 = f.ProjectFactory.create(owner=user2)
role1 = f.RoleFactory.create(project=project1)
role2 = f.RoleFactory.create(project=project2)
member1 = f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True)
member2 = f.MembershipFactory.create(project=project2, user=user2, role=role2)
f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True)
f.MembershipFactory.create(project=project2, user=user2, role=role2)
client.login(user1)
@ -404,7 +402,6 @@ def test_watchers_assignation_for_us(client):
response = client.json.patch(url, json.dumps(data))
assert response.status_code == 200
us = f.create_userstory(project=project1, owner=user1)
data = {"version": us.version,
"watchers": [user1.pk, user2.pk]}
@ -440,7 +437,6 @@ def test_watchers_assignation_for_us(client):
def test_retrieve_notify_policies_by_anonymous_user(client):
project = f.ProjectFactory.create()
policy_model_cls = apps.get_model("notifications", "NotifyPolicy")
policy = services.get_notify_policy(project, project.owner)
url = reverse("notifications-detail", args=[policy.pk])

View File

@ -20,10 +20,6 @@ from unittest.mock import patch
from django.core.urlresolvers import reverse
from taiga.base.utils import json
from taiga.projects.issues.models import Issue
from taiga.projects.wiki.models import WikiPage
from taiga.projects.userstories.models import UserStory
from taiga.projects.tasks.models import Task
from .. import factories as f
@ -33,7 +29,7 @@ pytestmark = pytest.mark.django_db
def test_valid_us_creation(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
@ -50,28 +46,28 @@ def test_valid_us_creation(client):
def test_invalid_concurrent_save_for_issue(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.issues.api.IssueViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("issues-list")
data = {"subject": "test",
"project": project.id,
"status": f.IssueStatusFactory.create(project=project).id,
"severity": f.SeverityFactory.create(project=project).id,
"type": f.IssueTypeFactory.create(project=project).id,
"priority": f.PriorityFactory.create(project=project).id}
"project": project.id,
"status": f.IssueStatusFactory.create(project=project).id,
"severity": f.SeverityFactory.create(project=project).id,
"type": f.IssueTypeFactory.create(project=project).id,
"priority": f.PriorityFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201, response.content
issue_id = json.loads(response.content)["id"]
url = reverse("issues-detail", args=(issue_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "subject": "test 2"}
data = {"version": 1, "subject": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
@ -79,28 +75,28 @@ def test_invalid_concurrent_save_for_issue(client):
def test_valid_concurrent_save_for_issue_different_versions(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.issues.api.IssueViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("issues-list")
data = {"subject": "test",
"project": project.id,
"status": f.IssueStatusFactory.create(project=project).id,
"severity": f.SeverityFactory.create(project=project).id,
"type": f.IssueTypeFactory.create(project=project).id,
"priority": f.PriorityFactory.create(project=project).id}
"project": project.id,
"status": f.IssueStatusFactory.create(project=project).id,
"severity": f.SeverityFactory.create(project=project).id,
"type": f.IssueTypeFactory.create(project=project).id,
"priority": f.PriorityFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201, response.content
issue_id = json.loads(response.content)["id"]
url = reverse("issues-detail", args=(issue_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":2, "subject": "test 2"}
data = {"version": 2, "subject": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -108,28 +104,28 @@ def test_valid_concurrent_save_for_issue_different_versions(client):
def test_valid_concurrent_save_for_issue_different_fields(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.issues.api.IssueViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("issues-list")
data = {"subject": "test",
"project": project.id,
"status": f.IssueStatusFactory.create(project=project).id,
"severity": f.SeverityFactory.create(project=project).id,
"type": f.IssueTypeFactory.create(project=project).id,
"priority": f.PriorityFactory.create(project=project).id}
"project": project.id,
"status": f.IssueStatusFactory.create(project=project).id,
"severity": f.SeverityFactory.create(project=project).id,
"type": f.IssueTypeFactory.create(project=project).id,
"priority": f.PriorityFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201, response.content
issue_id = json.loads(response.content)["id"]
url = reverse("issues-detail", args=(issue_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "description": "test 2"}
data = {"version": 1, "description": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -137,11 +133,11 @@ def test_valid_concurrent_save_for_issue_different_fields(client):
def test_invalid_concurrent_save_for_wiki_page(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.wiki.api.WikiViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("wiki-list")
data = {"project": project.id, "slug": "test"}
response = client.json.post(url, json.dumps(data))
@ -149,11 +145,11 @@ def test_invalid_concurrent_save_for_wiki_page(client):
wiki_id = json.loads(response.content)["id"]
url = reverse("wiki-detail", args=(wiki_id,))
data = {"version":1, "content": "test 1"}
data = {"version": 1, "content": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "content": "test 2"}
data = {"version": 1, "content": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
@ -161,11 +157,11 @@ def test_invalid_concurrent_save_for_wiki_page(client):
def test_valid_concurrent_save_for_wiki_page_different_versions(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.wiki.api.WikiViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("wiki-list")
data = {"project": project.id, "slug": "test"}
response = client.json.post(url, json.dumps(data))
@ -173,11 +169,11 @@ def test_valid_concurrent_save_for_wiki_page_different_versions(client):
wiki_id = json.loads(response.content)["id"]
url = reverse("wiki-detail", args=(wiki_id,))
data = {"version":1, "content": "test 1"}
data = {"version": 1, "content": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":2, "content": "test 2"}
data = {"version": 2, "content": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -185,26 +181,26 @@ def test_valid_concurrent_save_for_wiki_page_different_versions(client):
def test_invalid_concurrent_save_for_us(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
userstory = f.UserStoryFactory.create(version=10, project=project)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.UserStoryFactory.create(version=10, project=project)
client.login(user)
mock_path = "taiga.projects.userstories.api.UserStoryViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("userstories-list")
data = {"subject": "test",
"project": project.id,
"status": f.UserStoryStatusFactory.create(project=project).id}
"project": project.id,
"status": f.UserStoryStatusFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
userstory_id = json.loads(response.content)["id"]
url = reverse("userstories-detail", args=(userstory_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "subject": "test 2"}
data = {"version": 1, "subject": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
@ -212,25 +208,25 @@ def test_invalid_concurrent_save_for_us(client):
def test_valid_concurrent_save_for_us_different_versions(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.userstories.api.UserStoryViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("userstories-list")
data = {"subject": "test",
"project": project.id,
"status": f.UserStoryStatusFactory.create(project=project).id}
"project": project.id,
"status": f.UserStoryStatusFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
userstory_id = json.loads(response.content)["id"]
url = reverse("userstories-detail", args=(userstory_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":2, "subject": "test 2"}
data = {"version": 2, "subject": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -238,25 +234,25 @@ def test_valid_concurrent_save_for_us_different_versions(client):
def test_valid_concurrent_save_for_us_different_fields(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.userstories.api.UserStoryViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("userstories-list")
data = {"subject": "test",
"project": project.id,
"status": f.UserStoryStatusFactory.create(project=project).id}
"project": project.id,
"status": f.UserStoryStatusFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
userstory_id = json.loads(response.content)["id"]
url = reverse("userstories-detail", args=(userstory_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "description": "test 2"}
data = {"version": 1, "description": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -264,25 +260,25 @@ def test_valid_concurrent_save_for_us_different_fields(client):
def test_invalid_concurrent_save_for_task(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("tasks-list")
data = {"subject": "test",
"project": project.id,
"status": f.TaskStatusFactory.create(project=project).id}
"project": project.id,
"status": f.TaskStatusFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
task_id = json.loads(response.content)["id"]
url = reverse("tasks-detail", args=(task_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "subject": "test 2"}
data = {"version": 1, "subject": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 400
@ -290,25 +286,25 @@ def test_invalid_concurrent_save_for_task(client):
def test_valid_concurrent_save_for_task_different_versions(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("tasks-list")
data = {"subject": "test",
"project": project.id,
"status": f.TaskStatusFactory.create(project=project).id}
"project": project.id,
"status": f.TaskStatusFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
task_id = json.loads(response.content)["id"]
url = reverse("tasks-detail", args=(task_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":2, "subject": "test 2"}
data = {"version": 2, "subject": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
@ -316,24 +312,24 @@ def test_valid_concurrent_save_for_task_different_versions(client):
def test_valid_concurrent_save_for_task_different_fields(client):
user = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user)
membership = f.MembershipFactory.create(project=project, user=user, is_owner=True)
f.MembershipFactory.create(project=project, user=user, is_owner=True)
client.login(user)
mock_path = "taiga.projects.tasks.api.TaskViewSet.pre_conditions_on_save"
with patch(mock_path) as m:
with patch(mock_path):
url = reverse("tasks-list")
data = {"subject": "test",
"project": project.id,
"status": f.TaskStatusFactory.create(project=project).id}
"project": project.id,
"status": f.TaskStatusFactory.create(project=project).id}
response = client.json.post(url, json.dumps(data))
assert response.status_code == 201
task_id = json.loads(response.content)["id"]
url = reverse("tasks-detail", args=(task_id,))
data = {"version":1, "subject": "test 1"}
data = {"version": 1, "subject": "test 1"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200
data = {"version":1, "description": "test 2"}
data = {"version": 1, "description": "test 2"}
response = client.patch(url, json.dumps(data), content_type="application/json")
assert response.status_code == 200

View File

@ -88,16 +88,16 @@ def test_member_get_user_project_permissions():
def test_anon_user_has_perm():
project = factories.ProjectFactory()
project.anon_permissions = ["test"]
assert service.user_has_perm(AnonymousUser(), "test", project) == True
assert service.user_has_perm(AnonymousUser(), "fail", project) == False
assert service.user_has_perm(AnonymousUser(), "test", project) is True
assert service.user_has_perm(AnonymousUser(), "fail", project) is False
def test_authenticated_user_has_perm_on_project():
user1 = factories.UserFactory()
project = factories.ProjectFactory()
project.public_permissions = ["test"]
assert service.user_has_perm(user1, "test", project) == True
assert service.user_has_perm(user1, "fail", project) == False
assert service.user_has_perm(user1, "test", project) is True
assert service.user_has_perm(user1, "fail", project) is False
def test_authenticated_user_has_perm_on_project_related_object():
@ -106,10 +106,10 @@ def test_authenticated_user_has_perm_on_project_related_object():
project.public_permissions = ["test"]
us = factories.UserStoryFactory(project=project)
assert service.user_has_perm(user1, "test", us) == True
assert service.user_has_perm(user1, "fail", us) == False
assert service.user_has_perm(user1, "test", us) is True
assert service.user_has_perm(user1, "fail", us) is False
def test_authenticated_user_has_perm_on_invalid_object():
user1 = factories.UserFactory()
assert service.user_has_perm(user1, "test", user1) == False
assert service.user_has_perm(user1, "test", user1) is False

View File

@ -118,7 +118,7 @@ def test_points_name_duplicated(client):
def test_update_points_when_not_null_values_for_points(client):
points = f.PointsFactory(name="?", value="6")
role = f.RoleFactory(project=points.project, computable=True)
f.RoleFactory(project=points.project, computable=True)
assert points.project.points.filter(value__isnull=True).count() == 0
points.project.update_role_points()
assert points.project.points.filter(value__isnull=True).count() == 1
@ -130,33 +130,33 @@ def test_get_closed_bugs_per_member_stats():
membership_2 = f.MembershipFactory(project=project)
issue_closed_status = f.IssueStatusFactory(is_closed=True, project=project)
issue_open_status = f.IssueStatusFactory(is_closed=False, project=project)
issue_closed = f.IssueFactory(project=project,
status=issue_closed_status,
owner=membership_1.user,
assigned_to=membership_1.user)
issue_open = f.IssueFactory(project=project,
status=issue_open_status,
owner=membership_2.user,
assigned_to=membership_2.user)
f.IssueFactory(project=project,
status=issue_closed_status,
owner=membership_1.user,
assigned_to=membership_1.user)
f.IssueFactory(project=project,
status=issue_open_status,
owner=membership_2.user,
assigned_to=membership_2.user)
task_closed_status = f.TaskStatusFactory(is_closed=True, project=project)
task_open_status = f.TaskStatusFactory(is_closed=False, project=project)
task_closed = f.TaskFactory(project=project,
status=task_closed_status,
owner=membership_1.user,
assigned_to=membership_1.user)
task_open = f.TaskFactory(project=project,
status=task_open_status,
owner=membership_2.user,
assigned_to=membership_2.user)
task_iocaine = f.TaskFactory(project=project,
status=task_open_status,
owner=membership_2.user,
assigned_to=membership_2.user,
is_iocaine=True)
f.TaskFactory(project=project,
status=task_closed_status,
owner=membership_1.user,
assigned_to=membership_1.user)
f.TaskFactory(project=project,
status=task_open_status,
owner=membership_2.user,
assigned_to=membership_2.user)
f.TaskFactory(project=project,
status=task_open_status,
owner=membership_2.user,
assigned_to=membership_2.user,
is_iocaine=True)
wiki_page = f.WikiPageFactory.create(project=project, owner=membership_1.user)
take_snapshot(wiki_page, user=membership_1.user)
wiki_page.content="Frontend, future"
wiki_page.content = "Frontend, future"
wiki_page.save()
take_snapshot(wiki_page, user=membership_1.user)

View File

@ -17,9 +17,6 @@
import pytest
from django.core import management
from django.conf import settings
from .. import factories

View File

@ -16,31 +16,27 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import pytest
from unittest.mock import patch, Mock
from django.apps import apps
from django.core.urlresolvers import reverse
from taiga.base.utils import json
from taiga.users.models import Role
from taiga.projects.models import Membership
from taiga.projects.models import Project
from taiga.projects.userstories.serializers import UserStorySerializer
from .. import factories as f
pytestmark = pytest.mark.django_db
def test_destroy_role_and_reassign_members(client):
user1 = f.UserFactory.create()
user2 = f.UserFactory.create()
project = f.ProjectFactory.create(owner=user1)
role1 = f.RoleFactory.create(project=project)
role2 = f.RoleFactory.create(project=project)
member = f.MembershipFactory.create(project=project, user=user1, role=role1, is_owner=True)
member = f.MembershipFactory.create(project=project, user=user2, role=role2)
f.MembershipFactory.create(project=project, user=user1, role=role1, is_owner=True)
f.MembershipFactory.create(project=project, user=user2, role=role2)
url = reverse("roles-detail", args=[role2.pk]) + "?moveTo={}".format(role1.pk)
@ -58,6 +54,7 @@ def test_destroy_role_and_reassign_members(client):
qs = Membership.objects.filter(project=project, role_id=role1.pk)
assert qs.count() == 2
def test_destroy_role_and_reassign_members_with_deleted_project(client):
"""
Regression test, that fixes some 500 errors on production
@ -68,8 +65,8 @@ def test_destroy_role_and_reassign_members_with_deleted_project(client):
project = f.ProjectFactory.create(owner=user1)
role1 = f.RoleFactory.create(project=project)
role2 = f.RoleFactory.create(project=project)
member = f.MembershipFactory.create(project=project, user=user1, role=role1)
member = f.MembershipFactory.create(project=project, user=user2, role=role2)
f.MembershipFactory.create(project=project, user=user1, role=role1)
f.MembershipFactory.create(project=project, user=user2, role=role2)
Project.objects.filter(pk=project.id).delete()

View File

@ -56,21 +56,20 @@ def searches_initial_data():
m.points2 = f.PointsFactory(project=m.project2, value=None)
m.role_points1 = f.RolePointsFactory.create(role=m.project1.roles.all()[0],
points=m.points1,
user_story__project=m.project1)
points=m.points1,
user_story__project=m.project1)
m.role_points2 = f.RolePointsFactory.create(role=m.project1.roles.all()[0],
points=m.points1,
user_story__project=m.project1,
user_story__description="Back to the future")
points=m.points1,
user_story__project=m.project1,
user_story__description="Back to the future")
m.role_points3 = f.RolePointsFactory.create(role=m.project2.roles.all()[0],
points=m.points2,
user_story__project=m.project2)
points=m.points2,
user_story__project=m.project2)
m.us1 = m.role_points1.user_story
m.us2 = m.role_points2.user_story
m.us3 = m.role_points3.user_story
m.tsk1 = f.TaskFactory.create(project=m.project2)
m.tsk2 = f.TaskFactory.create(project=m.project1)
m.tsk3 = f.TaskFactory.create(project=m.project1, subject="Back to the future")
@ -79,9 +78,9 @@ def searches_initial_data():
m.iss2 = f.IssueFactory.create(project=m.project2)
m.iss3 = f.IssueFactory.create(project=m.project1)
m.wiki1 = f.WikiPageFactory.create(project=m.project1)
m.wiki2 = f.WikiPageFactory.create(project=m.project1, content="Frontend, future")
m.wiki3 = f.WikiPageFactory.create(project=m.project2)
m.wiki1 = f.WikiPageFactory.create(project=m.project1)
m.wiki2 = f.WikiPageFactory.create(project=m.project1, content="Frontend, future")
m.wiki3 = f.WikiPageFactory.create(project=m.project2)
return m
@ -139,4 +138,3 @@ def test_search_text_query_with_an_invalid_project_id(client, searches_initial_d
response = client.get(reverse("search-list"), {"project": "new", "text": "future"})
assert response.status_code == 404

View File

@ -1,8 +1,5 @@
import pytest
from django.conf import settings
from django.core.urlresolvers import reverse
from .. import factories as f
from tests.utils import disconnect_signals, reconnect_signals

View File

@ -100,7 +100,7 @@ def test_api_update_order_in_bulk(client):
data = {
"project_id": project.id,
"bulk_tasks": [{"task_id": task1.id, "order": 1},
{"task_id": task2.id, "order": 2}]
{"task_id": task2.id, "order": 2}]
}
client.login(project.owner)

View File

@ -33,7 +33,7 @@ import_rate_path = "taiga.export_import.throttling.ImportModeRateThrottle.get_ra
def test_anonimous_throttling_policy(client, settings):
project = f.create_project()
f.create_project()
url = reverse("projects-list")
with mock.patch(anon_rate_path) as anon_rate, \
@ -54,7 +54,7 @@ def test_anonimous_throttling_policy(client, settings):
def test_user_throttling_policy(client, settings):
project = f.create_project()
membership = f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
url = reverse("projects-detail", kwargs={"pk": project.pk})
client.login(project.owner)
@ -83,7 +83,7 @@ def test_user_throttling_policy(client, settings):
def test_import_mode_throttling_policy(client, settings):
project = f.create_project()
membership = f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
f.MembershipFactory.create(project=project, user=project.owner, is_owner=True)
project.default_issue_type = f.IssueTypeFactory.create(project=project)
project.default_issue_status = f.IssueStatusFactory.create(project=project)
project.default_severity = f.SeverityFactory.create(project=project)

View File

@ -19,7 +19,6 @@ import pytest
from .. import factories
from taiga.base.utils import json
from taiga.timeline import service
from taiga.timeline.models import Timeline
@ -39,6 +38,7 @@ def test_add_to_object_timeline():
assert Timeline.objects.filter(object_id=user1.id).count() == 1
assert Timeline.objects.order_by("-id")[0].data == id(user2)
def test_get_timeline():
Timeline.objects.all().delete()

View File

@ -74,8 +74,8 @@ def test_update_user_with_valid_email(client):
assert response.status_code == 200
user = models.User.objects.get(pk=user.id)
assert user.email_token != None
assert user.new_email == "new@email.com"
assert user.email_token is not None
assert user.new_email == "new@email.com"
def test_validate_requested_email_change(client):
@ -88,9 +88,9 @@ def test_validate_requested_email_change(client):
assert response.status_code == 204
user = models.User.objects.get(pk=user.id)
assert user.email_token == None
assert user.new_email == None
assert user.email == "new@email.com"
assert user.email_token is None
assert user.new_email is None
assert user.email == "new@email.com"
def test_validate_requested_email_change_without_token(client):

View File

@ -125,11 +125,11 @@ def test_update_userstory_points(client):
role1 = f.RoleFactory.create(project=project)
role2 = f.RoleFactory.create(project=project)
member = f.MembershipFactory.create(project=project, user=user1, role=role1, is_owner=True)
member = f.MembershipFactory.create(project=project, user=user2, role=role2)
f.MembershipFactory.create(project=project, user=user1, role=role1, is_owner=True)
f.MembershipFactory.create(project=project, user=user2, role=role2)
points1 = f.PointsFactory.create(project=project, value=None)
points2 = f.PointsFactory.create(project=project, value=1)
f.PointsFactory.create(project=project, value=None)
f.PointsFactory.create(project=project, value=1)
points3 = f.PointsFactory.create(project=project, value=2)
us = f.UserStoryFactory.create(project=project, owner=user1)
@ -143,7 +143,7 @@ def test_update_userstory_points(client):
data = {}
data["version"] = usdata["version"]
data["points"] = copy.copy(usdata["points"])
data["points"].update({'2000':points3.pk})
data["points"].update({'2000': points3.pk})
response = client.json.patch(url, json.dumps(data))
assert response.status_code == 200
@ -153,8 +153,7 @@ def test_update_userstory_points(client):
data = {}
data["version"] = usdata["version"] + 1
data["points"] = copy.copy(usdata["points"])
data["points"].update({str(role1.pk):points3.pk})
data["points"].update({str(role1.pk): points3.pk})
response = client.json.patch(url, json.dumps(data))
us = models.UserStory.objects.get(pk=us.pk)
@ -163,6 +162,7 @@ def test_update_userstory_points(client):
assert response.data["points"] == usdatanew['points']
assert response.data["points"] != usdata['points']
def test_update_userstory_rolepoints_on_add_new_role(client):
# This test is explicitly without assertions. It simple should
# works without raising any exception.
@ -173,16 +173,16 @@ def test_update_userstory_rolepoints_on_add_new_role(client):
role1 = f.RoleFactory.create(project=project)
member1 = f.MembershipFactory.create(project=project, user=user1, role=role1)
f.MembershipFactory.create(project=project, user=user1, role=role1)
points1 = f.PointsFactory.create(project=project, value=2)
f.PointsFactory.create(project=project, value=2)
us = f.UserStoryFactory.create(project=project, owner=user1)
# url = reverse("userstories-detail", args=[us.pk])
# client.login(user1)
role2 = f.RoleFactory.create(project=project, computable=True)
member2 = f.MembershipFactory.create(project=project, user=user2, role=role2)
f.MembershipFactory.create(project=project, user=user2, role=role2)
us.save()
@ -210,6 +210,7 @@ def test_archived_filter(client):
response = client.get(url, data)
assert len(json.loads(response.content)) == 1
def test_get_total_points(client):
project = f.ProjectFactory.create()

View File

@ -17,7 +17,6 @@
import pytest
from django.core.urlresolvers import reverse
from django.contrib.contenttypes.models import ContentType
from .. import factories as f

View File

@ -18,7 +18,7 @@
from django.db import models
from taiga.base import tags
class TaggedModel(tags.TaggedMixin, models.Model):
class Meta:
app_label = "tests"

View File

@ -14,12 +14,9 @@
# 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.base.api.permissions import (PermissionComponent,
AllowAny as TruePermissionComponent,
from taiga.base.api.permissions import (AllowAny as TruePermissionComponent,
DenyAll as FalsePermissionComponent)
import pytest
def test_permission_component_composition():
assert (TruePermissionComponent() | TruePermissionComponent()).check_permissions(None, None, None)

View File

@ -19,6 +19,7 @@ from unittest import mock
from taiga import celery
from taiga.deferred import defer, call_async, apply_async
def test_defer():
# settings.CELERY_ALWAYS_EAGER = True
name = "task name"

View File

@ -101,18 +101,22 @@ def test_render_wikilink():
expected_result = "<p><a class=\"reference wiki\" href=\"http://localhost:9001/project/test/wiki/test\" title=\"test\">test</a></p>"
assert render(dummy_project, "[[test]]") == expected_result
def test_render_wikilink_1():
expected_result = "<p><a class=\"reference wiki\" href=\"http://localhost:9001/project/test/wiki/test\" title=\"test\">test</a></p>"
assert render(dummy_project, "[[test]]") == expected_result
def test_render_wikilink_2():
expected_result = "<p><a class=\"reference wiki\" href=\"http://localhost:9001/project/test/wiki/test-page\" title=\"test page\">test page</a></p>"
assert render(dummy_project, "[[test page]]") == expected_result
def test_render_wikilink_3():
expected_result = "<p><a class=\"reference wiki\" href=\"http://localhost:9001/project/test/wiki/testpage\" title=\"TestPage\">TestPage</a></p>"
assert render(dummy_project, "[[TestPage]]") == expected_result
def test_render_wikilink_with_custom_title():
expected_result = "<p><a class=\"reference wiki\" href=\"http://localhost:9001/project/test/wiki/test\" title=\"custom\">custom</a></p>"
assert render(dummy_project, "[[test|custom]]") == expected_result

View File

@ -17,11 +17,9 @@
from taiga.permissions import service
from taiga.users.models import Role
import pytest
def test_role_has_perm():
role = Role()
role.permissions = ["test"]
assert service.role_has_perm(role, "test")
assert service.role_has_perm(role, "false") == False
assert service.role_has_perm(role, "false") is False

View File

@ -43,6 +43,7 @@ def test_project_slug_with_special_chars():
assert project.slug == "test-han-zi"
def test_project_with_existing_name_slug_with_special_chars():
user = User.objects.create(username="test")
Project.objects.create(name="漢字", description="漢字", owner=user)

View File

@ -15,7 +15,7 @@
# 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 unittest.mock import patch, MagicMock, call
from unittest.mock import patch, call
from django.core.exceptions import ValidationError
@ -41,6 +41,7 @@ def test_push_to_timeline_many_objects():
with pytest.raises(Exception):
service.push_to_timeline(None, project, "test")
def test_add_to_objects_timeline():
with patch("taiga.timeline.service._add_to_object_timeline") as mock:
users = [User(), User(), User()]
@ -78,7 +79,7 @@ def test_get_impl_key_from_typename():
def test_get_class_implementation():
service._timeline_impl_map["timeline.timeline.test"] = "test"
assert service._get_class_implementation(Timeline, "test") == "test"
assert service._get_class_implementation(Timeline, "other") == None
assert service._get_class_implementation(Timeline, "other") is None
def test_register_timeline_implementation():

View File

@ -25,6 +25,7 @@ from taiga.auth.tokens import get_token_for_user, get_user_for_token
pytestmark = pytest.mark.django_db
def test_valid_token():
user = f.UserFactory.create(email="old@email.com")
token = get_token_for_user(user, "testing_scope")
@ -34,19 +35,19 @@ def test_valid_token():
@pytest.mark.xfail(raises=exc.NotAuthenticated)
def test_invalid_token():
user = f.UserFactory.create(email="old@email.com")
user_from_token = get_user_for_token("testing_invalid_token", "testing_scope")
f.UserFactory.create(email="old@email.com")
get_user_for_token("testing_invalid_token", "testing_scope")
@pytest.mark.xfail(raises=exc.NotAuthenticated)
def test_invalid_token_expiration():
user = f.UserFactory.create(email="old@email.com")
token = get_token_for_user(user, "testing_scope")
user_from_token = get_user_for_token(token, "testing_scope", max_age=1)
get_user_for_token(token, "testing_scope", max_age=1)
@pytest.mark.xfail(raises=exc.NotAuthenticated)
def test_invalid_token_scope():
user = f.UserFactory.create(email="old@email.com")
token = get_token_for_user(user, "testing_scope")
user_from_token = get_user_for_token(token, "testing_invalid_scope")
get_user_for_token(token, "testing_invalid_scope")

View File

@ -14,7 +14,6 @@
#
# 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 functools
from django.db.models import signals
from taiga.base.utils import json
@ -60,6 +59,7 @@ 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,
content_type="application/json"):
responses = _helper_test_http_method_responses(client, method, url, data, users, after_each_request,
@ -71,6 +71,7 @@ def helper_test_http_method_and_count(client, method, url, data, users, after_ea
responses = _helper_test_http_method_responses(client, method, url, data, users, after_each_request)
return list(map(lambda r: (r.status_code, len(json.loads(r.content.decode('utf-8')))), responses))
def helper_test_http_method_and_keys(client, method, url, data, users, after_each_request=None):
responses = _helper_test_http_method_responses(client, method, url, data, users, after_each_request)
return list(map(lambda r: (r.status_code, set(json.loads(r.content.decode('utf-8')).keys())), responses))