diff --git a/pagure/api/issue.py b/pagure/api/issue.py index e58ea39..22f23c6 100644 --- a/pagure/api/issue.py +++ b/pagure/api/issue.py @@ -177,6 +177,24 @@ def api_new_issue(repo, username=None, namespace=None): | | | | you want a private issue| | | | | to be created | +-------------------+--------+-------------+---------------------------+ + | ``priority`` | string | Optional | | The priority to set to | + | | | | this ticket from the | + | | | | list of priorities set | + | | | | in the project | + +-------------------+--------+-------------+---------------------------+ + | ``milestone`` | string | Optional | | The milestone to assign | + | | | | to this ticket from the | + | | | | list of milestones set | + | | | | in the project | + +-------------------+--------+-------------+---------------------------+ + | ``tag`` | string | Optional | | Coma separated list of | + | | | | tags to link to this | + | | | | ticket from the list of | + | | | | tags in the project | + +-------------------+--------+-------------+---------------------------+ + | ``assignee`` | string | Optional | | The username of the user| + | | | | to assign this ticket to| + +-------------------+--------+-------------+---------------------------+ Sample response ^^^^^^^^^^^^^^^ @@ -220,12 +238,23 @@ def api_new_issue(repo, username=None, namespace=None): if not user_obj: raise pagure.exceptions.APIError(404, error_code=APIERROR.ENOUSER) - form = pagure.forms.IssueFormSimplied(csrf_enabled=False) + form = pagure.forms.IssueFormSimplied( + priorities=repo.priorities, + milestones=repo.milestones, + csrf_enabled=False) if form.validate_on_submit(): title = form.title.data content = form.issue_content.data - milestone = form.milestone.data + milestone = form.milestone.data or None private = str(form.private.data).lower() in ['true', '1'] + priority = form.priority.data or None + assignee = flask.request.form.get( + 'assignee', '').strip() or None + tags = [ + tag.strip() + for tag in flask.request.form.get( + 'tag', '').split(',') + if tag.strip()] try: issue = pagure.lib.new_issue( @@ -234,7 +263,10 @@ def api_new_issue(repo, username=None, namespace=None): title=title, content=content, private=private, + assignee=assignee, milestone=milestone, + priority=priority, + tags=tags, user=flask.g.fas_user.username, ticketfolder=APP.config['TICKETS_FOLDER'], ) diff --git a/tests/test_pagure_flask_api_issue.py b/tests/test_pagure_flask_api_issue.py index 2538bee..2ceac32 100644 --- a/tests/test_pagure_flask_api_issue.py +++ b/tests/test_pagure_flask_api_issue.py @@ -42,7 +42,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 9, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Closed", @@ -54,7 +54,7 @@ FULL_ISSUE_LIST = [ } }, { - "assignee": None, + "assignee": {'fullname': 'foo bar', 'name': 'foo'}, "blocks": [], "close_status": None, "closed_at": None, @@ -65,7 +65,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 8, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -88,7 +88,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 7, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -111,7 +111,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 6, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -134,7 +134,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 5, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -157,7 +157,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 4, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -180,7 +180,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 3, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -226,7 +226,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -389,6 +389,35 @@ class PagureFlaskApiIssuetests(tests.Modeltests): } ) + # Valid request but invalid milestone + data = { + 'title': 'test issue', + 'issue_content': 'This issue needs attention', + 'milestone': ['milestone-1.0'], + } + output = self.app.post( + '/api/0/test/new_issue', data=data, headers=headers) + self.assertEqual(output.status_code, 400) + data = json.loads(output.data) + self.assertDictEqual( + data, + { + "error": "Invalid or incomplete input submited", + "error_code": "EINVALIDREQ", + "errors": { + "milestone": [ + "Not a valid choice" + ] + } + } + ) + + # Set some milestones + repo = pagure.get_authorized_project(self.session, 'test') + repo.milestones = {'milestone-1.0': '', 'milestone-2.0': 'Tomorrow!'} + self.session.add(repo) + self.session.commit() + # Valid request with milestone data = { 'title': 'test issue', @@ -519,6 +548,7 @@ class PagureFlaskApiIssuetests(tests.Modeltests): 'title': 'test issue1', 'issue_content': 'This issue needs attention', 'private': 1, + 'assignee': 'foo' } output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) @@ -526,7 +556,7 @@ class PagureFlaskApiIssuetests(tests.Modeltests): data = json.loads(output.data) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' - exp = FULL_ISSUE_LIST[1] + exp = copy.deepcopy(FULL_ISSUE_LIST[1]) exp['id'] = 8 self.assertDictEqual( data, @@ -632,6 +662,12 @@ class PagureFlaskApiIssuetests(tests.Modeltests): } ) + # Set some milestones + repo = pagure.get_authorized_project(self.session, 'test') + repo.milestones = {'milestone-1.0': '', 'milestone-2.0': 'Tomorrow!'} + self.session.add(repo) + self.session.commit() + # Valid request with milestone data = { 'title': 'test issue', @@ -762,6 +798,7 @@ class PagureFlaskApiIssuetests(tests.Modeltests): 'title': 'test issue1', 'issue_content': 'This issue needs attention', 'private': 1, + 'assignee': 'foo' } output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) @@ -789,8 +826,9 @@ class PagureFlaskApiIssuetests(tests.Modeltests): data = json.loads(output.data) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' - exp = FULL_ISSUE_LIST[1] + exp = copy.deepcopy(FULL_ISSUE_LIST[1]) exp['id'] = 9 + exp['assignee'] = None self.assertDictEqual( data, { @@ -851,7 +889,6 @@ class PagureFlaskApiIssuetests(tests.Modeltests): user='pingou', ticketfolder=None, private=True, - milestone="", status="Closed" ) self.session.commit() @@ -936,6 +973,9 @@ class PagureFlaskApiIssuetests(tests.Modeltests): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' + exp = FULL_ISSUE_LIST[1] + exp['id'] = 8 + self.assertDictEqual( data, { @@ -1762,7 +1802,7 @@ class PagureFlaskApiIssuetests(tests.Modeltests): "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -1858,7 +1898,7 @@ class PagureFlaskApiIssuetests(tests.Modeltests): "depends": [], "id": 6, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -2940,7 +2980,6 @@ class PagureFlaskApiIssuetests(tests.Modeltests): user='pingou', ticketfolder=None, private=True, - milestone="", status="Closed" ) self.session.commit() diff --git a/tests/test_pagure_flask_api_issue_create.py b/tests/test_pagure_flask_api_issue_create.py index e4fba79..fc14119 100644 --- a/tests/test_pagure_flask_api_issue_create.py +++ b/tests/test_pagure_flask_api_issue_create.py @@ -165,7 +165,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -219,7 +219,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -273,7 +273,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", diff --git a/tests/test_pagure_flask_api_ui_private_repo.py b/tests/test_pagure_flask_api_ui_private_repo.py index 6d32267..292edd2 100644 --- a/tests/test_pagure_flask_api_ui_private_repo.py +++ b/tests/test_pagure_flask_api_ui_private_repo.py @@ -34,7 +34,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 8, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -57,7 +57,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 7, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -80,7 +80,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 6, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -103,7 +103,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 5, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -126,7 +126,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 4, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -149,7 +149,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 3, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -172,7 +172,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 2, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -195,7 +195,7 @@ FULL_ISSUE_LIST = [ "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -212,6 +212,8 @@ FULL_ISSUE_LIST = [ class PagurePrivateRepotest(tests.Modeltests): """ Tests for private repo in pagure """ + maxDiff = None + def setUp(self): """ Set up the environnment, ran before every tests. """ super(PagurePrivateRepotest, self).setUp() @@ -2146,7 +2148,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 1, - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -2170,7 +2172,6 @@ class PagurePrivateRepotest(tests.Modeltests): title='Test issue', content='We should work on this', user='pingou', - milestone='', ticketfolder=None, private=True, ) @@ -2214,7 +2215,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 2, - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -2237,7 +2238,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 1, - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -2296,7 +2297,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 2, - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -2319,7 +2320,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 1, - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -2420,7 +2421,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 2, - "milestone": "", + "milestone": None, "priority": None, "private": True, "status": "Open", @@ -2443,7 +2444,7 @@ class PagurePrivateRepotest(tests.Modeltests): "last_updated": "1431414800", "depends": [], "id": 1, - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -2524,7 +2525,7 @@ class PagurePrivateRepotest(tests.Modeltests): "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open", @@ -2574,7 +2575,7 @@ class PagurePrivateRepotest(tests.Modeltests): "depends": [], "id": 1, "last_updated": "1431414800", - "milestone": "", + "milestone": None, "priority": None, "private": False, "status": "Open",