Switch to bootstrap5
Improve description for fields
Remove duplicated create_run.html template
PRODX-37202
Change-Id: Ie69c93f0495b16b687ae8d6fbbdca56cf64bab9d
diff --git a/testrail_bot/control/forms.py b/testrail_bot/control/forms.py
index 51d4fb2..2bdffe3 100644
--- a/testrail_bot/control/forms.py
+++ b/testrail_bot/control/forms.py
@@ -13,17 +13,17 @@
fields = "__all__"
labels = {
"project_name": "Name of the project",
- "plan_name": "Name of the Test Plan without date",
+ "plan_name": "Pattern for name of the Test Plan",
"run_name": "Name of the run",
- "test_pattern": "Test run pattern",
- "run_id": "ID of the run",
- "created_by_id": "ID of the user that created Test Run",
+ "test_pattern": "Pattern for name of the Test Run",
+ "run_id": "ID of the run/plan",
+ "created_by_id": "ID of the user that created Test Plan",
"filter_func": "Custom filter function",
"ip_filter": "Mask all IP with x.x.x.x",
"uuid_filter": "Mask all UUID with xxxx",
- "filter_last_traceback": "Use only last traceback to "
+ "filter_last_traceback": "Use only traceback to "
"compare comments",
- "timestamp": "Date of report to be processed"
+ "timestamp": "Search for test plans created before this date"
}
help_texts = {
"filter_func": "Leave blank if not used",
diff --git a/testrail_bot/control/templates/base.html b/testrail_bot/control/templates/base.html
index 464681a..d2dd9a3 100644
--- a/testrail_bot/control/templates/base.html
+++ b/testrail_bot/control/templates/base.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-{% load bootstrap3 %}
+{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
@@ -8,25 +8,30 @@
<meta charset="UTF-8">
<title>TestRail bot configuration</title>
<style>
- body { padding-top: 70px; }
+ body { padding-top: 0px; }
</style>
{% block head %}
{% endblock %}
</head>
<body>
-<nav class="navbar navbar-inverse navbar-fixed-top">
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
- <div class="navbar-header">
- <a class="navbar-brand" href="{% url 'index' %}">TestRail bot</a>
- </div>
- <ul class="nav navbar-nav">
- <li><a href="{% url 'index' %}">Test Runs</a></li>
- <li><a href="{% url 'list_reports' %}">Reports</a></li>
- <li><a href="{% url 'help' %}">Help</a></li>
- <li><a href="{% url 'jenkins_plot' %}">Jenkins plot</a></li>
+ <div class="navbar-header">
+ <a class="navbar-brand" href="{% url 'index' %}">TestRail bot</a>
+ </div>
+ <ul class="navbar-nav navbar-collapse">
+ <li class="nav-item ">
+ <a class="nav-link" href="{% url 'index' %}">Test Runs</a></li>
+ <li class="nav-item">
+ <a class="nav-link" href="{% url 'list_reports' %}">Reports</a></li>
+ <li class="nav-item">
+ <a class="nav-link" href="{% url 'help' %}">Help</a></li>
+ <li class="nav-item">
+ <a class="nav-link" href="{% url 'jenkins_plot' %}">Jenkins
+ plot</a></li>
- </ul>
- </div>
+ </ul>
+ </div>
</nav>
{% block section %}{% endblock %}
</body>
diff --git a/testrail_bot/control/templates/control/create_run.html b/testrail_bot/control/templates/control/create_run.html
deleted file mode 100644
index 136b7c1..0000000
--- a/testrail_bot/control/templates/control/create_run.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% block section %}
-<div>
- <input type="button" onclick="location.href={% url 'index' %}" height="8"
- class="btn btn-primary" value="<- Back"/>
- <h3>Create new Test Run</h3>
- <form action="{% url 'create_run' %}" method="post" class="form">
- {% csrf_token %}
- {% bootstrap_form_errors form type='non_fields' %}
- <div class="col-xs-8">{% bootstrap_field form.project_name size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.plan_name size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.run_name size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.test_pattern size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.run_id size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.created_by_id size='sm' %}</div>
- <div class="col-xs-8">
- User to id list: <ul><li>os-qa-bot = <code>109</code></li></ul>
- </div>
- <div class="col-xs-8">{% bootstrap_field form.filter_func size='sm' %}</div>
- <div class="col-xs-8">
- {% bootstrap_field form.timestamp size='sm' %}
- </div>
- <div class="col-md-5">
- {% bootstrap_field form.ip_filter size='sm'%}
- </div>
- <div class="col-md-5">
- {% bootstrap_field form.uuid_filter size='sm'%}
- </div>
- <div class="col-md-5">
- {% bootstrap_field form.filter_last_traceback size='sm'%}
- </div>
- {% buttons %}
- <div class="btn-toolbar col-xs-7">
- <button type="submit" class="btn btn-primary">
- <svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="1em"
- height="1em" viewBox="0,0,256,256">
- <g fill="#fffafa" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(10.66667,10.66667)">
- <path d="M6,2c-0.13812,0 -0.27212,0.01438 -0.40234,0.04102c-0.91157,0.18642 -1.59766,0.99211 -1.59766,1.95898v18l8,-3l8,3v-18c0,-0.1375 -0.01426,-0.27246 -0.04102,-0.40234c-0.15978,-0.78135 -0.77529,-1.39686 -1.55664,-1.55664c-0.13022,-0.02663 -0.26422,-0.04102 -0.40234,-0.04102z"></path></g></g>
- </svg>
- Save
- </button>
- </div>
- {% endbuttons %}
- </form>
-</div>
-{% endblock %}
\ No newline at end of file
diff --git a/testrail_bot/control/templates/control/help.html b/testrail_bot/control/templates/control/help.html
index c7124ff..e0f3576 100644
--- a/testrail_bot/control/templates/control/help.html
+++ b/testrail_bot/control/templates/control/help.html
@@ -26,7 +26,7 @@
</li>
<li>Select <code>change ip to x.x.x.x</code> to replace all ip addresses to x.x.x.x</li>
<li>Select <code>change uuid to xxxx</code> to change all uuids to xxxx</li>
- <li>Select <code>Use only last traceback to compare comments</code> to use data located after last <code>Traceback:</code></li>
+ <li>Select <code>Use only traceback to compare comments</code> to use data located after last <code>Traceback:</code></li>
<li>Click save to save record and run it later</li>
</ol>
</li>
diff --git a/testrail_bot/control/templates/control/index.html b/testrail_bot/control/templates/control/index.html
index 359e975..64e3e99 100644
--- a/testrail_bot/control/templates/control/index.html
+++ b/testrail_bot/control/templates/control/index.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block section %}
<input type="button" onclick="location.href={% url 'create_run' %}"
- class="btn btn-primary" value="Create new Test Run" />
+ class="btn btn-primary m-1" value="Create new Test Run" />
<p><b>Test Runs</b> (total {{ runs|length }} runs):</p>
<div class="list-group">
{% for run in runs %}
diff --git a/testrail_bot/control/templates/control/report.html b/testrail_bot/control/templates/control/report.html
index 2adc34b..b4766cd 100644
--- a/testrail_bot/control/templates/control/report.html
+++ b/testrail_bot/control/templates/control/report.html
@@ -1,7 +1,8 @@
{% extends "base.html" %}
{% block section %}
-{% load bootstrap3 %}
-{% bootstrap_javascript jquery=True %}
+{% load bootstrap5 %}
+
+<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
function getCookie(name) {
let cookieValue = null;
@@ -19,18 +20,16 @@
return cookieValue;
};
const csrftoken = getCookie('csrftoken');
-
function send(){
$.ajax({
type: "post",
url: "{% url 'single_report' report_id %}",
dataType: "json",
headers: {'X-CSRFToken': csrftoken},
- success:function(data)
- {
+ success: function(data) {
tag = document.getElementById("data");
tag.innerHTML = data["data"];
- //Send another request in 10 seconds.
+ //Send another request in 3 seconds.
if (data["finished"] != true){
setTimeout(function(){
send();
@@ -38,7 +37,8 @@
}
}
});
-}
-send();</script>
-<pre id="data">{{report}}</pre>
+};
+window.onload = function() {send()};</script>
+
+<pre id="data" class="p-4 border">{{ report | safe }}</pre>
{% endblock %}
\ No newline at end of file
diff --git a/testrail_bot/control/templates/control/update_run.html b/testrail_bot/control/templates/control/update_run.html
index 5ca7033..31c634a 100644
--- a/testrail_bot/control/templates/control/update_run.html
+++ b/testrail_bot/control/templates/control/update_run.html
@@ -1,38 +1,20 @@
{% extends "base.html" %}
-{% load bootstrap3 %}
+{% load bootstrap5 %}
{% block section %}
-<div>
+<div class="p-2">
<input type="button" onclick="location.href={% url 'index' %}" height="8"
- class="btn btn-primary" value="<- Back"/>
+ class="btn btn-primary m-1" value="<- Back"/>
+ {% if run_id %}
<h3>Edit Test Run #{{ run_id }}</h3>
<form action="{% url 'single_run' run_id %}" method="post" class="form">
- {% csrf_token %}
- {% bootstrap_form_errors form type='non_fields' %}
- <div class="col-xs-8">{% bootstrap_field form.project_name size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.plan_name size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.run_name size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.test_pattern size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.run_id size='sm' %}</div>
- <div class="col-xs-8">{% bootstrap_field form.created_by_id size='sm' %}</div>
- <div class="col-xs-8">
- User to id list: <ul><li>os-qa-bot = <code>109</code></li></ul>
- </div>
- <div class="col-xs-8">{% bootstrap_field form.filter_func size='sm' %}</div>
- <div class="col-xs-8">
- {% bootstrap_field form.timestamp size='sm' %}
- </div>
- <div class="col-md-5">
- {% bootstrap_field form.ip_filter size='sm'%}
- </div>
- <div class="col-md-5">
- {% bootstrap_field form.uuid_filter size='sm'%}
- </div>
- <div class="col-md-5">
- {% bootstrap_field form.filter_last_traceback size='sm'%}
- </div>
+ {% else %}
+ <h3>Create Test Run</h3>
+ <form action="{% url 'create_run' %}" method="post" class="form">
+ {% endif %}
+
{% buttons %}
<div class="btn-toolbar col-xs-7">
- <button type="submit" class="btn btn-primary">
+ <button type="submit" class="btn btn-primary m-1">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="1em"
height="1em" viewBox="0,0,256,256">
<g fill="#fffafa" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(10.66667,10.66667)">
@@ -40,7 +22,9 @@
</svg>
Save
</button>
- <button type="submit" formaction="{% url 'submit_run' run_id %}" class="btn btn-primary">
+ {% if run_id %}
+ <button type="submit" formaction="{% url 'submit_run' run_id %}"
+ class="btn btn-primary m-1">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-chevron-double-right" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M3.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L9.293 8 3.646 2.354a.5.5 0 0 1 0-.708z"/>
<path fill-rule="evenodd" d="M7.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L13.293 8 7.646 2.354a.5.5 0 0 1 0-.708z"/>
@@ -48,7 +32,7 @@
Submit
</button>
<button type="submit" formaction="{% url 'delete_run' run_id %}"
- class="btn btn-danger">
+ class="btn btn-danger m-1">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="1em"
height="1em" viewBox="0,0,256,256">
<g fill="#ffffff" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(10.66667,10.66667)">
@@ -56,6 +40,77 @@
</svg>
Delete
</button>
+ {% endif %}
+ </div>
+ {% endbuttons %}
+ {% csrf_token %}
+ {% bootstrap_form_errors form type='non_fields' %}
+ <div class="col-xs-8">
+ {% bootstrap_field form.project_name size='sm' %}</div>
+ <div class="col-xs-8">
+ {% bootstrap_field form.run_id size='sm' %}</div>
+ <div class="col-xs-8">
+ {% bootstrap_field form.run_name size='sm' %}</div>
+ <div class=" p-3 mt-5 bg-light bg-gradient">
+ <h5>TestRail filters</h5>
+ <div class="col-xs-8">
+ {% bootstrap_field form.plan_name size='sm' %}</div>
+
+ <div class="col-xs-8">
+ {% bootstrap_field form.test_pattern size='sm' %}</div>
+
+ <div class="col-xs-8">
+ {% bootstrap_field form.created_by_id size='sm' %}</div>
+ <div class="col-xs-8 small">
+ User to id list: <ul><li>os-qa-bot = <code>109</code></li></ul>
+ </div>
+ <div class="col-xs-8">
+ {% bootstrap_field form.timestamp size='sm' %}
+ </div>
+ </div>
+ <div class=" p-3 mt-5 bg-light bg-gradient">
+ <h5>Text filters</h5>
+ <div class="col-md-5">
+ {% bootstrap_field form.ip_filter size='sm'%}
+ </div>
+ <div class="col-md-5">
+ {% bootstrap_field form.uuid_filter size='sm'%}
+ </div>
+ <div class="col-md-5">
+ {% bootstrap_field form.filter_last_traceback size='sm'%}
+ </div>
+ <div class="col-xs-8">
+ {% bootstrap_field form.filter_func size='sm' %}</div>
+ </div>
+ {% buttons %}
+ <div class="btn-toolbar col-xs-7">
+ <button type="submit" class="btn btn-primary m-1">
+ <svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="1em"
+ height="1em" viewBox="0,0,256,256">
+ <g fill="#fffafa" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(10.66667,10.66667)">
+ <path d="M6,2c-0.13812,0 -0.27212,0.01438 -0.40234,0.04102c-0.91157,0.18642 -1.59766,0.99211 -1.59766,1.95898v18l8,-3l8,3v-18c0,-0.1375 -0.01426,-0.27246 -0.04102,-0.40234c-0.15978,-0.78135 -0.77529,-1.39686 -1.55664,-1.55664c-0.13022,-0.02663 -0.26422,-0.04102 -0.40234,-0.04102z"></path></g></g>
+ </svg>
+ Save
+ </button>
+ {% if run_id %}
+ <button type="submit" formaction="{% url 'submit_run' run_id %}"
+ class="btn btn-primary m-1">
+ <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-chevron-double-right" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
+ <path fill-rule="evenodd" d="M3.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L9.293 8 3.646 2.354a.5.5 0 0 1 0-.708z"/>
+ <path fill-rule="evenodd" d="M7.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L13.293 8 7.646 2.354a.5.5 0 0 1 0-.708z"/>
+ </svg>
+ Submit
+ </button>
+ <button type="submit" formaction="{% url 'delete_run' run_id %}"
+ class="btn btn-danger m-1">
+ <svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="1em"
+ height="1em" viewBox="0,0,256,256">
+ <g fill="#ffffff" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(10.66667,10.66667)">
+ <path d="M10,2l-1,1h-4c-0.6,0 -1,0.4 -1,1c0,0.6 0.4,1 1,1h2h10h2c0.6,0 1,-0.4 1,-1c0,-0.6 -0.4,-1 -1,-1h-4l-1,-1zM5,7v13c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-13zM9,9c0.6,0 1,0.4 1,1v9c0,0.6 -0.4,1 -1,1c-0.6,0 -1,-0.4 -1,-1v-9c0,-0.6 0.4,-1 1,-1zM15,9c0.6,0 1,0.4 1,1v9c0,0.6 -0.4,1 -1,1c-0.6,0 -1,-0.4 -1,-1v-9c0,-0.6 0.4,-1 1,-1z"></path></g></g>
+ </svg>
+ Delete
+ </button>
+ {% endif %}
</div>
{% endbuttons %}
</form>
diff --git a/testrail_bot/control/views.py b/testrail_bot/control/views.py
index 847bc3c..c9fe8f3 100644
--- a/testrail_bot/control/views.py
+++ b/testrail_bot/control/views.py
@@ -44,7 +44,7 @@
form = forms.TestRunForm()
form.fields["timestamp"].initial = datetime.date.today()
- return render(request, "control/create_run.html", {"form": form})
+ return render(request, "control/update_run.html", {"form": form})
def list_reports(request):
@@ -59,8 +59,11 @@
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})
+ {"report_id": report.id,
+ "report": data,
+ "finished": report.finished})
def submit_run(request, run_id):
diff --git a/testrail_bot/requirements.txt b/testrail_bot/requirements.txt
index 865ce30..41fe5c8 100644
--- a/testrail_bot/requirements.txt
+++ b/testrail_bot/requirements.txt
@@ -1,6 +1,6 @@
celery==4.4.6
Django==3.0.7
-django-bootstrap3==14.0.0
+django-bootstrap-v5==1.0.11
psycopg2-binary==2.8.5
redis==3.5.3
testrail-api==1.8.0
@@ -8,3 +8,4 @@
python-jenkins==1.7.0
matplotlib==3.3.2
retry==0.9.2
+
diff --git a/testrail_bot/testrail_bot/settings.py b/testrail_bot/testrail_bot/settings.py
index 74464f2..a40279d 100644
--- a/testrail_bot/testrail_bot/settings.py
+++ b/testrail_bot/testrail_bot/settings.py
@@ -32,7 +32,7 @@
INSTALLED_APPS = [
'control.apps.ControlConfig',
- 'bootstrap3',
+ 'bootstrap5',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',