diff --git a/tcms/static/js/testrun_actions.js b/tcms/static/js/testrun_actions.js index 766d18f190..a9141934aa 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,62 @@ jQ(document).ready(function(){ }); }); +function drawPercentBar() { + + // TODO: better way to do this + const testRunId = window.location.pathname.split('/')[2] + + 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(` +