diff --git a/settings/testing.py b/settings/testing.py index 36cb7571..3e6235fc 100644 --- a/settings/testing.py +++ b/settings/testing.py @@ -18,9 +18,9 @@ from .development import * SKIP_SOUTH_TESTS = True SOUTH_TESTS_MIGRATE = False - CELERY_ALWAYS_EAGER = True MEDIA_ROOT = "/tmp" EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend" +INSTALLED_APPS = INSTALLED_APPS + ["tests"] diff --git a/tests/conftest.py b/tests/conftest.py index b0accc6b..f7fd7cf7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -15,11 +15,11 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.testing") + import pytest import django - -django.setup() - from .fixtures import * @@ -30,3 +30,8 @@ def pytest_addoption(parser): def pytest_runtest_setup(item): if "slow" in item.keywords and not item.config.getoption("--runslow"): pytest.skip("need --runslow option to run") + + +def pytest_configure(config): + django.setup() + diff --git a/tests/factories.py b/tests/factories.py index fe7b23c8..3a3728eb 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -363,8 +363,8 @@ class ContentTypeFactory(Factory): strategy = factory.CREATE_STRATEGY django_get_or_create = ("app_label", "model") - app_label = factory.LazyAttribute(lambda obj: ContentTypeFactory.FACTORY_FOR._meta.app_label) - model = factory.LazyAttribute(lambda obj: ContentTypeFactory.FACTORY_FOR._meta.model_name) + app_label = factory.LazyAttribute(lambda obj: "issues") + model = factory.LazyAttribute(lambda obj: "Issue") class AttachmentFactory(Factory): diff --git a/tests/integration/resources_permissions/test_milestones_resources.py b/tests/integration/resources_permissions/test_milestones_resources.py index 8c660968..76d8ff4e 100644 --- a/tests/integration/resources_permissions/test_milestones_resources.py +++ b/tests/integration/resources_permissions/test_milestones_resources.py @@ -190,7 +190,8 @@ def test_milestone_create(client, data): "estimated_finish": "2014-12-24", "project": data.public_project.pk, }) - results = helper_test_http_method(client, 'post', url, create_data, users, lambda: Milestone.objects.all().delete()) + results = helper_test_http_method(client, 'post', url, create_data, users, + lambda: Milestone.objects.all().delete()) assert results == [401, 403, 403, 201, 201] create_data = json.dumps({ @@ -199,7 +200,9 @@ def test_milestone_create(client, data): "estimated_finish": "2014-12-24", "project": data.private_project1.pk, }) - results = helper_test_http_method(client, 'post', url, create_data, users, lambda: Milestone.objects.all().delete()) + + results = helper_test_http_method(client, 'post', url, create_data, users, + lambda: Milestone.objects.all().delete()) assert results == [401, 403, 403, 201, 201] create_data = json.dumps({ diff --git a/tests/integration/test_issues.py b/tests/integration/test_issues.py index cd9439c2..b0b2f67a 100644 --- a/tests/integration/test_issues.py +++ b/tests/integration/test_issues.py @@ -1,4 +1,5 @@ from unittest import mock +import json from django.core.urlresolvers import reverse @@ -23,31 +24,32 @@ Issue #2 assert issues[1].subject == "Issue #2" -@mock.patch("taiga.projects.issues.services.db") def test_create_issues_in_bulk(db): data = """ Issue #1 Issue #2 """ - issues = services.create_issues_in_bulk(data) - db.save_in_bulk.assert_called_once_with(issues, None, None) + with mock.patch("taiga.projects.issues.services.db") as db: + issues = services.create_issues_in_bulk(data) + db.save_in_bulk.assert_called_once_with(issues, None, None) -@mock.patch("taiga.projects.issues.services.db") -def test_update_issues_order_in_bulk(db): +def test_update_issues_order_in_bulk(): data = [(1, 1), (2, 2)] - services.update_issues_order_in_bulk(data) - db.update_in_bulk_with_ids.assert_called_once_with([1, 2], [{"order": 1}, {"order": 2}], - model=models.Issue) + with mock.patch("taiga.projects.issues.services.db") as db: + services.update_issues_order_in_bulk(data) + db.update_in_bulk_with_ids.assert_called_once_with([1, 2], [{"order": 1}, {"order": 2}], + model=models.Issue) def test_api_create_issues_in_bulk(client): project = f.create_project() url = reverse("issues-bulk-create") - data = {"bulk_issues": "Issue #1\nIssue #2", + + data = {"bulk_issues": "Issue #1\nIssue #2\n", "project_id": project.id} client.login(project.owner) diff --git a/tests/integration/test_memberships.py b/tests/integration/test_memberships.py index 4387de9f..389f1fe2 100644 --- a/tests/integration/test_memberships.py +++ b/tests/integration/test_memberships.py @@ -20,13 +20,12 @@ def test_get_members_from_bulk(): assert members[1].email == "member2@email.com" -@mock.patch("taiga.projects.services.members.db") -def test_create_members_in_bulk(db): - data = [{"role_id": "1", "email": "member1@email.com"}, - {"role_id": "1", "email": "member2@email.com"}] - members = services.create_members_in_bulk(data, project_id=1) - - db.save_in_bulk.assert_called_once_with(members, None, None) +def test_create_members_in_bulk(): + with mock.patch("taiga.projects.services.members.db") as db: + data = [{"role_id": "1", "email": "member1@email.com"}, + {"role_id": "1", "email": "member2@email.com"}] + members = services.create_members_in_bulk(data, project_id=1) + db.save_in_bulk.assert_called_once_with(members, None, None) def test_api_create_bulk_members(client): diff --git a/tests/integration/test_projects.py b/tests/integration/test_projects.py index 7d25ac32..20762415 100644 --- a/tests/integration/test_projects.py +++ b/tests/integration/test_projects.py @@ -25,5 +25,4 @@ def test_api_partially_update_project(client): client.login(project.owner) response = client.json.patch(url, json.dumps(data)) - assert response.status_code == 400 diff --git a/tests/integration/test_tags.py b/tests/integration/test_tags.py index 56eb76c4..fa0e1af9 100644 --- a/tests/integration/test_tags.py +++ b/tests/integration/test_tags.py @@ -1,18 +1,11 @@ import pytest - -from django.db import models - -from taiga.base import tags - pytestmark = pytest.mark.django_db - -class TaggedModel(tags.TaggedMixin, models.Model): - class Meta: - app_label = "base" +from taiga.base import tags +from tests.models import TaggedModel -def test(): +def test_tags(): tags1 = TaggedModel.objects.create(tags=["foo", "bar"]) tags2 = TaggedModel.objects.create(tags=["foo"]) diff --git a/tests/integration/test_tasks.py b/tests/integration/test_tasks.py index 46caa4b0..6418eba8 100644 --- a/tests/integration/test_tasks.py +++ b/tests/integration/test_tasks.py @@ -1,4 +1,5 @@ from unittest import mock +import json from django.core.urlresolvers import reverse @@ -23,15 +24,14 @@ Task #2 assert tasks[1].subject == "Task #2" -@mock.patch("taiga.projects.tasks.services.db") def test_create_tasks_in_bulk(db): data = """ Task #1 Task #2 """ - tasks = services.create_tasks_in_bulk(data) - - db.save_in_bulk.assert_called_once_with(tasks, None, None) + with mock.patch("taiga.projects.tasks.services.db") as db: + tasks = services.create_tasks_in_bulk(data) + db.save_in_bulk.assert_called_once_with(tasks, None, None) def test_api_update_task_tags(client): diff --git a/tests/integration/test_userstories.py b/tests/integration/test_userstories.py index ee17c198..6966bf9d 100644 --- a/tests/integration/test_userstories.py +++ b/tests/integration/test_userstories.py @@ -1,5 +1,4 @@ from unittest import mock - from django.core.urlresolvers import reverse from taiga.base.utils import json @@ -23,24 +22,24 @@ User Story #2 assert userstories[1].subject == "User Story #2" -@mock.patch("taiga.projects.userstories.services.db") -def test_create_userstories_in_bulk(db): +def test_create_userstories_in_bulk(): data = """ User Story #1 User Story #2 """ - userstories = services.create_userstories_in_bulk(data) - db.save_in_bulk.assert_called_once_with(userstories, None, None) + with mock.patch("taiga.projects.userstories.services.db") as db: + userstories = services.create_userstories_in_bulk(data) + db.save_in_bulk.assert_called_once_with(userstories, None, None) -@mock.patch("taiga.projects.userstories.services.db") -def test_update_userstories_order_in_bulk(db): +def test_update_userstories_order_in_bulk(): data = [{"us_id": 1, "order": 1}, {"us_id": 2, "order": 2}] - services.update_userstories_order_in_bulk(data) - db.update_in_bulk_with_ids.assert_called_once_with([1, 2], [{"order": 1}, {"order": 2}], - model=models.UserStory) + with mock.patch("taiga.projects.userstories.services.db") as db: + services.update_userstories_order_in_bulk(data) + db.update_in_bulk_with_ids.assert_called_once_with([1, 2], [{"order": 1}, {"order": 2}], + model=models.UserStory) def test_api_delete_userstory(client): diff --git a/tests/integration/test_vote_issues.py b/tests/integration/test_vote_issues.py index 97611527..c1659e6a 100644 --- a/tests/integration/test_vote_issues.py +++ b/tests/integration/test_vote_issues.py @@ -76,6 +76,7 @@ def test_get_issue_votes(client): user = f.UserFactory.create() issue = f.create_issue(owner=user) url = reverse("issues-detail", args=(issue.id,)) + f.VotesFactory.create(content_object=issue, count=5) client.login(user) diff --git a/tests/models.py b/tests/models.py new file mode 100644 index 00000000..105ce4fb --- /dev/null +++ b/tests/models.py @@ -0,0 +1,7 @@ +from django.db import models +from taiga.base import tags + +class TaggedModel(tags.TaggedMixin, models.Model): + class Meta: + app_label = "tests" + diff --git a/tests/unit/test_deferred.py b/tests/unit/test_deferred.py index e71e75d2..131a1b6e 100644 --- a/tests/unit/test_deferred.py +++ b/tests/unit/test_deferred.py @@ -3,47 +3,38 @@ from unittest import mock from taiga import celery from taiga.deferred import defer, call_async, apply_async -from ..utils import set_settings - - -@set_settings(CELERY_ALWAYS_EAGER=False) -@mock.patch("taiga.deferred.app") -def test_defer(app): +def test_defer(): + # settings.CELERY_ALWAYS_EAGER = True name = "task name" args = (1, 2) kwargs = {"kw": "keyword argument"} - defer(name, *args, **kwargs) - - app.send_task.assert_called_once_with(name, args, kwargs, routing_key="transient.deferred") + with mock.patch("taiga.deferred.app") as app: + defer(name, *args, **kwargs) + app.tasks[name].apply.assert_called_once_with(args, kwargs, + routing_key="transient.deferred") -@set_settings(CELERY_ALWAYS_EAGER=False) -@mock.patch("taiga.deferred.app") -def test_apply_async(app): +def test_apply_async(): name = "task name" args = (1, 2) kwargs = {"kw": "keyword argument"} - apply_async(name, args, kwargs) - - app.send_task.assert_called_once_with(name, args, kwargs) + with mock.patch("taiga.deferred.app") as app: + apply_async(name, args, kwargs) + app.tasks[name].apply.assert_called_once_with(args, kwargs) -@set_settings(CELERY_ALWAYS_EAGER=False) -@mock.patch("taiga.deferred.app") -def test_call_async(app): +def test_call_async(): name = "task name" args = (1, 2) kwargs = {"kw": "keyword argument"} - call_async(name, *args, **kwargs) - - app.send_task.assert_called_once_with(name, args, kwargs) + with mock.patch("taiga.deferred.app") as app: + call_async(name, *args, **kwargs) + app.tasks[name].apply.assert_called_once_with(args, kwargs) -@set_settings(CELERY_ALWAYS_EAGER=True) def test_task_invocation(): celery.app.task(name="_test_task")(lambda: 1) - assert defer("_test_task").get() == 1