1 | 'use strict';
|
2 |
|
3 | const CoreObject = require('core-object');
|
4 | const chalk = require('chalk');
|
5 | const Table = require('cli-table3');
|
6 |
|
7 | module.exports = CoreObject.extend({
|
8 | print() {
|
9 | let task = this;
|
10 | let colorAndMessage;
|
11 | let failMessage;
|
12 | let countPassed = 0;
|
13 | let countFailed = 0;
|
14 | let allowedFailCount = 0;
|
15 | task._printResultHeader();
|
16 |
|
17 | this.results.forEach((scenario) => {
|
18 | if (scenario.result) {
|
19 | colorAndMessage = chalk.green(`Scenario ${scenario.scenario}: SUCCESS`);
|
20 | countPassed++;
|
21 | } else {
|
22 | failMessage = `Scenario ${scenario.scenario}: FAIL`;
|
23 |
|
24 | if (scenario.allowedToFail) {
|
25 | failMessage = `${failMessage} (Allowed)`;
|
26 | allowedFailCount++;
|
27 | }
|
28 |
|
29 | colorAndMessage = chalk.red(failMessage);
|
30 | countFailed++;
|
31 | }
|
32 | task.ui.writeLine(colorAndMessage);
|
33 | task.ui.writeLine(`Command run: ${scenario.command}`);
|
34 | if (scenario.envState) {
|
35 | task.ui.writeLine(`with env: ${JSON.stringify(scenario.envState, null, 2)}`);
|
36 | }
|
37 | task._printDependencyTable(scenario.dependencyState);
|
38 | });
|
39 |
|
40 | task.ui.writeLine('');
|
41 | task._printResultsSummary(countFailed, countPassed, allowedFailCount, this.results.length);
|
42 | },
|
43 | _printResultHeader() {
|
44 | let task = this;
|
45 | task.ui.writeLine('');
|
46 | task.ui.writeLine('------ RESULTS ------');
|
47 | task.ui.writeLine('');
|
48 | },
|
49 | _printDependencyTable(dependencyStatus) {
|
50 | if (!dependencyStatus.length) {
|
51 | return;
|
52 | }
|
53 | let task = this;
|
54 | let colorForDepFn;
|
55 | let tableRow;
|
56 | let table = new Table({
|
57 | head: [
|
58 | chalk.gray('Dependency'),
|
59 | chalk.gray('Expected'),
|
60 | chalk.gray('Used'),
|
61 | chalk.gray('Type'),
|
62 | ],
|
63 | colWidths: [20, 20, 30, 10],
|
64 | });
|
65 | dependencyStatus.forEach((dep) => {
|
66 | if (dep.versionExpected === dep.versionSeen) {
|
67 | colorForDepFn = chalk.green;
|
68 | } else {
|
69 | colorForDepFn = chalk.yellow;
|
70 | }
|
71 | tableRow = [
|
72 | dep.name,
|
73 | dep.versionExpected || 'Not Installed',
|
74 | dep.versionSeen || 'Not Installed',
|
75 | dep.packageManager,
|
76 | ].map((column) => {
|
77 | return colorForDepFn(column);
|
78 | });
|
79 | table.push(tableRow);
|
80 | });
|
81 | task.ui.writeLine(table);
|
82 | task.ui.writeLine('');
|
83 | },
|
84 | _printResultsSummary(countFailed, countPassed, allowedFailCount, total) {
|
85 | let task = this;
|
86 | if (countFailed) {
|
87 | let failMessage = `${countFailed} scenarios failed`;
|
88 | if (allowedFailCount) {
|
89 | failMessage = `${failMessage} (${allowedFailCount} allowed)`;
|
90 | }
|
91 | task.ui.writeLine(chalk.red(failMessage));
|
92 | task.ui.writeLine(chalk.green(`${countPassed} scenarios succeeded`));
|
93 | task.ui.writeLine(chalk.gray(`${total} scenarios run`));
|
94 | } else {
|
95 | task.ui.writeLine(chalk.green(`All ${countPassed} scenarios succeeded`));
|
96 | }
|
97 | },
|
98 | });
|