MT#33006 tracker: fix mantis_set_release_target

* add support to force setting the value

Change-Id: I40e65ade3e5aa90253e6a044dfabf8c6175d158d
pull/9/head
Victor Seva 3 years ago
parent 307b549de5
commit 35ee83fa95

@ -13,6 +13,8 @@
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
import json
from pathlib import Path
from unittest.mock import call
from unittest.mock import patch
from django.conf import settings
@ -28,8 +30,19 @@ MANTIS_ISSUE_ID = 36018
tracker_settings = TrackerConf()
class FakeResponse(object):
def __init__(self, filepath):
class FakeResponse:
def __init__(self, _json: dict):
self._json = _json
def json(self):
return self._json
def raise_for_status(self):
return False
class FakeResponseFile:
def __init__(self, filepath: Path):
self.filepath = filepath
def json(self):
@ -38,9 +51,17 @@ class FakeResponse(object):
return res
class TestFakeResponseFile(SimpleTestCase):
def test_json(self):
fake = FakeResponseFile(MANTIS_ISSUE_JSON)
res = fake.json()
self.assertTrue(len(res["issues"]), 1)
self.assertEqual(res["issues"][0]["id"], MANTIS_ISSUE_ID)
class TestFakeResponse(SimpleTestCase):
def test_json(self):
fake = FakeResponse(MANTIS_ISSUE_JSON)
fake = FakeResponse(FakeResponseFile(MANTIS_ISSUE_JSON).json())
res = fake.json()
self.assertTrue(len(res["issues"]), 1)
self.assertEqual(res["issues"][0]["id"], MANTIS_ISSUE_ID)
@ -51,27 +72,35 @@ def set_target_release_value(issue, value):
for val in cf:
if val["field"]["id"] == tracker_settings.MANTIS_TARGET_RELEASE["id"]:
val["value"] = value
return val
def get_target_release_value(issue):
cf = issue["custom_fields"]
for val in cf:
if val["field"]["id"] == tracker_settings.MANTIS_TARGET_RELEASE["id"]:
return val["value"]
class TestUtils(SimpleTestCase):
ISSUE_URL = "https://support.local/api/rest/issues/36018"
@patch(
"tracker.utils.mantis_query",
return_value=FakeResponse(MANTIS_ISSUE_JSON),
return_value=FakeResponseFile(MANTIS_ISSUE_JSON),
)
def test_mantis_get_issue_ok(self, mq):
res = utils.mantis_get_issue(MANTIS_ISSUE_ID)
self.assertEqual(res["id"], MANTIS_ISSUE_ID)
mq.assert_called_once_with(
"GET", "https://support.local/api/rest/issues/36018"
)
mq.assert_called_once_with("GET", self.ISSUE_URL)
def test_mantis_get_issue_id(self):
fake = FakeResponse(MANTIS_ISSUE_JSON)
fake = FakeResponseFile(MANTIS_ISSUE_JSON)
res = utils.mantis_get_issue_id(fake.json(), MANTIS_ISSUE_ID)
self.assertEqual(res["id"], MANTIS_ISSUE_ID)
def test_mantis_get_target_releases(self):
fake = FakeResponse(MANTIS_ISSUE_JSON)
fake = FakeResponseFile(MANTIS_ISSUE_JSON)
issue = utils.mantis_get_issue_id(fake.json(), MANTIS_ISSUE_ID)
set_target_release_value(issue, "mr10.1")
res = utils.mantis_get_target_releases(issue)
@ -84,3 +113,33 @@ class TestUtils(SimpleTestCase):
set_target_release_value(issue, "mr10.1, mr8.5.1,,")
res = utils.mantis_get_target_releases(issue)
self.assertListEqual(res, ["mr8.5.1", "mr10.1"])
@patch(
"tracker.utils.mantis_query",
return_value=FakeResponseFile(MANTIS_ISSUE_JSON),
)
def test_mantis_set_release_targets(self, mq):
fake_issue_patched = utils.mantis_get_issue_id(
FakeResponseFile(MANTIS_ISSUE_JSON).json(), MANTIS_ISSUE_ID
)
value = set_target_release_value(fake_issue_patched, "mr10.1")
payload = {"custom_fields": [value]}
utils.mantis_set_release_target(MANTIS_ISSUE_ID, "mr10.1")
calls = [
call("GET", self.ISSUE_URL),
call("PATCH", self.ISSUE_URL, json.dumps(payload)),
]
mq.assert_has_calls(calls)
@patch("tracker.utils.mantis_query")
def test_mantis_set_release_target_ko(self, mq):
"""value is already there"""
fake_issue_patched = utils.mantis_get_issue_id(
FakeResponseFile(MANTIS_ISSUE_JSON).json(), MANTIS_ISSUE_ID
)
fake_issues = {"issues": [fake_issue_patched]}
set_target_release_value(fake_issue_patched, "mr10.1,mr10.1.1")
mq.configure_mock(return_value=FakeResponse(fake_issues))
utils.mantis_set_release_target(MANTIS_ISSUE_ID, "mr10.1.1")
mq.assert_called_once_with("GET", self.ISSUE_URL)

@ -83,10 +83,13 @@ def mantis_get_issue_id(res, _id: int):
def mantis_get_issue(_id: int):
url = tracker_settings.MANTIS_URL.format(f"issues/{_id}")
response = mantis_query("GET", url)
res = mantis_get_issue_id(response.json(), _id)
res_json = response.json()
res = mantis_get_issue_id(res_json, _id)
if res:
return res
raise IssueNotFound(f"{_id} Not found in response")
raise IssueNotFound(
"{} Not found in response:{}".format(_id, res_json["issues"])
)
def mantis_note_send(_id: int, message: str) -> requests.Response:
@ -110,9 +113,21 @@ def mantis_get_target_releases(issue) -> list:
return humansorted(res)
def mantis_set_release_target(_id: int, release: str) -> requests.Response:
def mantis_set_release_target(
_id: int, release: str, force=False
) -> requests.Response:
issue = mantis_get_issue(_id)
releases = mantis_get_target_releases(issue)
if force:
releases_val = release
else:
releases = mantis_get_target_releases(issue)
if release in releases:
logger.info(
"release:{release} already in target_release:{releases}"
)
return None
releases.append(release)
releases_val = ",".join(humansorted(releases))
url = tracker_settings.MANTIS_URL.format(f"issues/{_id}")
cf = tracker_settings.MANTIS_TARGET_RELEASE
payload = json.dumps(
@ -123,7 +138,7 @@ def mantis_set_release_target(_id: int, release: str) -> requests.Response:
"id": cf["id"],
"name": cf["name"],
},
"value": f"{releases}",
"value": f"{releases_val}",
},
]
}

Loading…
Cancel
Save