testcube/static/modules/run-detail.js
define(['jquery', './table-support', './chart-support', './utils', 'bootstrapSelect'],
function ($, support, chart, utils) {
"use strict";
let f = support.formatter;
let runDetailColumns = [
{title: 'ID', field: 'id'},
{title: 'Team', field: 'team_name'},
{title: 'Product', field: 'product_name'},
{title: 'Name', field: 'name'},
{title: 'Start Time', field: 'start_time', formatter: f.timeFormatter},
{title: 'Duration', field: 'duration', formatter: f.durationFormatter},
{title: 'Start By', field: 'start_by'},
{title: 'Passed', field: 'result_passed'},
{title: 'Failed', field: 'result_failed'},
{title: 'Total', field: 'result_total'},
{title: 'Status', field: 'get_status_display'}
];
let runFailedResultColumns = [
{title: 'ID', field: 'id', formatter: f.resultIdFormatter, sortable: true},
{title: 'TestCase', field: 'testcase_info', formatter: f.caseNameFormatter, sortable: true},
{title: 'Error Message', field: 'error_message', sortable: true},
{title: 'Reason', field: 'reason', sortable: true},
{title: 'Stability', field: 'stability'},
{title: 'Duration', field: 'duration', formatter: f.durationFormatter, sortable: true},
{title: 'Outcome', field: 'get_outcome_display', formatter: f.outcomeFormatter, sortable: true}
];
let runPassedResultColumns = [
{title: 'ID', field: 'id', formatter: f.resultIdFormatter, sortable: true},
{title: 'TestCase', field: 'testcase_info', formatter: f.caseNameFormatter, sortable: true},
{title: 'Duration', field: 'duration', formatter: f.durationFormatter, sortable: true},
{title: 'Stability', field: 'stability'},
{title: 'Client', field: 'test_client.name', sortable: true},
{title: 'Outcome', field: 'get_outcome_display', formatter: f.outcomeFormatter, sortable: true}
];
let runHistoryColumns = [
{title: 'ID', field: 'id', formatter: f.runIdFormatter},
{title: 'Team', field: 'team_name'},
{title: 'Product', field: 'product_name'},
{title: 'Title', field: 'name'},
{title: 'Start Time', field: 'start_time', formatter: f.timeHumanFormatter},
{title: 'Duration', field: 'duration', formatter: f.durationFormatter},
{title: 'Start By', field: 'start_by'},
{
title: 'Passing',
field: 'passing_rate',
formatter: f.rateFormatter
},
{title: 'State', field: 'get_state_display', formatter: f.runStateFormatter}
];
function summaryDataHandler(data) {
window.app.summaryInfo = data;
return [data];
}
function runListTableDataHandler(data) {
data.total = data.count;
data.rows = data.results;
for (let r of data.results) {
r.passing_rate = {
id: r.id,
passed: r.result_passed,
total: r.result_total
};
}
window.app.runList = data;
return data;
}
function renderRunDetailPage(runId) {
$('#run-summary').bootstrapTable($.extend(support.defaultTableOptions, {
url: `/api/runs/${ runId }/info/`,
responseHandler: summaryDataHandler,
sidePagination: 'client',
search: false,
pagination: false,
sortable: false,
columns: runDetailColumns,
onPostBody: runDetailSummaryPostEvent
}));
}
function runDetailSummaryPostEvent(data) {
if (data[0] === undefined) return;
let run = data[0];
let nav = `${run.id} - ${run.name}`;
$('#run-nav').empty().append(nav);
let passed = [];
let failed = [];
let other = [];
for (let result of window.app.summaryInfo.results) {
result.error_message = utils.safeMessage(result.error_message);
if (result.get_outcome_display === 'Passed') {
passed.push(result);
} else if (result.get_outcome_display === 'Failed') {
failed.push(result);
} else {
other.push(result);
}
}
$('#result-failed-list').bootstrapTable({
data: failed,
search: true,
pagination: true,
pageSize: 100,
pageList: [100, 200],
sortable: true,
showFooter: false,
columns: runFailedResultColumns,
onPostBody: undefined
});
$('#result-passed-list').bootstrapTable({
data: passed,
search: true,
pagination: true,
pageSize: 100,
pageList: [100, 200],
sortable: true,
showFooter: false,
columns: runPassedResultColumns,
onPostBody: undefined
});
$('#result-other-list').bootstrapTable({
data: other,
search: true,
pagination: true,
pageSize: 100,
pageList: [100, 200],
sortable: true,
showFooter: false,
columns: runFailedResultColumns,
onPostBody: undefined
});
renderRunHistoryTable(run.id);
}
function renderRunHistoryTable(runId) {
$('#run-history').bootstrapTable({
sidePagination: 'server',
url: `/api/runs/${ runId }/history/`,
responseHandler: runListTableDataHandler,
search: false,
pagination: false,
showFooter: false,
sortable: false,
columns: runHistoryColumns,
onPostBody: chart.renderRunDetailChart
});
}
function setupRunCoverageEvent(runId) {
$('#run-coverage-btn').click(function () {
waitForLoading();
chart.renderRunCoverageChart(runId, function () {
$('#run-coverage').removeClass();
loadingCompleted();
$('#run-coverage-btn').click(undefined);
})
})
}
return {
renderRunDetailPage: renderRunDetailPage,
setupRunCoverageEvent: setupRunCoverageEvent
};
});