Skip to content

Commit ddcdf86

Browse files
committed
usage reporting and adding unit tests for the generateReport module
1 parent 27379b5 commit ddcdf86

File tree

2 files changed

+117
-3
lines changed

2 files changed

+117
-3
lines changed

bin/commands/generateReport.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
'use strict';
2-
const request = require('request');
32

43
const config = require("../helpers/config"),
54
logger = require("../helpers/logger").winstonLogger,
65
Constants = require("../helpers/constants"),
76
utils = require("../helpers/utils"),
8-
reportGenerator = require('../helpers/reporterHTML').reportGenerator;
7+
reporterHTML = require('../helpers/reporterHTML');
98

109

11-
module.exports = function info(args) {
10+
module.exports = function generateReport(args) {
1211
let bsConfigPath = utils.getConfigPath(args.cf);
12+
let reportGenerator = reporterHTML.reportGenerator;
1313

1414
return utils.validateBstackJson(bsConfigPath).then(function (bsConfig) {
1515
// setting setDefaultAuthHash to {} if not present and set via env variables or via args.
@@ -28,7 +28,11 @@ module.exports = function info(args) {
2828

2929
let buildId = args._[1];
3030

31+
let messageType = Constants.messageTypes.INFO;
32+
let errorCode = null;
33+
3134
reportGenerator(bsConfig, buildId);
35+
utils.sendUsageReport(bsConfig, args, 'generate-report called', messageType, errorCode);
3236
}).catch(function (err) {
3337
logger.error(err);
3438
utils.setUsageReportingFlag(null, args.disableUsageReporting);
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,114 @@
1+
const chai = require("chai"),
2+
chaiAsPromised = require("chai-as-promised"),
3+
sinon = require('sinon'),
4+
request = require('request');
5+
6+
const Constants = require("../../../../bin/helpers/constants"),
7+
logger = require("../../../../bin/helpers/logger").winstonLogger,
8+
testObjects = require("../../support/fixtures/testObjects"),
9+
reporterHTML = require('../helpers/reporterHTML');
10+
11+
const proxyquire = require("proxyquire").noCallThru();
12+
13+
chai.use(chaiAsPromised);
14+
logger.transports["console.info"].silent = true;
115

216
describe("generateReport", () => {
17+
let args = testObjects.generateReportInputArgs;
18+
let body = testObjects.buildInfoSampleBody;
19+
let bsConfig = testObjects.sampleBsConfig;
20+
21+
describe("Calling the report generator", () => {
22+
var sandbox;
23+
24+
beforeEach(() => {
25+
sandbox = sinon.createSandbox();
26+
27+
getConfigPathStub = sandbox.stub();
28+
validateBstackJsonStub = sandbox.stub();
29+
setDefaultAuthHashStub = sandbox.stub();
30+
setUsernameStub = sandbox.stub();
31+
setAccessKeyStub = sandbox.stub();
32+
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
33+
setCypressConfigFilenameStub = sandbox.stub();
34+
sendUsageReportStub = sandbox.stub().callsFake(function () {
35+
return "end";
36+
});
37+
38+
reportGeneratorSpy = sandbox.spy();
39+
getErrorCodeFromErrStub = sandbox.stub().returns("random-error");
40+
setDefaultsStub = sandbox.stub();
41+
});
42+
43+
afterEach(() => {
44+
sandbox.restore();
45+
sinon.restore();
46+
});
47+
48+
it("calls the reportGenerator", () => {
49+
const generateReport = proxyquire('../../../../bin/commands/generateReport', {
50+
'../helpers/utils': {
51+
getConfigPath: getConfigPathStub,
52+
validateBstackJson: validateBstackJsonStub,
53+
setDefaultAuthHash: setDefaultAuthHashStub,
54+
setUsername: setUsernameStub,
55+
setAccessKey: setAccessKeyStub,
56+
setUsageReportingFlag: setUsageReportingFlagStub,
57+
setCypressConfigFilename: setCypressConfigFilenameStub,
58+
sendUsageReport: sendUsageReportStub,
59+
setDefaults: setDefaultsStub,
60+
getErrorCodeFromErr: getErrorCodeFromErrStub
61+
},
62+
'../helpers/reporterHTML': {
63+
reportGenerator: reportGeneratorSpy
64+
}
65+
});
66+
67+
validateBstackJsonStub.returns(Promise.resolve(bsConfig));
68+
69+
generateReport(args)
70+
.then(function (_bsConfig) {
71+
sinon.assert.calledWith(reportGeneratorSpy, bsConfig, args._[1]);
72+
sinon.assert.calledOnce(getConfigPathStub);
73+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, 'generate-report called', Constants.messageTypes.INFO, null);
74+
})
75+
.catch((error) => {
76+
chai.assert.isNotOk(error, 'Promise error');
77+
});
78+
});
79+
80+
it("logs and send usage report on rejection", () => {
81+
const generateReport = proxyquire('../../../../bin/commands/generateReport', {
82+
'../helpers/utils': {
83+
getConfigPath: getConfigPathStub,
84+
validateBstackJson: validateBstackJsonStub,
85+
setDefaultAuthHash: setDefaultAuthHashStub,
86+
setUsername: setUsernameStub,
87+
setAccessKey: setAccessKeyStub,
88+
setUsageReportingFlag: setUsageReportingFlagStub,
89+
setCypressConfigFilename: setCypressConfigFilenameStub,
90+
sendUsageReport: sendUsageReportStub,
91+
setDefaults: setDefaultsStub,
92+
getErrorCodeFromErr: getErrorCodeFromErrStub
93+
},
94+
'../helpers/reporterHTML': {
95+
reportGenerator: reportGeneratorSpy
96+
}
97+
});
98+
99+
let err = { message: "Promise error" };
100+
101+
validateBstackJsonStub.returns(Promise.reject(err));
3102

103+
generateReport(args)
104+
.then(function (_bsConfig) {
105+
sinon.assert.notCalled(reportGeneratorSpy);
106+
sinon.assert.notCalled(getConfigPathStub);
107+
})
108+
.catch((_error) => {
109+
sinon.assert.calledWith(setUsageReportingFlagStub, null, args.disableUsageReporting);
110+
sinon.assert.calledWith(sendUsageReportStub, null, args, err.message, Constants.messageTypes.ERROR, "random-error");
111+
});
112+
});
113+
});
4114
});

0 commit comments

Comments
 (0)