From 3871071c0a8c69a4c2275220cbda5c7a3c9edf5c Mon Sep 17 00:00:00 2001 From: Lenka Segura Date: Feb 03 2020 16:47:52 +0000 Subject: Expose related_prs on issue API --- diff --git a/pagure/lib/model.py b/pagure/lib/model.py index b9c198a..d2b43b1 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -1483,6 +1483,11 @@ class Issue(BASE): "closed_by": self.closed_by.to_json(public=public) if self.closed_by else None, + "related_prs": [ + {"id": pr.id, "title": pr.title} for pr in self.related_prs + ] + if self.related_prs + else [], } comments = [] diff --git a/pagure/lib/query.py b/pagure/lib/query.py index 4ec981f..4cba70e 100644 --- a/pagure/lib/query.py +++ b/pagure/lib/query.py @@ -1727,6 +1727,7 @@ def new_issue( issue_id=None, issue_uid=None, private=False, + related_prs=[], status=None, close_status=None, notify=True, diff --git a/tests/test_pagure_flask_api_issue.py b/tests/test_pagure_flask_api_issue.py index b4cbff0..8248243 100644 --- a/tests/test_pagure_flask_api_issue.py +++ b/tests/test_pagure_flask_api_issue.py @@ -49,6 +49,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Closed", "tags": [], "title": "Test issue", @@ -70,6 +71,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue1", @@ -91,6 +93,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -112,6 +115,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -133,6 +137,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -154,6 +159,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -175,6 +181,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -196,6 +203,7 @@ FULL_ISSUE_LIST = [ "milestone": "milestone-1.0", "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -217,6 +225,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -242,6 +251,7 @@ LCL_ISSUES = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "Issue #2", @@ -263,6 +273,7 @@ LCL_ISSUES = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "Issue #1", @@ -2482,6 +2493,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Issue #3", @@ -2545,6 +2557,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2644,6 +2657,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", @@ -2675,6 +2689,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", @@ -3155,6 +3170,60 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, {"error": "error", "error_code": "ENOCODE"}) + def test_api_view_issue_related_prs(self): + tests.create_projects(self.session) + tests.create_projects_git(os.path.join(self.path, "tickets")) + tests.create_tokens(self.session) + tests.create_tokens_acl(self.session) + + # Create issue + repo = pagure.lib.query.get_authorized_project(self.session, "test") + msg = pagure.lib.query.new_issue( + session=self.session, + repo=repo, + title="Test issue #1", + content="We should work on this", + user="pingou", + private=False, + issue_uid="aaabbbccc1", + ) + self.session.commit() + self.assertEqual(msg.title, "Test issue #1") + self.assertEqual(msg.related_prs, []) + self.assertEqual(msg.id, 1) + + # Create pull request + repo_to = pagure.lib.query.get_authorized_project(self.session, "test") + repo_from = pagure.lib.query.get_authorized_project( + self.session, "test" + ) + + msg = pagure.lib.query.new_pull_request( + session=self.session, + repo_from=repo_from, + repo_to=repo_to, + branch_from="master", + branch_to="master", + title="New shiny feature", + user="pingou", + initial_comment="Fixes #1", + ) + self.session.commit() + self.assertEqual(msg.id, 2) + self.assertEqual(msg.title, "New shiny feature") + + output = self.app.get("/api/0/test/pull-request/2") + self.assertEqual( + json.loads(output.get_data(as_text=True)).get("initial_comment"), + "Fixes #1", + ) + + output = self.app.get("/api/0/test/issue/1") + data = json.loads(output.get_data(as_text=True)) + self.assertEqual( + data.get("related_prs"), [{"id": 2, "title": "New shiny feature"}] + ) + @patch("pagure.lib.git.update_git") @patch("pagure.lib.notify.send_email") def test_api_view_issue_comment(self, p_send_email, p_ugt): diff --git a/tests/test_pagure_flask_api_issue_create.py b/tests/test_pagure_flask_api_issue_create.py index da633b2..60cd298 100644 --- a/tests/test_pagure_flask_api_issue_create.py +++ b/tests/test_pagure_flask_api_issue_create.py @@ -156,6 +156,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -207,6 +208,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -258,6 +260,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", diff --git a/tests/test_pagure_flask_api_ui_private_repo.py b/tests/test_pagure_flask_api_ui_private_repo.py index 6d6451b..814d575 100644 --- a/tests/test_pagure_flask_api_ui_private_repo.py +++ b/tests/test_pagure_flask_api_ui_private_repo.py @@ -38,6 +38,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", @@ -59,6 +60,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -80,6 +82,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -101,6 +104,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -122,6 +126,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -143,6 +148,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -164,6 +170,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -185,6 +192,7 @@ FULL_ISSUE_LIST = [ "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2477,6 +2485,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2553,6 +2562,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", @@ -2574,6 +2584,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2643,6 +2654,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", @@ -2664,6 +2676,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2804,6 +2817,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": True, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", @@ -2825,6 +2839,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2901,6 +2916,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", @@ -2949,6 +2965,7 @@ class PagurePrivateRepotest(tests.Modeltests): "milestone": None, "priority": None, "private": False, + "related_prs": [], "status": "Open", "tags": [], "title": "test issue", diff --git a/tests/test_pagure_flask_api_user.py b/tests/test_pagure_flask_api_user.py index 4a18f05..5d9073c 100644 --- a/tests/test_pagure_flask_api_user.py +++ b/tests/test_pagure_flask_api_user.py @@ -1742,6 +1742,7 @@ class PagureFlaskApiUsertestissues(tests.Modeltests): "url_path": "test", "user": {"fullname": "PY C", "name": "pingou"}, }, + "related_prs": [], "status": "Open", "tags": [], "title": "Test issue", diff --git a/tests/test_pagure_lib_git.py b/tests/test_pagure_lib_git.py index f305602..e15dcac 100644 --- a/tests/test_pagure_lib_git.py +++ b/tests/test_pagure_lib_git.py @@ -1411,7 +1411,7 @@ new file mode 100644 index 0000000..60f7480 --- /dev/null +++ b/456 -@@ -0,0 +1,29 @@ +@@ -0,0 +1,30 @@ +{ + "assignee": null, + "blocks": [], @@ -1427,6 +1427,7 @@ index 0000000..60f7480 + "milestone": null, + "priority": null, + "private": false, ++ "related_prs": [], + "status": "Open", + "tags": [], + "title": "Test issue",