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',