Merge "[CompareSuitesResults] Added optgroup for select input"
diff --git a/testrail_bot/control/celery_tasks/test_rail_api.py b/testrail_bot/control/celery_tasks/test_rail_api.py
index d77b511..c359dbe 100644
--- a/testrail_bot/control/celery_tasks/test_rail_api.py
+++ b/testrail_bot/control/celery_tasks/test_rail_api.py
@@ -1,6 +1,7 @@
from testrail_api import TestRailAPI, StatusCodeError
from requests.exceptions import ReadTimeout
from django.conf import settings
+from django.utils.html import escape
from typing import Optional, List, Iterator
from functools import lru_cache
@@ -55,6 +56,11 @@
return api.runs.get_run(run_id)
+@lru_cache
+def get_run_name(run_id: int) -> str:
+ return get_run_by_id(run_id)["name"]
+
+
def get_plan_by_id(plan_id: int) -> dict:
return api.plans.get_plan(plan_id)
@@ -147,3 +153,8 @@
except StatusCodeError as e:
print(f"{e=}")
return False
+
+
+def html_link(type: str, id: int, title: str) -> str:
+ return f"<a href='https://mirantis.testrail.com/index.php?/{type}s/view/" \
+ f"{id}'>{escape(title)}</a>"
diff --git a/testrail_bot/control/celery_tasks/testrail_pipeline.py b/testrail_bot/control/celery_tasks/testrail_pipeline.py
index f1e4bf0..091e086 100644
--- a/testrail_bot/control/celery_tasks/testrail_pipeline.py
+++ b/testrail_bot/control/celery_tasks/testrail_pipeline.py
@@ -233,8 +233,7 @@
if str(run_id) == str(old_run_id):
continue
per = round(100.0 * ratio, 2)
- run_link = f"<a href=https://mirantis.testrail.com/index.php?/runs/" \
- f"view/{old_run_id}>{old_run_id} </a>"
+ run_link = test_rail_api.html_link('run', old_run_id, old_run_id)
if type(sim_result) is not dict:
f.write(f"Similarity not found due to similarity: {per}, "
f"in run {run_link}\n")
@@ -243,9 +242,9 @@
prod_link = "<a href=https://mirantis.jira.com/browse/{defect}>" \
"{defect}</a>".format(defect=sim_result["defects"])
- test_link = "<a href=https://mirantis.testrail.com/index.php?/tests/" \
- "view/{test_id}>{test_id}</a>".format(
- test_id=sim_result["test_id"])
+ test_link = test_rail_api.html_link('test',
+ sim_result["test_id"],
+ str(sim_result["test_id"]))
status_id = int(sim_result['status_id'])
if status_id in [StatusEnum.retest, StatusEnum.failed,
StatusEnum.blocked]:
@@ -304,11 +303,12 @@
"""
case_id = test["case_id"]
run_id = test["run_id"]
+ run_name = test_rail_api.get_run_name(run_id)
+ test_link = test_rail_api.html_link('test', test['id'], test["title"])
+ run_link = test_rail_api.html_link('run', run_id, run_name)
- f.write("<br><b>Proceeding test {title}<br>with id <a "
- "href=https://mirantis.testrail.com/"
- "index.php?/tests/view/{id}>[{id}]"
- "</a></b>\n".format(id=test['id'], title=test["title"]))
+ f.write(f"<br><b>Proceeding test {test_link} <br>"
+ f"in {run_link} run</b>\n")
f.flush()
last_comment = get_last_comment(case_id, run_id, text_filters)
@@ -318,11 +318,9 @@
if found:
return
else:
- f.write("<b style='color:red;'>Automatic test processing failed. "
+ f.write(f"<b style='color:red;'>Automatic test processing failed. "
"Please process test manually "
- "<a href=https://mirantis.testrail.com/"
- "index.php?/tests/view/{test_id}>{test_id}"
- "</a></b>\n\n".format(test_id=test["id"]))
+ f"{test_link}</b>\n\n")
f.flush()
@@ -349,12 +347,8 @@
else:
test_run = test_rail_api.get_run_by_id(bot_test_run.run_id)
run_type = "run"
- f.write("Start processing {run_type} <a "
- "href=https://mirantis.testrail.com/"
- "index.php?/{run_type}s/view/{id}>{name}"
- "</a>\n".format(run_type=run_type,
- id=test_run['id'],
- name=test_run['name']))
+ link = test_rail_api.html_link(run_type, test_run['id'], test_run['name'])
+ f.write(f"Start processing {run_type} {link}\n")
f.flush()
project_id = get_project_id(f, bot_test_run, report)