diff --git a/jbi/jira/service.py b/jbi/jira/service.py index 011502a1..c83636bc 100644 --- a/jbi/jira/service.py +++ b/jbi/jira/service.py @@ -290,6 +290,13 @@ def update_issue_status(self, context: ActionContext, jira_status: str): issue_key = context.jira.issue assert issue_key # Until we have more fine-grained typing of contexts + kwargs = {} + if jira_status == "Cancelled": + kwargs["fields"] = { + "comment": "Issue was cancelled.", + "resolution": {"name": "Invalid"}, + } + logger.info( "Updating Jira status to %s", jira_status, @@ -298,6 +305,7 @@ def update_issue_status(self, context: ActionContext, jira_status: str): return self.client.set_issue_status( issue_key, jira_status, + **kwargs, ) def update_issue_summary(self, context: ActionContext): diff --git a/tests/unit/jira/test_service.py b/tests/unit/jira/test_service.py index 53dee44a..8aa17395 100644 --- a/tests/unit/jira/test_service.py +++ b/tests/unit/jira/test_service.py @@ -174,6 +174,36 @@ def test_get_issue_reraises_other_erroring_status_codes( assert record.message == "Getting issue JBI-234" +def test_update_issue_status_adds_comment_and_resolution_when_cancelled( + jira_service, settings, mocked_responses, action_context_factory, capturelogs +): + context = action_context_factory(jira__issue="JBI-234") + url = f"{settings.jira_base_url}rest/api/2/issue/JBI-234/transitions" + + mocked_responses.add( + responses.GET, + url, + json={"transitions": [{"name": "foo", "id": 42, "to": {"name": "Cancelled"}}]}, + ) + mocked_responses.add( + responses.POST, + url, + match=[ + responses.matchers.json_params_matcher( + { + "transition": {"id": 42}, + "fields": { + "comment": "Issue was cancelled.", + "resolution": {"name": "Invalid"}, + }, + } + ) + ], + ) + + jira_service.update_issue_status(context=context, jira_status="Cancelled") + + def test_update_issue_resolution( jira_service, settings, mocked_responses, action_context_factory, capturelogs ):