From 2bad1713c04ac1c91634ce4b841503c6ef4138c2 Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Tue, 20 Aug 2024 17:30:07 -0700 Subject: [PATCH 01/11] Implemented function to update time lost attribute in jira ticket --- manager/manager/utils.py | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/manager/manager/utils.py b/manager/manager/utils.py index f3994760..fe4867e5 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -505,6 +505,57 @@ def jira_ticket(request_data): ) +def update_time_loss(jira_id: int, add_time_loss: float = 0.0) -> Response: + """Connect to the Rubin Observatory JIRA Cloud REST API to + update a jira ticket's specific field + + Params + ------ + jira_id: int + Jira ID + + Returns + ------- + Response + define response here + """ + headers = { + "Authorization": f"Basic {os.environ.get('JIRA_API_TOKEN')}", + "content-type": "application/json", + } + get_url = ( + f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}" + ) + response = requests.get(get_url, headers=headers) + existent_time_loss = ( + response.json().get("customfield_10106", 0.0) + if response.status_code == 200 + else 0.0 + ) + jira_payload = { + "fields": { + "customfield_10106": float(existent_time_loss + add_time_loss), + }, + } + put_url = f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}/" + response = requests.put(put_url, json=jira_payload, headers=headers) + + if response.status_code == 200 or response.status_code == 204: + return Response( + { + "ack": "Jira field updated", + "url": f"https://{os.environ.get('JIRA_API_HOSTNAME')}/browse/{jira_id}", + }, + status=200, + ) + return Response( + { + "ack": "Jira field could not be updated", + }, + status=400, + ) + + def jira_comment(request_data): """Connect to the Rubin Observatory JIRA Cloud REST API to make a comment on a previously created ticket. @@ -547,6 +598,12 @@ def jira_comment(request_data): } url = f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}/comment" response = requests.post(url, json=jira_payload, headers=headers) + + if "time_lost" in request_data: + update_time_loss( + jira_id=jira_id, add_time_loss=request_data.get("time_lost", 0.0) + ) + if response.status_code == 201: return Response( { From 90ea9e5c06b2fe57c1a0627d6e0212b1b6066e52 Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Tue, 20 Aug 2024 17:30:52 -0700 Subject: [PATCH 02/11] Updated test_jira_comment and added test for new function --- manager/api/tests/test_jira.py | 36 +++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/manager/api/tests/test_jira.py b/manager/api/tests/test_jira.py index a428714c..17524831 100644 --- a/manager/api/tests/test_jira.py +++ b/manager/api/tests/test_jira.py @@ -26,7 +26,12 @@ import requests from django.test import TestCase, override_settings -from manager.utils import handle_jira_payload, jira_comment, jira_ticket +from manager.utils import ( + handle_jira_payload, + jira_comment, + jira_ticket, + update_time_loss, +) OLE_JIRA_OBS_COMPONENTS_FIELDS = [ "AuxTel", @@ -311,6 +316,31 @@ def test_needed_parameters(self): mock_jira_patcher.stop() + def test_update_time_loss(self): + """Test call to update_time_loss and verify field was updated""" + # patch both requests.get, requests.put + mock_jira_patcher = patch("requests.get") + mock_jira_client = mock_jira_patcher.start() + response = requests.Response() + response.status_code = 200 + response.json = lambda: {"customfield_10106": 13.6} + mock_jira_client.return_value = response + + mock_jira_patcher = patch("requests.put") + mock_jira_client = mock_jira_patcher.start() + response = requests.Response() + response.status_code = 200 + mock_jira_client.return_value = response + + # call update time lost + jira_response = update_time_loss(1, 3.4) + assert jira_response.status_code == 200 + assert jira_response.data["ack"] == "Jira field updated" + + jira_response = update_time_loss(93827, 1.23) + assert jira_response.status_code == 200 + assert jira_response.data["ack"] == "Jira field updated" + def test_add_comment(self): """Test call to jira_comment function with all needed parameters""" mock_jira_patcher = patch("requests.post") @@ -319,6 +349,10 @@ def test_add_comment(self): response.status_code = 201 mock_jira_client.return_value = response + mock_timeloss_patcher = patch("manager.utils.update_time_loss") + mock_timeloss_client = mock_timeloss_patcher.start() + mock_timeloss_client.return_value = response + jira_response = jira_comment(self.jira_request_exposure_full_jira_comment.data) assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira comment created" From b200846042ead7d826f674fab31df19740cf1a0e Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Tue, 20 Aug 2024 17:31:09 -0700 Subject: [PATCH 03/11] Updated Changelog --- CHANGELOG.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c40c9313..cc9a9f88 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,11 @@ Version History =============== +v7.0.2 +------ + +* Add accumulation of time lost in Jira comments + v7.0.1 ------ From 4d00564f258668c62ad8fdac453516f25e31ee26 Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Wed, 21 Aug 2024 11:40:06 -0700 Subject: [PATCH 04/11] Implemented PR test patching suggestion --- manager/api/tests/test_jira.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/manager/api/tests/test_jira.py b/manager/api/tests/test_jira.py index 17524831..0f3fd9aa 100644 --- a/manager/api/tests/test_jira.py +++ b/manager/api/tests/test_jira.py @@ -316,21 +316,17 @@ def test_needed_parameters(self): mock_jira_patcher.stop() - def test_update_time_loss(self): + @patch("requests.get") + @patch("requests.put") + def test_update_time_loss(self, mock_get, mock_put): """Test call to update_time_loss and verify field was updated""" # patch both requests.get, requests.put - mock_jira_patcher = patch("requests.get") - mock_jira_client = mock_jira_patcher.start() response = requests.Response() response.status_code = 200 - response.json = lambda: {"customfield_10106": 13.6} - mock_jira_client.return_value = response + mock_put.return_value = response - mock_jira_patcher = patch("requests.put") - mock_jira_client = mock_jira_patcher.start() - response = requests.Response() - response.status_code = 200 - mock_jira_client.return_value = response + response.json = lambda: {"customfield_10106": 13.6} + mock_get.return_value = response # call update time lost jira_response = update_time_loss(1, 3.4) From d3dd21f21d75c918da58dc944218a00d612ddec6 Mon Sep 17 00:00:00 2001 From: Valerie Date: Thu, 22 Aug 2024 09:26:54 -0700 Subject: [PATCH 05/11] Update manager/manager/utils.py applied suggestion Co-authored-by: Sebastian Aranda Sanchez --- manager/manager/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manager/manager/utils.py b/manager/manager/utils.py index fe4867e5..9d7e90fe 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -600,9 +600,11 @@ def jira_comment(request_data): response = requests.post(url, json=jira_payload, headers=headers) if "time_lost" in request_data: - update_time_loss( + response = update_time_loss( jira_id=jira_id, add_time_loss=request_data.get("time_lost", 0.0) ) + if response.status_code == 400: + return response if response.status_code == 201: return Response( From eb50b7754bb54911031780844bf74eb300cc6633 Mon Sep 17 00:00:00 2001 From: Valerie Date: Thu, 22 Aug 2024 09:27:17 -0700 Subject: [PATCH 06/11] Update manager/manager/utils.py Co-authored-by: Sebastian Aranda Sanchez --- manager/manager/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/manager/utils.py b/manager/manager/utils.py index 9d7e90fe..1640dba8 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -517,7 +517,7 @@ def update_time_loss(jira_id: int, add_time_loss: float = 0.0) -> Response: Returns ------- Response - define response here + The response and status code of the request to the JIRA API """ headers = { "Authorization": f"Basic {os.environ.get('JIRA_API_TOKEN')}", From 6cd9b4a70f6aa6dafbdea54820daa2c57056b42b Mon Sep 17 00:00:00 2001 From: Valerie Date: Thu, 22 Aug 2024 09:27:52 -0700 Subject: [PATCH 07/11] Update manager/manager/utils.py Co-authored-by: Sebastian Aranda Sanchez --- manager/manager/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager/manager/utils.py b/manager/manager/utils.py index 1640dba8..ada3a8d7 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -550,7 +550,7 @@ def update_time_loss(jira_id: int, add_time_loss: float = 0.0) -> Response: ) return Response( { - "ack": "Jira field could not be updated", + "ack": "Jira time_lost field could not be updated", }, status=400, ) From 907b1c862e68f5f2d46f45eaf0cad1945ef91ee2 Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Thu, 22 Aug 2024 13:23:12 -0700 Subject: [PATCH 08/11] Updating comments and using constant for custom fields --- manager/api/tests/test_jira.py | 24 +++++++++--------- manager/manager/utils.py | 45 ++++++++++++++++++---------------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/manager/api/tests/test_jira.py b/manager/api/tests/test_jira.py index 0f3fd9aa..2021ff51 100644 --- a/manager/api/tests/test_jira.py +++ b/manager/api/tests/test_jira.py @@ -27,10 +27,11 @@ from django.test import TestCase, override_settings from manager.utils import ( + TIME_LOST_FIELD, handle_jira_payload, jira_comment, jira_ticket, - update_time_loss, + update_time_lost, ) OLE_JIRA_OBS_COMPONENTS_FIELDS = [ @@ -318,24 +319,25 @@ def test_needed_parameters(self): @patch("requests.get") @patch("requests.put") - def test_update_time_loss(self, mock_get, mock_put): - """Test call to update_time_loss and verify field was updated""" + def test_update_time_lost(self, mock_get, mock_put): + """Test call to update_time_lost and verify field was updated""" # patch both requests.get, requests.put response = requests.Response() response.status_code = 200 - mock_put.return_value = response - - response.json = lambda: {"customfield_10106": 13.6} + response.json = lambda: {TIME_LOST_FIELD: 13.6} mock_get.return_value = response + response.status_code = 204 + mock_put.return_value = response + # call update time lost - jira_response = update_time_loss(1, 3.4) + jira_response = update_time_lost(1, 3.4) assert jira_response.status_code == 200 - assert jira_response.data["ack"] == "Jira field updated" + assert jira_response.data["ack"] == "Jira time_lost field updated" - jira_response = update_time_loss(93827, 1.23) + jira_response = update_time_lost(93827, 1.23) assert jira_response.status_code == 200 - assert jira_response.data["ack"] == "Jira field updated" + assert jira_response.data["ack"] == "Jira time_lost field updated" def test_add_comment(self): """Test call to jira_comment function with all needed parameters""" @@ -345,7 +347,7 @@ def test_add_comment(self): response.status_code = 201 mock_jira_client.return_value = response - mock_timeloss_patcher = patch("manager.utils.update_time_loss") + mock_timeloss_patcher = patch("manager.utils.update_time_lost") mock_timeloss_client = mock_timeloss_patcher.start() mock_timeloss_client.return_value = response diff --git a/manager/manager/utils.py b/manager/manager/utils.py index ada3a8d7..2b9b33d9 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -40,6 +40,9 @@ # Constants JSON_RESPONSE_LOCAL_STORAGE_NOT_ALLOWED = {"error": "Local storage not allowed."} JSON_RESPONSE_ERROR_NOT_VALID_JSON = {"error": "Not a valid JSON response."} +TIME_LOST_FIELD = "customfield_10106" +PRIMARY_SOFTWARE_COMPONENTS_IDS = "customfield_10107" +PRIMARY_HARDWARE_COMPONENTS_IDS = "customfield_10196" class LocationPermission(BasePermission): @@ -449,16 +452,16 @@ def jira_ticket(request_data): # "on" if int(request_data.get("level", 0)) >= 100 # else "off" # ), - "customfield_10106": float(request_data.get("time_lost", 0)), + TIME_LOST_FIELD: float(request_data.get("time_lost", 0)), # Default values of the following fields are set to -1 - "customfield_10107": { + PRIMARY_SOFTWARE_COMPONENTS_IDS: { "id": ( str(primary_software_components_ids[0]) if primary_software_components_ids else "-1" ) }, - "customfield_10196": { + PRIMARY_HARDWARE_COMPONENTS_IDS: { "id": ( str(primary_hardware_components_ids[0]) if primary_hardware_components_ids @@ -505,45 +508,45 @@ def jira_ticket(request_data): ) -def update_time_loss(jira_id: int, add_time_loss: float = 0.0) -> Response: +def update_time_lost(jira_id: int, add_time_lost: float = 0.0) -> Response: """Connect to the Rubin Observatory JIRA Cloud REST API to - update a jira ticket's specific field + update time_lost field in a given jira ticket Params ------ jira_id: int Jira ID + add_time_lost: float + time value given from comment Returns ------- Response The response and status code of the request to the JIRA API + 200 if the time_lost field was successfully updated + 400 if the time_lost field was not updated """ headers = { "Authorization": f"Basic {os.environ.get('JIRA_API_TOKEN')}", "content-type": "application/json", } - get_url = ( - f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}" - ) - response = requests.get(get_url, headers=headers) - existent_time_loss = ( - response.json().get("customfield_10106", 0.0) + url = f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}/" + response = requests.get(url, headers=headers) + existent_time_lost = ( + response.json().get(TIME_LOST_FIELD, 0.0) if response.status_code == 200 else 0.0 ) jira_payload = { "fields": { - "customfield_10106": float(existent_time_loss + add_time_loss), + TIME_LOST_FIELD: float(existent_time_lost + add_time_lost), }, } - put_url = f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}/" - response = requests.put(put_url, json=jira_payload, headers=headers) - - if response.status_code == 200 or response.status_code == 204: + response = requests.put(url, json=jira_payload, headers=headers) + if response.status_code == 204: return Response( { - "ack": "Jira field updated", + "ack": "Jira time_lost field updated", "url": f"https://{os.environ.get('JIRA_API_HOSTNAME')}/browse/{jira_id}", }, status=200, @@ -600,8 +603,8 @@ def jira_comment(request_data): response = requests.post(url, json=jira_payload, headers=headers) if "time_lost" in request_data: - response = update_time_loss( - jira_id=jira_id, add_time_loss=request_data.get("time_lost", 0.0) + response = update_time_lost( + jira_id=jira_id, add_time_lost=request_data.get("time_lost", 0.0) ) if response.status_code == 400: return response @@ -677,8 +680,8 @@ def get_jira_obs_report(request_data): "key": issue["key"], "summary": issue["fields"]["summary"], "time_lost": ( - issue["fields"]["customfield_10106"] - if issue["fields"]["customfield_10106"] is not None + issue["fields"][TIME_LOST_FIELD] + if issue["fields"][TIME_LOST_FIELD] is not None else 0.0 ), "reporter": issue["fields"]["creator"]["displayName"], From ee9bd844033d1b8384cc7e527b27db3b641762b4 Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Thu, 22 Aug 2024 15:54:48 -0700 Subject: [PATCH 09/11] handling more comments from pr --- manager/api/tests/test_jira.py | 27 +++++++++++++++++---------- manager/manager/utils.py | 6 +++--- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/manager/api/tests/test_jira.py b/manager/api/tests/test_jira.py index 2021ff51..f5e000fc 100644 --- a/manager/api/tests/test_jira.py +++ b/manager/api/tests/test_jira.py @@ -317,18 +317,19 @@ def test_needed_parameters(self): mock_jira_patcher.stop() - @patch("requests.get") - @patch("requests.put") - def test_update_time_lost(self, mock_get, mock_put): + def test_update_time_lost(self): """Test call to update_time_lost and verify field was updated""" - # patch both requests.get, requests.put + mock_jira_patcher = patch("requests.get") + mock_jira_get = mock_jira_patcher.start() response = requests.Response() response.status_code = 200 response.json = lambda: {TIME_LOST_FIELD: 13.6} - mock_get.return_value = response + mock_jira_get.return_value = response + put_patcher = patch("requests.put") + mock_jira_put = put_patcher.start() response.status_code = 204 - mock_put.return_value = response + mock_jira_put.return_value = response # call update time lost jira_response = update_time_lost(1, 3.4) @@ -339,6 +340,12 @@ def test_update_time_lost(self, mock_get, mock_put): assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira time_lost field updated" + response.status_code = 400 + mock_jira_put.return_value = response + + jira_response = update_time_lost(12, 97.01) + assert jira_response.status_code == 400 + def test_add_comment(self): """Test call to jira_comment function with all needed parameters""" mock_jira_patcher = patch("requests.post") @@ -347,14 +354,14 @@ def test_add_comment(self): response.status_code = 201 mock_jira_client.return_value = response - mock_timeloss_patcher = patch("manager.utils.update_time_lost") - mock_timeloss_client = mock_timeloss_patcher.start() - mock_timeloss_client.return_value = response - jira_response = jira_comment(self.jira_request_exposure_full_jira_comment.data) assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira comment created" + mock_time_lost_patcher = patch("manager.utils.update_time_lost") + mock_time_lost_client = mock_time_lost_patcher.start() + mock_time_lost_client.return_value = response + jira_response = jira_comment(self.jira_request_narrative_full_jira_comment.data) assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira comment created" diff --git a/manager/manager/utils.py b/manager/manager/utils.py index 2b9b33d9..92ae55f7 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -603,11 +603,11 @@ def jira_comment(request_data): response = requests.post(url, json=jira_payload, headers=headers) if "time_lost" in request_data: - response = update_time_lost( + timelost_response = update_time_lost( jira_id=jira_id, add_time_lost=request_data.get("time_lost", 0.0) ) - if response.status_code == 400: - return response + if timelost_response.status_code == 400: + return timelost_response if response.status_code == 201: return Response( From 4951cf8f95d56b9d8ddbe6a643626e3c2d385a7c Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Thu, 22 Aug 2024 16:25:14 -0700 Subject: [PATCH 10/11] Added test to fail jira comment, Django Response is not the same as requests Response --- manager/api/tests/test_jira.py | 22 ++++++++++++++++++++++ manager/manager/utils.py | 1 - 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/manager/api/tests/test_jira.py b/manager/api/tests/test_jira.py index f5e000fc..fa0025a4 100644 --- a/manager/api/tests/test_jira.py +++ b/manager/api/tests/test_jira.py @@ -366,6 +366,22 @@ def test_add_comment(self): assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira comment created" + def test_add_comment_fail(self): + mock_jira_patcher = patch("requests.post") + mock_jira_client = mock_jira_patcher.start() + response = requests.Response() + response.status_code = 201 + mock_jira_client.return_value = response + + mock_time_lost_patcher = patch("manager.utils.update_time_lost") + mock_time_lost_client = mock_time_lost_patcher.start() + time_response = requests.Response() + time_response.status_code = 400 + mock_time_lost_client.return_value = time_response + + resp = jira_comment(self.jira_request_narrative_full_jira_comment.data) + assert resp.status_code == 400 + @patch.dict(os.environ, {"JIRA_API_HOSTNAME": "jira.lsstcorp.org"}) def test_handle_narrative_jira_payload(self): """Test call to function handle_jira_payload with all needed parameters @@ -378,6 +394,12 @@ def test_handle_narrative_jira_payload(self): response.json = lambda: {"key": "LOVE-XX"} mock_jira_client.return_value = response + mock_time_lost_patcher = patch("manager.utils.update_time_lost") + mock_time_lost_client = mock_time_lost_patcher.start() + time_response = requests.Response() + time_response.status_code = 200 + mock_time_lost_client.return_value = time_response + jira_response = handle_jira_payload(self.jira_request_narrative_full_jira_new) assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira ticket created" diff --git a/manager/manager/utils.py b/manager/manager/utils.py index 92ae55f7..2c883b76 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -601,7 +601,6 @@ def jira_comment(request_data): } url = f"https://{os.environ.get('JIRA_API_HOSTNAME')}/rest/api/latest/issue/{jira_id}/comment" response = requests.post(url, json=jira_payload, headers=headers) - if "time_lost" in request_data: timelost_response = update_time_lost( jira_id=jira_id, add_time_lost=request_data.get("time_lost", 0.0) From 00a639d48af175931bf53b131b838ab48d9821d1 Mon Sep 17 00:00:00 2001 From: Valerie Becker Date: Fri, 23 Aug 2024 09:56:43 -0700 Subject: [PATCH 11/11] Mock using same response object from correct framework --- manager/api/tests/test_jira.py | 21 +++++++++++++++++---- manager/manager/utils.py | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/manager/api/tests/test_jira.py b/manager/api/tests/test_jira.py index fa0025a4..51d827d1 100644 --- a/manager/api/tests/test_jira.py +++ b/manager/api/tests/test_jira.py @@ -24,6 +24,7 @@ from unittest.mock import patch import requests +import rest_framework from django.test import TestCase, override_settings from manager.utils import ( @@ -345,6 +346,7 @@ def test_update_time_lost(self): jira_response = update_time_lost(12, 97.01) assert jira_response.status_code == 400 + assert jira_response.data["ack"] == "Jira time_lost field could not be updated" def test_add_comment(self): """Test call to jira_comment function with all needed parameters""" @@ -360,13 +362,20 @@ def test_add_comment(self): mock_time_lost_patcher = patch("manager.utils.update_time_lost") mock_time_lost_client = mock_time_lost_patcher.start() - mock_time_lost_client.return_value = response + time_lost_response = rest_framework.response.Response() + time_lost_response.status_code = 200 + time_lost_response.data = { + "ack": "Jira time_lost field updated", + } + mock_time_lost_client.return_value = time_lost_response jira_response = jira_comment(self.jira_request_narrative_full_jira_comment.data) assert jira_response.status_code == 200 assert jira_response.data["ack"] == "Jira comment created" def test_add_comment_fail(self): + """Test jira_comment() return value when update_time_lost() + fails during jira_comment()""" mock_jira_patcher = patch("requests.post") mock_jira_client = mock_jira_patcher.start() response = requests.Response() @@ -375,12 +384,16 @@ def test_add_comment_fail(self): mock_time_lost_patcher = patch("manager.utils.update_time_lost") mock_time_lost_client = mock_time_lost_patcher.start() - time_response = requests.Response() - time_response.status_code = 400 - mock_time_lost_client.return_value = time_response + time_lost_response = rest_framework.response.Response() + time_lost_response.status_code = 400 + time_lost_response.data = { + "ack": "Jira time_lost field could not be updated", + } + mock_time_lost_client.return_value = time_lost_response resp = jira_comment(self.jira_request_narrative_full_jira_comment.data) assert resp.status_code == 400 + assert resp.data["ack"] == "Jira time_lost field could not be updated" @patch.dict(os.environ, {"JIRA_API_HOSTNAME": "jira.lsstcorp.org"}) def test_handle_narrative_jira_payload(self): diff --git a/manager/manager/utils.py b/manager/manager/utils.py index 2c883b76..3d0147c6 100644 --- a/manager/manager/utils.py +++ b/manager/manager/utils.py @@ -605,7 +605,7 @@ def jira_comment(request_data): timelost_response = update_time_lost( jira_id=jira_id, add_time_lost=request_data.get("time_lost", 0.0) ) - if timelost_response.status_code == 400: + if timelost_response.status_code != 200: return timelost_response if response.status_code == 201: