API Name: global.ATFNotificationUtils

var ATFNotificationUtils = Class.create();
ATFNotificationUtils.prototype = {
type: 'ATFNotificationUtils',

initialize: function() {
},

getCSS: function() {
var PASS_COLOR = gs.getProperty('sn_atf.schedule.suite_result_email.pass_color', '#d3f6d6');
var FAIL_COLOR = gs.getProperty('sn_atf.schedule.suite_result_email.fail_color', '#fccac9');
var ERROR_COLOR = gs.getProperty('sn_atf.schedule.suite_result_email.error_color', '#ffdcc6');
var SKIP_COLOR = gs.getProperty('sn_atf.schedule.suite_result_email.skip_color', '#ffffff');
var CANCEL_COLOR = gs.getProperty('sn_atf.schedule.suite_result_email.cancel_color', '#ffffff');
return '.fixed_cell{width:280px; max-width:280px; word-wrap:break-word; line-height:1.42857; padding:6px;font-size:13px;border-right:1px solid #BDC0C4;border-top:1px solid #BDC0C4;border-bottom:1px solid #BDC0C4;}' +
'.heading{font-size:15px; font-weight:bold; font-family:SourceSansPro, "Helvetica Neue", Arial;}' +
'.link{font-weight:normal;text-decoration:none;color:#278efc;}' +
'.normal{color:#485563; margin-bottom:20px; font-family:SourceSansPro, "Helvetica Neue", Arial;}' +
'.link_header{text-align:left; font-weight:bold; color:#343d47;}' +
'.cell{font-size:12px; border:1px solid #BDC0C4; margin-left:auto; margin-right:auto; width:32px;}' +
'.test_fail{text-align:center; border:1px solid #bdc0c4; background:' + FAIL_COLOR + '; width:32px;}' +
'.test_pass{text-align:center; border: 1px solid #bdc0c4; border-right:1px solid #bdc0c4; background:' + PASS_COLOR + '; width:32px;}' +
'.test_skipped{text-align:center; border: 1px solid #bdc0c4; border-right:1px solid #bdc0c4; background:' + SKIP_COLOR + ';width:32px;}' +
'.test_error{text-align:center;border: 1px solid #bdc0c4; border-right:1px solid #bdc0c4; background:' + ERROR_COLOR + '; width:32px;}' +
'.test_canceled{width:32px; text-align:center; background:' + CANCEL_COLOR + ';border: 1px solid #bdc0c4; border-right:1px solid #bdc0c4;}' +
'.table_title {font-size:15px; margin-top:20px; margin-bottom:10px;font-family:SourceSansPro, "Helvetica Neue", Arial; line-height:1.42857;color:#343d47;}'+
'.table_wrap {display: inline-block; position:relative;}' +
'.pivot-2-levels.table {margin: 0; border: 1px solid #BDC0C4;font-family:SourceSansPro, "Helvetica Neue", Arial;font-size:13px;border-collapse:collapse;}' +
'.pivot-2-levels .header-row td {background: #f4f4f4;border:1px solid #BDC0C4}' +
'.pivot-2-levels th {background: #f4f4f4; text-align:right; vertical-align:middle !important; font-weight:normal;padding-left:6px;padding-right:6px;padding-top:6px;padding-bottom:6px;line-height:1.42857;}' +
'.pivot-2-levels th.x-axis-category {font-weight:normal;border-left:1px solid #BDC0C4;}' +
'.pivot-2-levels th.x-axis-category-test-suite {font-weight:normal;border-bottom:1px solid #BDC0C4;}' +
'.pivot-2-levels th.y-axis-category {font-weight:normal;text-align:left;border-top:1px solid #BDC0C4;}' +
'.pivot-2-levels th.num {background:white;text-align:center;border-left:1px solid #BDC0C4;border-top:1px solid #BDC0C4;}' +
'.pivot-2-levels th.pv_test_suite {font-weight:bold;border-left:1px solid #BDC0C4;border-bottom:1px solid #BDC0C4;}';
},

getCSSStyle: function() {
return '<style type="text/css">' + this.getCSS() + '</style>';
},

formatText: function(text) {
return GlideStringUtil.escapeHTML(text);
},

// total number of suites in the current test suite (including itself)
// can't just sum the suite results where base suite result is the testSuiteResultSysId
// because it doesn't calculate correctly for child suites that run on their own
getTotalNumSuites: function(testSuiteSysId) {
var total = 0;
var tsGR = new GlideRecord('sys_atf_test_suite');
tsGR.addQuery("parent", testSuiteSysId);
tsGR.addQuery("active", true);
tsGR.query();
while(tsGR.next()) {
// go through each of the children of this test suite
total += this.getTotalNumSuites(tsGR.getUniqueValue());
}
return total + 1;
},

// total number of suites in the current test suite (including itself) with status success
// consider success with warnings as success
getNumSuccessfulSuites: function(testSuiteResult) {
var success = 'success';
var successWithWarnings = 'success_with_warnings';
var total = 0;
var tsrGR = new GlideRecord("sys_atf_test_suite_result");
// case 1: testSuiteResult is base suite result
if (testSuiteResult.number == testSuiteResult.base_suite_result.number){
tsrGR.addQuery("base_suite_result.sys_id", testSuiteResult.sys_id);
tsrGR.addQuery('status', 'IN', [success, successWithWarnings]);
tsrGR.query();
total = tsrGR.getRowCount();
}
// case 2: testSuiteResult is child suite
else if (testSuiteResult.parent.number == testSuiteResult.base_suite_result.number) {
tsrGR.addQuery("parent.sys_id", testSuiteResult.sys_id);
tsrGR.addQuery('status', 'IN', [success, successWithWarnings]);
tsrGR.query();
total = tsrGR.getRowCount();
if (testSuiteResult.status == success ||
testSuiteResult.status == successWithWarnings)
total++;
}
// case 3: suite with no child suites
else {
if (testSuiteResult.status == success ||
testSuiteResult.status == successWithWarnings)
total++;
}
return total;
},

// total number of suites in the current test suite (including itself) with given status
getNumStatusSuites: function(testSuiteResult, status) {
var total = 0;
var tsrGR = new GlideRecord("sys_atf_test_suite_result");
// case 1: testSuiteResult is base suite result
if (testSuiteResult.number == testSuiteResult.base_suite_result.number){
tsrGR.addQuery("base_suite_result.sys_id", testSuiteResult.sys_id);
tsrGR.addQuery('status', status);
tsrGR.query();
total = tsrGR.getRowCount();
}
// case 2: testSuiteResult is child suite
else if (testSuiteResult.parent.number == testSuiteResult.base_suite_result.number) {
tsrGR.addQuery("parent.sys_id", testSuiteResult.sys_id);
tsrGR.addQuery('status', status);
tsrGR.query();
total = tsrGR.getRowCount();
if (testSuiteResult.status == status)
total++;
}
// case 3: suite with no child suites
else {
if (testSuiteResult.status == status)
total++;
}
return total;
},

getTotalTestsInSuite: function(testSuiteResult) {
return testSuiteResult.rolled_up_test_error_count +
testSuiteResult.rolled_up_test_failure_count +
testSuiteResult.rolled_up_test_skip_count +
testSuiteResult.rolled_up_test_success_count;
},

isStatusNotPassed: function(result) {
if (current.status == "failure" ||
current.status == "error" ||
current.status == "canceled" ||
current.status == "skipped")
return true;
return false;
},



};