From 5618bbff016a9c996a2915d76011610d16a3baf1 Mon Sep 17 00:00:00 2001 From: asankov Date: Thu, 30 Jan 2020 15:31:28 +0200 Subject: [PATCH] Update status bar dinamically when changing status of an execution. Fixes #1326 Rework the logic entirelly - leverage the API for fetching data, instead of parsing HTML - redraw all elements when user updates the status of an execution --- tcms/static/js/testrun_actions.js | 63 ++++++++++++++++++++++- tcms/static/style/base.css | 5 ++ tcms/templates/run/status_progress.html | 9 +++- tcms/templates/run/status_statistics.html | 26 +++------- 4 files changed, 82 insertions(+), 21 deletions(-) diff --git a/tcms/static/js/testrun_actions.js b/tcms/static/js/testrun_actions.js index 766d18f190..6e86b4d98a 100644 --- a/tcms/static/js/testrun_actions.js +++ b/tcms/static/js/testrun_actions.js @@ -222,7 +222,7 @@ Nitrate.TestRuns.Details.on_load = function() { jQ('.js-caserun-total').bind('click', function() { showCaseRunsWithSelectedStatus(jQ('#id_filter')[0], ''); }); - jQ('.js-status-subtotal').bind('click', function() { + jQ('.status-link-button').bind('click', function() { showCaseRunsWithSelectedStatus(jQ('#id_filter')[0], jQ(this).data('param')); }); }; @@ -305,6 +305,7 @@ function updateExecutionStatus(updateForm, executionId, caseId, executionStatusP const submitButtons = updateForm.find('.submit_button') bindSubmitButtons(updateForm, data.status_id, submitButtons, executionId, caseId) + drawPercentBar() }); }; @@ -652,7 +653,10 @@ function showCommentForm() { jQ(document).ready(function(){ - jsonRPC('TestExecutionStatus.filter', {}, data => executionStatuses = data) + jsonRPC('TestExecutionStatus.filter', {}, data => { + executionStatuses = data + drawPercentBar() + }) jQ('.btnBlueCaserun').mouseover(function() { jQ(this).find('ul').show(); @@ -683,6 +687,61 @@ jQ(document).ready(function(){ }); }); +function drawPercentBar() { + + const testRunId = $('input[name="run_id"]').val() + + jsonRPC('TestExecution.filter', {'run_id': testRunId}, testExecutions => { + + let positiveCount = 0; + let negativeCount = 0; + let allCount = testExecutions.length; + let statusCount = {} + executionStatuses.forEach(s => statusCount[s.name] = { count: 0, id: s.id }) + + testExecutions.forEach(testExecution => { + const executionStatus = executionStatuses.find(s => s.id === testExecution.status_id) + + if (executionStatus.weight > 0) { + positiveCount++ + } else if (executionStatus.weight < 0) { + negativeCount++ + } + + statusCount[executionStatus.name].count++ + }) + + const completeCount = positiveCount + negativeCount; + const completePercent = completeCount / allCount * 100; + const failurePercent = negativeCount / completeCount * 100; + $(".progress-bar > .percent > .complete-percent").text(`${completePercent}%`) + $(".progress-bar > .progress-inner").css("width", `${completePercent}%`) + $(".progress-bar > .progress-inner > .progress-failed").css("width", `${failurePercent}%`) + $(".js-caserun-total").text(allCount) + + $(".count-per-status-list").remove() + $(".count-per-status-container").prepend('') + renderCountPerStatusList(statusCount) + }) +} + +function renderCountPerStatusList(statusCount) { + for (var status in statusCount) { + const count = statusCount[status].count + let className = ""; + if (count !== 0) { + className = "status-link-button link" + } + + $(".count-per-status-list").append(` +
  • + + [${count}] +
  • + `) + } +} + function bulkAddLinkToTestExecution() { var execution_ids = serializeCaseRunFromInputList(jQ('#id_table_cases')[0]); diff --git a/tcms/static/style/base.css b/tcms/static/style/base.css index 56d61300e3..0d26314ec4 100644 --- a/tcms/static/style/base.css +++ b/tcms/static/style/base.css @@ -128,6 +128,11 @@ hr.dotted{ border:dotted #ccc 0px;border-top-width:1px;} .commentdelete{float:right; display:block; background-position:0 -15px;padding-left:13px; margin:-20px 5px 0 0;cursor:pointer;} table.noborder,table.noborder td{border:none;background:transparent;} +.link { + color: #004481 !important; + text-decoration: none; + cursor: pointer +} /*****************************LAYOUT****************/ #content{width:100%; z-index:1;} diff --git a/tcms/templates/run/status_progress.html b/tcms/templates/run/status_progress.html index ef35871bb8..b3498b5d3e 100644 --- a/tcms/templates/run/status_progress.html +++ b/tcms/templates/run/status_progress.html @@ -1 +1,8 @@ -
    {{ status_stats.CompletedPercentage|floatformat:0 }}%
    \ No newline at end of file +
    +
    + +
    +
    +
    +
    +
    diff --git a/tcms/templates/run/status_statistics.html b/tcms/templates/run/status_statistics.html index 14362091c1..04ed25fc50 100644 --- a/tcms/templates/run/status_statistics.html +++ b/tcms/templates/run/status_statistics.html @@ -2,32 +2,22 @@ {% load static %}
    - {% include "run/status_progress.html" %} -