Add initial testRail bot implementation
Related-PROD: PRODX-5842
Change-Id: Id2ac9b2275ced80a95019d30ae9e0f7a967f07ec
diff --git a/testrail_bot/control/views.py b/testrail_bot/control/views.py
new file mode 100644
index 0000000..ee582eb
--- /dev/null
+++ b/testrail_bot/control/views.py
@@ -0,0 +1,83 @@
+from datetime import date
+import json
+import os
+
+from django.shortcuts import render, redirect, HttpResponse
+
+from . import models
+from . import forms
+from .celery_tasks.tasks import process_run
+
+
+def index(request):
+ runs = models.TestRun.objects.all()
+ return render(request, "control/index.html", {"runs": runs})
+
+
+def redirect_to_index(request):
+ return redirect("index")
+
+
+def single_run(request, run_id):
+ run = models.TestRun.objects.get(pk=run_id)
+ if request.method == "POST":
+ form = forms.TestRunForm(request.POST, instance=run)
+ if form.is_valid():
+ form.save()
+ return redirect("single_run", run_id)
+ else:
+ form = forms.TestRunForm(instance=run)
+
+ return render(request, "control/update_run.html",
+ {"form": form, "run_id": run_id})
+
+
+def create_run(request):
+ if request.method == "POST":
+ form = forms.TestRunForm(request.POST)
+ if form.is_valid():
+ obj = form.save()
+ return redirect("single_run", obj.id)
+ else:
+ form = forms.TestRunForm()
+
+ return render(request, "control/create_run.html", {"form": form})
+
+
+def list_reports(request):
+ reports = models.Report.objects.all()
+ return render(request, "control/reports.html", {"reports": reports})
+
+
+def single_report(request, report_id):
+ report = models.Report.objects.get(pk=report_id)
+ data = report.path.read().decode("utf-8")
+ if request.method == "POST" and request.is_ajax():
+ return HttpResponse(
+ json.dumps({"data": data, "finished": report.finished}),
+ content_type="application/json")
+ return render(request, "control/report.html",
+ {"report_id": report.id, "report": data})
+
+
+def submit_run(request, run_id):
+ run = models.TestRun.objects.get(pk=run_id)
+ report_name = "{}-{}".format(run.run_name, date.isoformat(date.today()))
+ path = os.path.join(models.fs.location, report_name)
+ with open(path, "w"):
+ pass
+
+ report = models.Report(
+ test_run=run,
+ report_name=report_name,
+ path=path)
+ report.save()
+ process_run.delay(run_id, report.id, path)
+
+ return render(
+ request, "control/report.html",
+ {"report": report.path.read().decode("utf-8"), "report_id": report.id})
+
+
+def show_help(request):
+ return render(request, "control/help.html")