diff --git a/taiga/export_import/api.py b/taiga/export_import/api.py index 43e244ef..45bd13f0 100644 --- a/taiga/export_import/api.py +++ b/taiga/export_import/api.py @@ -26,6 +26,7 @@ from taiga.base.api.mixins import CreateModelMixin from taiga.base.api.viewsets import GenericViewSet from taiga.base.decorators import detail_route from taiga.projects.models import Project, Membership +from taiga.projects.issues.models import Issue from . import serializers from . import service @@ -117,6 +118,9 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet): project = self.get_object_or_none() self.check_permissions(request, 'import_item', project) + signals.pre_save.disconnect(sender=Issue, + dispatch_uid="set_finished_date_when_edit_issue") + issue = service.store_issue(project, request.DATA.copy()) errors = service.get_errors() diff --git a/taiga/projects/issues/apps.py b/taiga/projects/issues/apps.py index 153c2e0b..4b8714ff 100644 --- a/taiga/projects/issues/apps.py +++ b/taiga/projects/issues/apps.py @@ -27,9 +27,10 @@ class IssuesAppConfig(AppConfig): verbose_name = "Issues" def ready(self): - # Finixhed date + # Finished date signals.pre_save.connect(handlers.set_finished_date_when_edit_issue, - sender=apps.get_model("issues", "Issue")) + sender=apps.get_model("issues", "Issue"), + dispatch_uid="set_finished_date_when_edit_issue") # Tags signals.pre_save.connect(generic_handlers.tags_normalization, diff --git a/tests/integration/test_importer_api.py b/tests/integration/test_importer_api.py index 33fb4972..4502080b 100644 --- a/tests/integration/test_importer_api.py +++ b/tests/integration/test_importer_api.py @@ -176,6 +176,26 @@ 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) + project.default_us_status = f.UserStoryStatusFactory.create(project=project) + project.save() + client.login(user) + + url = reverse("importer-us", args=[project.pk]) + data = { + "subject": "Imported issue", + "finish_date": "2014-10-24T00:00:00+0000" + } + + 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")) + assert response_data["subject"] == "Imported issue" + assert response_data["finish_date"] == "2014-10-24T00:00:00+0000" + + def test_valid_issue_import_without_extra_data(client): user = f.UserFactory.create() project = f.ProjectFactory.create(owner=user) @@ -211,6 +231,7 @@ def test_valid_issue_import_with_extra_data(client): data = { "subject": "Imported issue", "description": "Imported issue", + "finished_date": "2014-10-24T00:00:00+0000", "attachments": [{ "owner": user.email, "attached_file": { @@ -226,6 +247,7 @@ def test_valid_issue_import_with_extra_data(client): assert len(response_data["attachments"]) == 1 assert response_data["owner"] == user.email 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() diff --git a/tests/unit/test_export.py b/tests/unit/test_export.py new file mode 100644 index 00000000..67de6eac --- /dev/null +++ b/tests/unit/test_export.py @@ -0,0 +1,35 @@ +# Copyright (C) 2014 Andrey Antukh +# Copyright (C) 2014 Jesús Espino +# Copyright (C) 2014 David Barragán +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import pytest + +from .. import factories as f + +from taiga.export_import.service import project_to_dict + +pytestmark = pytest.mark.django_db + + +def test_export_issue_finish_date(client): + issue = f.IssueFactory.create(finished_date="2014-10-22") + finish_date = project_to_dict(issue.project)["issues"][0]["finished_date"] + assert finish_date == "2014-10-22T00:00:00+0000" + + +def test_export_user_story_finish_date(client): + user_story = f.UserStoryFactory.create(finish_date="2014-10-22") + finish_date = project_to_dict(user_story.project)["user_stories"][0]["finish_date"] + assert finish_date == "2014-10-22T00:00:00+0000"