blob: 9077a7c49cb8c94946c17aa0bf9576927a8d0d82 [file] [log] [blame]
Oleksii Petrenko99539bd2020-07-31 20:00:06 +03001import datetime
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +03002import json
3import os
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +01004from .celery_tasks import test_rail_api
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +03005
6from django.shortcuts import render, redirect, HttpResponse
7
8from . import models
9from . import forms
Oleksii Petrenko68268172020-09-28 16:58:13 +030010from .celery_tasks.tasks import process_run, update_plot_data
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030011
12
13def index(request):
Oleksii Petrenko68268172020-09-28 16:58:13 +030014 runs = models.TestRailTestRun.objects.all()
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030015 return render(request, "control/index.html", {"runs": runs})
16
17
18def redirect_to_index(request):
19 return redirect("index")
20
21
22def single_run(request, run_id):
Oleksii Petrenko68268172020-09-28 16:58:13 +030023 run = models.TestRailTestRun.objects.get(pk=run_id)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030024 if request.method == "POST":
25 form = forms.TestRunForm(request.POST, instance=run)
26 if form.is_valid():
27 form.save()
28 return redirect("single_run", run_id)
29 else:
30 form = forms.TestRunForm(instance=run)
31
32 return render(request, "control/update_run.html",
33 {"form": form, "run_id": run_id})
34
35
36def create_run(request):
37 if request.method == "POST":
38 form = forms.TestRunForm(request.POST)
39 if form.is_valid():
40 obj = form.save()
41 return redirect("single_run", obj.id)
42 else:
43 form = forms.TestRunForm()
44
45 return render(request, "control/create_run.html", {"form": form})
46
47
48def list_reports(request):
Oleksii Petrenko68268172020-09-28 16:58:13 +030049 reports = models.TestRailReport.objects.order_by("-created_at").all()
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030050 return render(request, "control/reports.html", {"reports": reports})
51
52
53def single_report(request, report_id):
Oleksii Petrenko68268172020-09-28 16:58:13 +030054 report = models.TestRailReport.objects.get(pk=report_id)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030055 data = report.path.read().decode("utf-8")
56 if request.method == "POST" and request.is_ajax():
57 return HttpResponse(
58 json.dumps({"data": data, "finished": report.finished}),
59 content_type="application/json")
60 return render(request, "control/report.html",
61 {"report_id": report.id, "report": data})
62
63
64def submit_run(request, run_id):
Oleksii Petrenko68268172020-09-28 16:58:13 +030065 run = models.TestRailTestRun.objects.get(pk=run_id)
Sofiia Andriichenko4b440da2023-02-10 12:29:46 +010066 testrail_run = test_rail_api.get_run_by_id(run.run_id)
67 if not run.run_name:
68 run.run_name = testrail_run['name']
69 report_name = "{}-run_id-{}-date-{}".format(
70 run.run_name, run.run_id, datetime.datetime.isoformat(datetime.datetime.now()))
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030071 path = os.path.join(models.fs.location, report_name)
72 with open(path, "w"):
73 pass
Oleksii Petrenko99539bd2020-07-31 20:00:06 +030074 form = forms.TestRunForm(request.POST)
75 run_date = None
76 if form.is_valid():
77 run_date = datetime.datetime.combine(
78 form.cleaned_data["timestamp"] + datetime.timedelta(days=1),
79 datetime.datetime.min.time()).timestamp()
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030080
Oleksii Petrenko68268172020-09-28 16:58:13 +030081 report = models.TestRailReport(
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030082 test_run=run,
83 report_name=report_name,
84 path=path)
85 report.save()
Oleksii Petrenko99539bd2020-07-31 20:00:06 +030086 process_run.delay(run_id, report.id, path, run_date)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030087
Oleksii Petrenko12508832020-07-10 18:13:53 +030088 return redirect("single_report", report.id)
Oleksii Petrenko24f1f8f2020-06-26 18:09:43 +030089
90
91def show_help(request):
92 return render(request, "control/help.html")
Oleksii Petrenko68268172020-09-28 16:58:13 +030093
94
95def update_jenkins_plot(request):
96 try:
97 models.ActionLog.objects.get(name="update_plot_started")
98 return HttpResponse("Update in progress", status=403)
99 except models.ActionLog.DoesNotExist:
100 pass
101 update = models.ActionLog(
102 name="update_plot_started", date=datetime.datetime.now())
103 update.save()
104 update_plot_data.delay()
105 return HttpResponse("Started Update", status=200)
106
107
108def jenkins_plot(request):
109 try:
110 update_date = models.ActionLog.objects.get(
111 name="update_jenkins_plot").date
112 except models.ActionLog.DoesNotExist:
113 update_date = None
114 try:
115 models.ActionLog.objects.get(name="update_plot_started")
116 update_started = True
117 except models.ActionLog.DoesNotExist:
118 update_started = False
119
120 job_names_path = os.path.join(models.fs.location, "job_names.txt")
121 job_names = []
122 if os.path.exists(job_names_path):
123 try:
124 with open(job_names_path, "r") as f:
125 job_names = json.load(f)
126 except:
127 pass
128
129 return render(
130 request, "control/jenkins_plot.html",
131 {"update_date": update_date, "update_started": update_started,
132 "job_names": enumerate(job_names, 1)})