Compare test suites results feature PRODX-36767
Update Django to 4.2 version
Change-Id: Ieed17cfac12518262503043ccee03473a3023221
diff --git a/testrail_bot/control/views.py b/testrail_bot/control/views.py
index c9fe8f3..f7b0a9d 100644
--- a/testrail_bot/control/views.py
+++ b/testrail_bot/control/views.py
@@ -7,7 +7,9 @@
from . import models
from . import forms
-from .celery_tasks.tasks import process_run, update_plot_data
+from .celery_tasks.tasks import process_run, update_plot_data, \
+ get_test_passability_in_suite
+from .utils import short_names_for_dict, get_dict_diff
def index(request):
@@ -55,7 +57,8 @@
def single_report(request, report_id):
report = models.TestRailReport.objects.get(pk=report_id)
data = report.path.read().decode("utf-8")
- if request.method == "POST" and request.is_ajax():
+ if request.method == "POST" \
+ and request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest':
return HttpResponse(
json.dumps({"data": data, "finished": report.finished}),
content_type="application/json")
@@ -141,3 +144,80 @@
request, "control/jenkins_plot.html",
{"update_date": update_date, "update_started": update_started,
"job_names": enumerate(job_names, 1)})
+
+
+def submit_suites(request):
+ form = forms.DiffPassRatesForm(request.POST)
+ if not form.is_valid():
+ print(f"{form.errors=}")
+ return
+ report1 = models.SuitePassRate(suite_id=request.POST["first-suite_id"])
+ report1.save()
+ report2 = models.SuitePassRate(suite_id=request.POST["second-suite_id"])
+ report2.save()
+
+ diff_model = models.DiffOfSuitesPassRates(
+ report1=report1,
+ report2=report2,
+ limit=form.cleaned_data["limit"],
+ test_keyword=form.cleaned_data["test_keyword"]
+ )
+ diff_model.save()
+ get_test_passability_in_suite.delay(diff_model.id, report1.id)
+ get_test_passability_in_suite.delay(diff_model.id, report2.id)
+
+ return redirect("report_comparing_suites", diff_model.id)
+
+
+def compare_suites(request):
+ if request.method == "POST":
+ return submit_suites(request)
+
+ diff_form = forms.DiffPassRatesForm()
+ report1_form = forms.SuitePassRateForm(prefix='first')
+ report2_form = forms.SuitePassRateForm(prefix='second')
+
+ return render(
+ request, "control/compare_suites.html",
+ {
+ "diff_form": diff_form,
+ "report1_form": report1_form,
+ "report2_form": report2_form,
+ "finished": None
+ })
+
+
+def list_of_comparing_reports(request):
+ list_of_reports = models.DiffOfSuitesPassRates.objects.all()
+ return render(
+ request, "control/list_comparing_suites.html",
+ {
+ "reports": list_of_reports
+ })
+
+
+def report_comparing_suites(request, report_id):
+ report = models.DiffOfSuitesPassRates.objects.get(pk=report_id)
+ passrate1 = short_names_for_dict(json.loads(
+ report.report1.passrate_by_tests))
+ passrate2 = short_names_for_dict(json.loads(
+ report.report2.passrate_by_tests))
+
+ diff_table = get_dict_diff(dict1=passrate1,
+ dict2=passrate2,
+ compare_by_key="rate")
+ diff_form = forms.DiffPassRatesForm(instance=report)
+ report1_form = forms.SuitePassRateForm(instance=report.report1,
+ prefix="first")
+ report2_form = forms.SuitePassRateForm(instance=report.report2,
+ prefix="second")
+
+ return render(
+ request, "control/compare_suites.html",
+ {"diff_form": diff_form,
+ "report1_form": report1_form,
+ "report2_form": report2_form,
+ "report1": report.report1,
+ "report2": report.report2,
+ "is_finished": report.report1.finished and report.report2.finished,
+ "diff_table": diff_table})