Skip to content

Commit 785a987

Browse files
committed
Minor refactor, clear up test gaps
Resolved Instanbul warnings (100%)
1 parent 7fc168f commit 785a987

File tree

6 files changed

+90
-31
lines changed

6 files changed

+90
-31
lines changed

src/Router.js

+14-16
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ class Router {
7979

8080
const result = this.stack.exec(this.req, this.res);
8181

82-
/* istanbul ignore if (tested in: test/e2e/async) */
8382
if (isPromise(result)) {
8483
return result.then(() => this.res.data());
8584
}
@@ -311,23 +310,21 @@ class Router {
311310
function loadRoutes(router) {
312311
const routeDir = moduleParent() + '/routes';
313312

314-
if (fs.existsSync(routeDir)) {
315-
const files = getRoutes(routeDir);
313+
const files = getRoutes(routeDir);
316314

317-
files.forEach(file => {
318-
file = path.relative(routeDir, file);
319-
const {dir, name} = path.parse(file);
315+
files.forEach(file => {
316+
file = path.relative(routeDir, file);
317+
const {dir, name} = path.parse(file);
320318

321-
const filePath = [dir, name].join('/');
322-
const route = require(`${routeDir}/${filePath}`);
319+
const filePath = [dir, name].join('/');
320+
const route = require(`${routeDir}/${filePath}`);
323321

324-
route.path = (
325-
filePath[0] === '/' ? filePath : `/${filePath}`
326-
).toLowerCase();
322+
route.path = (
323+
filePath[0] === '/' ? filePath : `/${filePath}`
324+
).toLowerCase();
327325

328-
Route(router, route);
329-
});
330-
}
326+
Route(router, route);
327+
});
331328
}
332329

333330
/**
@@ -343,13 +340,14 @@ function loadRoutes(router) {
343340
*/
344341
function getRoutes(dir, files = []) {
345342
fs.readdirSync(dir).forEach(function(file) {
346-
const filePath = path.join(dir, file); // nosemgrep
343+
const filePath = path.join(dir, file);
347344

348345
if (fs.lstatSync(filePath).isDirectory()) {
349346

350347
// Perform recursive traversal.
351348
getRoutes(filePath, files);
352-
} else if (path.extname(filePath) === '.js') {
349+
350+
} else /* istanbul ignore next */ if (path.extname(filePath) === '.js') {
353351
files.push(filePath);
354352
}
355353
});

src/router/Request.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,17 @@ class RouterRequest {
9797
param(name) {
9898
let obj = {};
9999

100-
/* istanbul ignore else (tested in: test/unit/Request) */
101100
if (this.queryString()) {
102101
obj = RouterRequest.parseParams(this.queryString());
103102
} else if (this.body()) {
104103
obj = RouterRequest.parseBody(this.body());
105104
}
106105

107-
if (name && obj[name]) {
108-
return obj[name];
109-
} else if (!name && obj) {
106+
if (Object.keys(obj).length > 0) {
107+
if (name) {
108+
return obj[name];
109+
}
110+
110111
return obj;
111112
}
112113
}
@@ -188,12 +189,12 @@ class RouterRequest {
188189
const plugin = this.plugins[name];
189190

190191
if ((!plugin && name && value) || (plugin && value)) {
191-
this.plugins[name] = value;
192+
return this.plugins[name] = value;
192193
} else if (plugin && !value) {
193194
return this.plugins[name];
194-
} else if (!plugin) {
195-
throw new RouterError(`Plugin "${name}" doesn't exist`);
196195
}
196+
197+
throw new RouterError(`Plugin "${name}" doesn't exist`);
197198
}
198199

199200
/**

src/router/Route.js

-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ module.exports = (router, route) => {
6060

6161
// Add route-bound middleware, if available.
6262
if (route.middleware) {
63-
64-
/* istanbul ignore else (tested in: test/e2e) */
6563
if (Array.isArray(route.middleware)) {
6664
route.middleware.forEach(func => router.use(path, func));
6765
} else {

test/e2e/async/handler/routes/foo/bar/baz/Qux.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ const contentNegotiation = require(`${PACKAGE_ROOT}/test/e2e/async/handler/middl
77
* @export {Object}
88
*/
99
module.exports = {
10-
middleware: [contentNegotiation],
11-
resource: true,
10+
middleware: contentNegotiation,
11+
resource: ['get', 'put', 'patch', 'delete', 'post'],
1212

1313
/**
1414
* GET /api/<path>/<resourceId>

test/unit/Request.js

+36-3
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ describe('Request module', function() {
4646
});
4747

4848
describe('param', function() {
49-
const obj = clone(event.Records[0].cf.request);
50-
5149
describe('queryString', function() {
50+
const obj = clone(event.Records[0].cf.request);
5251

5352
// Alter cloned request.
5453
obj.querystring = 'foo=bar&biz=baz';
54+
obj.body.data = '';
5555

5656
const request = new Request(obj);
5757

@@ -79,9 +79,11 @@ describe('Request module', function() {
7979
});
8080

8181
describe('body', function() {
82+
const obj = clone(event.Records[0].cf.request);
8283

8384
// Alter cloned request.
84-
obj.body = 'Zm9vPWJhciZiaXo9YmF6==';
85+
obj.querystring = '';
86+
obj.body.data = 'Zm9vPWJhciZiaXo9YmF6==';
8587

8688
const request = new Request(obj);
8789

@@ -107,6 +109,32 @@ describe('Request module', function() {
107109
});
108110
});
109111
});
112+
113+
describe('undefined', function() {
114+
const obj = clone(event.Records[0].cf.request);
115+
116+
// Alter cloned request.
117+
obj.querystring = '';
118+
obj.body.data = '';
119+
120+
const request = new Request(obj);
121+
122+
describe('param()', function() {
123+
it('should not return value', function() {
124+
const result = request.param();
125+
126+
expect(result).to.be.undefined;
127+
});
128+
});
129+
130+
describe('param(argument)', function() {
131+
it('should not return value', function() {
132+
const result = request.param('qux');
133+
134+
expect(result).to.be.undefined;
135+
});
136+
});
137+
});
110138
});
111139

112140
describe('method', function() {
@@ -213,11 +241,16 @@ describe('Request module', function() {
213241
describe('parseBody', function() {
214242
const result1 = Request.parseBody('Zm9vPWJhciZiaXo9YmF6==');
215243
const result2 = Request.parseBody('eyJmb28iOiAiYmFyIiwgImJpeiI6ICJiYXoifQ==');
244+
const result3 = Request.parseBody('');
216245

217246
it('should return value', function() {
218247
expect(result1).to.deep.equal({foo: 'bar', biz: 'baz'});
219248
expect(result2).to.deep.equal({foo: 'bar', biz: 'baz'});
220249
});
250+
251+
it('should return no value', function() {
252+
expect(result3).to.be.undefined;
253+
});
221254
});
222255

223256
describe('parseParams', function() {

test/unit/Stack.js

+30-1
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ describe('Stack module', function() {
314314
});
315315
});
316316

317-
describe('with Error', function() {
317+
describe('with RouterError', function() {
318318
const stack = new Stack();
319319

320320
const func1 = async function(req, res, next) {
@@ -342,6 +342,35 @@ describe('Stack module', function() {
342342
return expect(promise).to.be.rejectedWith(RouterError, /Output to error/);
343343
});
344344
});
345+
346+
describe('undefined', function() {
347+
const stack = new Stack();
348+
349+
const func1 = async function(req, res, next) {
350+
res.setHeader('Middleware', true);
351+
};
352+
353+
Utils.setFuncName(func1, 'middleware');
354+
355+
const func2 = async function(req, res, next) {
356+
res.setHeader('Middleware', true);
357+
358+
return Promise.reject();
359+
};
360+
361+
Utils.setFuncName(func2, 'middleware');
362+
363+
stack.middleware = [func1, func2];
364+
365+
const req = new Request(event.Records[0].cf.request, {});
366+
const res = new Response({});
367+
368+
it('should ignore exception', function() {
369+
const promise = stack.exec(req, res);
370+
371+
return expect(promise).to.be.fulfilled;
372+
});
373+
});
345374
});
346375
});
347376
});

0 commit comments

Comments
 (0)