Skip to content

Commit d09308b

Browse files
committed
Adding tests for request calls
1 parent ce3bc71 commit d09308b

File tree

1 file changed

+238
-0
lines changed

1 file changed

+238
-0
lines changed
Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,241 @@
1+
const chai = require("chai"),
2+
chaiAsPromised = require("chai-as-promised"),
3+
sinon = require('sinon');
4+
5+
const fs = require('fs'),
6+
path = require('path'),
7+
request = require('request'),
8+
Constants = require("../../../../bin/helpers/constants"),
9+
logger = require("../../../../bin/helpers/logger").winstonLogger,
10+
testObjects = require("../../support/fixtures/testObjects");
11+
12+
const proxyquire = require("proxyquire").noCallThru();
13+
14+
chai.use(chaiAsPromised);
15+
logger.transports["console.info"].silent = true;
116

217
describe("reportHTML", () => {
18+
var sandbox;
19+
let templateDir = 'templateDir',
20+
args = testObjects.generateReportInputArgs,
21+
buildId = 'buildId',
22+
bsConfig = testObjects.sampleBsConfig;
23+
24+
beforeEach(() => {
25+
sandbox = sinon.createSandbox();
26+
27+
validateBstackJsonStub = sandbox.stub();
28+
setDefaultAuthHashStub = sandbox.stub();
29+
setUsernameStub = sandbox.stub();
30+
setAccessKeyStub = sandbox.stub();
31+
setUsageReportingFlagStub = sandbox.stub().returns(undefined);
32+
setCypressConfigFilenameStub = sandbox.stub();
33+
sendUsageReportStub = sandbox.stub().callsFake(function () {
34+
return "end";
35+
});
36+
37+
reportGeneratorSpy = sandbox.spy();
38+
getErrorCodeFromErrStub = sandbox.stub().returns("random-error");
39+
setDefaultsStub = sandbox.stub();
40+
41+
getUserAgentStub = sandbox.stub().returns("random user-agent");
42+
// pathStub = sinon.stub(path, 'join').returns(templateDir);
43+
});
44+
45+
afterEach(() => {
46+
sandbox.restore();
47+
sinon.restore();
48+
// pathStub.restore();
49+
});
50+
51+
describe("calls API to generate report", () => {
52+
53+
it("is deprecated, i.e. 299, does not have build message", () => {
54+
let requestStub = sandbox.stub(request, "get").yields(null, { statusCode: 299 }, null);
55+
let message = Constants.userMessages.API_DEPRECATED;
56+
let messageType = Constants.messageTypes.INFO;
57+
let errorCode = "api_deprecated";
58+
59+
const reporterHTML = proxyquire('../../../../bin/helpers/reporterHTML', {
60+
'./utils': {
61+
validateBstackJson: validateBstackJsonStub,
62+
setDefaultAuthHash: setDefaultAuthHashStub,
63+
setUsername: setUsernameStub,
64+
setAccessKey: setAccessKeyStub,
65+
getUserAgent: getUserAgentStub,
66+
setUsageReportingFlag: setUsageReportingFlagStub,
67+
setCypressConfigFilename: setCypressConfigFilenameStub,
68+
sendUsageReport: sendUsageReportStub,
69+
setDefaults: setDefaultsStub,
70+
getErrorCodeFromErr: getErrorCodeFromErrStub
71+
},
72+
request: {get: requestStub}
73+
});
74+
75+
reporterHTML.reportGenerator(bsConfig, buildId, args);
76+
77+
sinon.assert.calledOnce(requestStub);
78+
sinon.assert.calledOnce(getUserAgentStub);
79+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, message, messageType, errorCode);
80+
});
81+
82+
it("is deprecated, i.e. 299", () => {
83+
let build = { buildId: buildId, message: 'API has been deprecated', rows: [] };
84+
let body = JSON.stringify(build);
85+
let requestStub = sandbox.stub(request, "get").yields(null, { statusCode: 299 }, body);
86+
let message = build.message;
87+
let messageType = Constants.messageTypes.INFO;
88+
let errorCode = "api_deprecated";
89+
90+
const reporterHTML = proxyquire('../../../../bin/helpers/reporterHTML', {
91+
'./utils': {
92+
validateBstackJson: validateBstackJsonStub,
93+
setDefaultAuthHash: setDefaultAuthHashStub,
94+
setUsername: setUsernameStub,
95+
setAccessKey: setAccessKeyStub,
96+
getUserAgent: getUserAgentStub,
97+
setUsageReportingFlag: setUsageReportingFlagStub,
98+
setCypressConfigFilename: setCypressConfigFilenameStub,
99+
sendUsageReport: sendUsageReportStub,
100+
setDefaults: setDefaultsStub,
101+
getErrorCodeFromErr: getErrorCodeFromErrStub
102+
},
103+
request: {get: requestStub}
104+
});
105+
106+
reporterHTML.reportGenerator(bsConfig, buildId, args);
107+
108+
sinon.assert.calledOnce(requestStub);
109+
sinon.assert.calledOnce(getUserAgentStub);
110+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, message, messageType, errorCode);
111+
});
112+
113+
context("non 200 response", () => {
114+
it("400 status, build available, cannot generate report", () => {
115+
let build = { buildId: buildId, message: 'success', rows: [] };
116+
let body = JSON.stringify(build);
117+
let requestStub = sandbox.stub(request, "get").yields(null, { statusCode: 400 }, body);
118+
let message = `${
119+
Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('<build-id>>', buildId)
120+
} with error: \n${JSON.stringify(build, null, 2)}`;
121+
let messageType = Constants.messageTypes.ERROR;
122+
let errorCode = 'api_failed_build_generate_report';
123+
124+
const reporterHTML = proxyquire('../../../../bin/helpers/reporterHTML', {
125+
'./utils': {
126+
validateBstackJson: validateBstackJsonStub,
127+
setDefaultAuthHash: setDefaultAuthHashStub,
128+
setUsername: setUsernameStub,
129+
setAccessKey: setAccessKeyStub,
130+
getUserAgent: getUserAgentStub,
131+
setUsageReportingFlag: setUsageReportingFlagStub,
132+
setCypressConfigFilename: setCypressConfigFilenameStub,
133+
sendUsageReport: sendUsageReportStub,
134+
setDefaults: setDefaultsStub,
135+
getErrorCodeFromErr: getErrorCodeFromErrStub
136+
},
137+
request: {get: requestStub}
138+
});
139+
140+
reporterHTML.reportGenerator(bsConfig, buildId, args);
141+
142+
sinon.assert.calledOnce(requestStub);
143+
sinon.assert.calledOnce(getUserAgentStub);
144+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, message, messageType, errorCode);
145+
});
146+
147+
it("user is unauthorized", () => {
148+
let build = { buildId: buildId, message: 'Unauthorized', rows: [] };
149+
let body = JSON.stringify(build);
150+
let requestStub = sandbox.stub(request, "get").yields(null, { statusCode: 401 }, body);
151+
let message = `${
152+
Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('<build-id>>', buildId)
153+
} with error: \n${JSON.stringify(build, null, 2)}`;
154+
let messageType = Constants.messageTypes.ERROR;
155+
let errorCode = 'api_auth_failed';
156+
157+
const reporterHTML = proxyquire('../../../../bin/helpers/reporterHTML', {
158+
'./utils': {
159+
validateBstackJson: validateBstackJsonStub,
160+
setDefaultAuthHash: setDefaultAuthHashStub,
161+
setUsername: setUsernameStub,
162+
setAccessKey: setAccessKeyStub,
163+
getUserAgent: getUserAgentStub,
164+
setUsageReportingFlag: setUsageReportingFlagStub,
165+
setCypressConfigFilename: setCypressConfigFilenameStub,
166+
sendUsageReport: sendUsageReportStub,
167+
setDefaults: setDefaultsStub,
168+
getErrorCodeFromErr: getErrorCodeFromErrStub
169+
},
170+
request: {get: requestStub}
171+
});
172+
173+
reporterHTML.reportGenerator(bsConfig, buildId, args);
174+
175+
sinon.assert.calledOnce(requestStub);
176+
sinon.assert.calledOnce(getUserAgentStub);
177+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, message, messageType, errorCode);
178+
});
179+
180+
it("400 status, build not available, cannot generate report", () => {
181+
let requestStub = sandbox.stub(request, "get").yields(null, { statusCode: 400 }, null);
182+
let message = Constants.userMessages.BUILD_GENERATE_REPORT_FAILED.replace('<build-id>>', buildId);
183+
let messageType = Constants.messageTypes.ERROR;
184+
let errorCode = 'api_failed_build_generate_report';
185+
186+
const reporterHTML = proxyquire('../../../../bin/helpers/reporterHTML', {
187+
'./utils': {
188+
validateBstackJson: validateBstackJsonStub,
189+
setDefaultAuthHash: setDefaultAuthHashStub,
190+
setUsername: setUsernameStub,
191+
setAccessKey: setAccessKeyStub,
192+
getUserAgent: getUserAgentStub,
193+
setUsageReportingFlag: setUsageReportingFlagStub,
194+
setCypressConfigFilename: setCypressConfigFilenameStub,
195+
sendUsageReport: sendUsageReportStub,
196+
setDefaults: setDefaultsStub,
197+
getErrorCodeFromErr: getErrorCodeFromErrStub
198+
},
199+
request: {get: requestStub}
200+
});
201+
202+
reporterHTML.reportGenerator(bsConfig, buildId, args);
203+
204+
sinon.assert.calledOnce(requestStub);
205+
sinon.assert.calledOnce(getUserAgentStub);
206+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, message, messageType, errorCode);
207+
});
208+
});
209+
210+
it("200 response code", () => {
211+
let build = { buildId: buildId, message: 'success', rows: [] };
212+
let body = JSON.stringify(build);
213+
let requestStub = sandbox.stub(request, "get").yields(null, { statusCode: 200 }, body);
214+
let message = `Report for build: ${buildId} was successfully created.`;
215+
let messageType = Constants.messageTypes.SUCCESS;
216+
let errorCode = null;
217+
218+
const reporterHTML = proxyquire('../../../../bin/helpers/reporterHTML', {
219+
'./utils': {
220+
validateBstackJson: validateBstackJsonStub,
221+
setDefaultAuthHash: setDefaultAuthHashStub,
222+
setUsername: setUsernameStub,
223+
setAccessKey: setAccessKeyStub,
224+
getUserAgent: getUserAgentStub,
225+
setUsageReportingFlag: setUsageReportingFlagStub,
226+
setCypressConfigFilename: setCypressConfigFilenameStub,
227+
sendUsageReport: sendUsageReportStub,
228+
setDefaults: setDefaultsStub,
229+
getErrorCodeFromErr: getErrorCodeFromErrStub
230+
},
231+
request: {get: requestStub}
232+
});
233+
234+
reporterHTML.reportGenerator(bsConfig, buildId, args);
235+
236+
sinon.assert.calledOnce(requestStub);
237+
sinon.assert.calledOnce(getUserAgentStub);
238+
sinon.assert.calledOnceWithExactly(sendUsageReportStub, bsConfig, args, message, messageType, errorCode);
239+
});
240+
});
3241
});

0 commit comments

Comments
 (0)