Skip to content

Commit 3a29753

Browse files
committed
Merge branch 'master' of github.com:nestjs/nest into refactor_simplified_if
2 parents 0d29cd7 + 385071b commit 3a29753

7 files changed

Lines changed: 137 additions & 73 deletions

File tree

Readme.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<a href="https://www.npmjs.com/~nestjscore"><img src="https://img.shields.io/npm/dm/@nestjs/core.svg" alt="NPM Downloads" /></a>
1515
<a href="https://travis-ci.org/nestjs/nest"><img src="https://api.travis-ci.org/nestjs/nest.svg?branch=master" alt="Travis" /></a>
1616
<a href="https://travis-ci.org/nestjs/nest"><img src="https://img.shields.io/travis/nestjs/nest/master.svg?label=linux" alt="Linux" /></a>
17-
<a href="https://coveralls.io/github/nestjs/nest?branch=master"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#7" alt="Coverage" /></a>
17+
<a href="https://coveralls.io/github/nestjs/nest?branch=master"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#8" alt="Coverage" /></a>
1818
<a href="https://gitter.im/nestjs/nestjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge"><img src="https://badges.gitter.im/nestjs/nestjs.svg" alt="Gitter" /></a>
1919
<a href="https://opencollective.com/nest#backer"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
2020
<a href="https://opencollective.com/nest#sponsor"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
@@ -53,12 +53,12 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
5353
<a href="http://xtremis.com/"><img src="https://nestjs.com/img/logo-xtremis.svg" width="220" /></a>
5454

5555
#### Silver Sponsors
56-
57-
<a href="https://neoteric.eu/"><img src="https://nestjs.com/img/neoteric-cut.png" width="120" /></a> &nbsp; <a href="https://www.swingdev.io"><img src="https://nestjs.com/img/swingdev-logo.svg#1" width="150" /></a>
56+
<a href="https://neoteric.eu/"><img src="https://nestjs.com/img/neoteric-cut.png" width="120" /></a> &nbsp;
57+
<a href="http://gojob.com"><img src="http://nestjs.com/img/gojob-logo.png" valign="bottom" height="95" /></a> &nbsp; <a href="https://www.swingdev.io"><img src="https://nestjs.com/img/swingdev-logo.svg#1" width="150" /> </a>
5858

5959
#### Sponsors
6060

61-
<a href="https://scal.io"><img src="https://nestjs.com/img/scalio-logo.svg" width="110" /></a> &nbsp; <a href="http://angularity.io"><img src="http://angularity.io/media/logo.svg" height="30" /></a> &nbsp; <a href="http://gojob.com"><img src="https://gojob.com/w/wp-content/uploads/2017/02/cropped-Logo-web-home.png" height="40" /> &nbsp; <!--<a href="https://keycdn.com"><img src="https://nestjs.com/img/keycdn.svg" height="30" /></a> &nbsp;--> <a href="https://hostpresto.com"><img src="https://nestjs.com/img/hostpresto.png" height="30" /></a> &nbsp; <a href="https://genuinebee.com/"><img src="https://nestjs.com/img/genuinebee.svg" height="38" /></a> &nbsp; <a href="http://architectnow.net/"><img src="https://nestjs.com/img/architectnow.png" height="24" /></a> &nbsp; <a href="https://quander.io/"><img src="https://nestjs.com/img/quander.png" height="28" /></a>
61+
<a href="https://scal.io"><img src="https://nestjs.com/img/scalio-logo.svg" width="110" /></a> &nbsp; <a href="http://angularity.io"><img src="http://angularity.io/media/logo.svg" height="30" /></a> &nbsp; <!--<a href="https://keycdn.com"><img src="https://nestjs.com/img/keycdn.svg" height="30" /></a> &nbsp;--> <a href="https://hostpresto.com"><img src="https://nestjs.com/img/hostpresto.png" height="30" /></a> &nbsp; <a href="https://genuinebee.com/"><img src="https://nestjs.com/img/genuinebee.svg" height="38" /></a> &nbsp; <a href="http://architectnow.net/"><img src="https://nestjs.com/img/architectnow.png" height="24" /></a> &nbsp; <a href="https://quander.io/"><img src="https://nestjs.com/img/quander.png" height="28" /></a>
6262

6363

6464
## Backers

package.json

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,34 @@
11
{
22
"name": "nestjs",
3-
"version": "5.3.15",
3+
"version": "5.4.0",
44
"description": "Modern, fast, powerful node.js web framework",
55
"scripts": {
66
"coverage": "nyc report --reporter=text-lcov | coveralls",
77
"precommit": "lint-staged",
8-
"test": "nyc --require ts-node/register mocha packages/**/*.spec.ts --reporter spec --require 'node_modules/reflect-metadata/Reflect.js'",
9-
"integration-test": "mocha integration/**/*.spec.ts --reporter spec --require ts-node/register --require 'node_modules/reflect-metadata/Reflect.js'",
10-
"lint": "tslint -p tsconfig.json -c tslint.json \"packages/**/*.ts\" -e \"*.spec.ts\"",
11-
"format": "prettier **/**/*.ts --ignore-path ./.prettierignore --write && git status",
8+
"test":
9+
"nyc --require ts-node/register mocha packages/**/*.spec.ts --reporter spec --require 'node_modules/reflect-metadata/Reflect.js'",
10+
"integration-test":
11+
"mocha integration/**/*.spec.ts --reporter spec --require ts-node/register --require 'node_modules/reflect-metadata/Reflect.js'",
12+
"lint":
13+
"tslint -p tsconfig.json -c tslint.json \"packages/**/*.ts\" -e \"*.spec.ts\"",
14+
"format":
15+
"prettier **/**/*.ts --ignore-path ./.prettierignore --write && git status",
1216
"clean": "gulp clean:bundle",
1317
"build": "npm run clean && gulp build",
1418
"prebuild:dev": "rm -rf node_modules/@nestjs",
1519
"build:dev": "gulp build --dist node_modules/@nestjs && gulp move",
1620
"postinstall": "opencollective",
1721
"prerelease": "gulp copy-misc && gulp build --dist node_modules/@nestjs",
18-
"publish": "npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --force-publish --exact -m \"chore(@nestjs) publish %s release\"",
19-
"publish:rc": "npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --npm-tag=rc -m \"chore(@nestjs) publish %s release\"",
20-
"publish:next": "npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --npm-tag=next --skip-git -m \"chore(@nestjs) publish %s release\"",
21-
"publish:beta": "npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --npm-tag=beta -m \"chore(@nestjs) publish %s release\"",
22-
"publish:test": "npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --force-publish --npm-tag=test --skip-git -m \"chore(@nestjs) publish %s release\""
22+
"publish":
23+
"npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --force-publish --exact -m \"chore(@nestjs) publish %s release\"",
24+
"publish:rc":
25+
"npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --npm-tag=rc -m \"chore(@nestjs) publish %s release\"",
26+
"publish:next":
27+
"npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --npm-tag=next --skip-git -m \"chore(@nestjs) publish %s release\"",
28+
"publish:beta":
29+
"npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --npm-tag=beta -m \"chore(@nestjs) publish %s release\"",
30+
"publish:test":
31+
"npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --force-publish --npm-tag=test --skip-git -m \"chore(@nestjs) publish %s release\""
2332
},
2433
"engines": {
2534
"node": ">= 8.9.0"
@@ -132,9 +141,7 @@
132141
}
133142
},
134143
"nyc": {
135-
"include": [
136-
"packages/**/*.ts"
137-
],
144+
"include": ["packages/**/*.ts"],
138145
"exclude": [
139146
"node_modules/",
140147
"packages/**/*.spec.ts",
@@ -154,23 +161,13 @@
154161
"packages/common/serializer/**/*",
155162
"packages/common/services/logger.service.ts"
156163
],
157-
"extension": [
158-
".ts"
159-
],
160-
"require": [
161-
"ts-node/register"
162-
],
163-
"reporter": [
164-
"text-summary",
165-
"html"
166-
],
164+
"extension": [".ts"],
165+
"require": ["ts-node/register"],
166+
"reporter": ["text-summary", "html"],
167167
"sourceMap": true,
168168
"instrument": true
169169
},
170170
"lint-staged": {
171-
"packages/**/*.{ts,json}": [
172-
"npm run format",
173-
"git add"
174-
]
171+
"packages/**/*.{ts,json}": ["npm run format", "git add"]
175172
}
176173
}

packages/common/test/files/multer.module.spec.ts renamed to packages/common/test/files/multer/multer.module.spec.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { expect } from 'chai';
2-
import { MULTER_MODULE_OPTIONS } from '../../files/files.constants';
3-
import { MulterModule } from '../../files/multer.module';
2+
import { MULTER_MODULE_OPTIONS } from '../../../files/files.constants';
3+
import { MulterModule } from '../../../files/multer.module';
4+
import { Provider, FactoryProvider } from '../../../interfaces';
5+
import * as sinon from 'sinon';
46

57
describe('MulterModule', () => {
68
describe('register', () => {
@@ -64,6 +66,19 @@ describe('MulterModule', () => {
6466
expect(dynamicModule.imports).to.be.empty;
6567
expect(dynamicModule.exports).to.contain(MULTER_MODULE_OPTIONS);
6668
});
69+
it('provider should call "createMulterOptions"', async () => {
70+
const asyncOptions = {
71+
useClass: Object,
72+
};
73+
const dynamicModule = MulterModule.registerAsync(asyncOptions as any);
74+
const optionsFactory = {
75+
createMulterOptions: sinon.spy(),
76+
};
77+
await ((dynamicModule.providers[0] as any).useFactory as any)(
78+
optionsFactory,
79+
);
80+
expect(optionsFactory.createMulterOptions.called).to.be.true;
81+
});
6782
});
6883
});
6984
});
Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
11
import { expect } from 'chai';
22
import { isFunction } from '../../utils/shared.utils';
3-
import { validateEach, InvalidDecoratorItemException } from '../../utils/validate-each.util';
3+
import {
4+
validateEach,
5+
InvalidDecoratorItemException,
6+
} from '../../utils/validate-each.util';
47

58
describe('validateEach', () => {
69
describe('when any item will not pass predicate', () => {
710
it('should throw exception', () => {
8-
try {
9-
validateEach({} as any, ['test'], isFunction, '', '');
10-
}
11-
catch (e) {
12-
expect(e).to.be.instanceof(InvalidDecoratorItemException);
13-
}
14-
})
11+
expect(() =>
12+
validateEach({ name: 'test' } as any, ['test'], isFunction, '', ''),
13+
).to.throws(InvalidDecoratorItemException);
14+
});
1515
});
1616
describe('when all items passed predicate', () => {
1717
it('should return true', () => {
18-
expect(
19-
validateEach({} as any, [() => null], isFunction, '', '')
20-
).to.be.true;
18+
expect(validateEach({} as any, [() => null], isFunction, '', '')).to.be
19+
.true;
2120
});
2221
});
2322
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { expect } from 'chai';
2+
import { ApplicationReferenceHost } from './../../helpers/application-ref-host';
3+
4+
describe('ApplicationReferenceHost', () => {
5+
const applicationRefHost = new ApplicationReferenceHost();
6+
it('should wrap application reference', () => {
7+
const ref = {};
8+
applicationRefHost.applicationRef = ref;
9+
10+
expect(applicationRefHost.applicationRef).to.be.eql(ref);
11+
});
12+
});

packages/core/test/router/router-response-controller.spec.ts

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import * as sinon from 'sinon';
21
import { expect } from 'chai';
3-
import { RouterResponseController } from '../../router/router-response-controller';
2+
import { of } from 'rxjs';
3+
import * as sinon from 'sinon';
44
import { RequestMethod } from '../../../common';
5-
import { Observable, of } from 'rxjs';
65
import { ExpressAdapter } from '../../adapters/express-adapter';
6+
import { RouterResponseController } from '../../router/router-response-controller';
77

88
describe('RouterResponseController', () => {
9+
let adapter: ExpressAdapter;
910
let routerResponseController: RouterResponseController;
10-
let handlerMock: sinon.SinonMock;
1111

1212
beforeEach(() => {
13-
routerResponseController = new RouterResponseController(new ExpressAdapter({}));
13+
adapter = new ExpressAdapter({});
14+
routerResponseController = new RouterResponseController(adapter);
1415
});
1516

1617
describe('apply', () => {
@@ -67,9 +68,7 @@ describe('RouterResponseController', () => {
6768
it('should returns Promise', async () => {
6869
const value = 100;
6970
expect(
70-
await routerResponseController.transformToResult(
71-
of(value),
72-
),
71+
await routerResponseController.transformToResult(of(value)),
7372
).to.be.eq(100);
7473
});
7574
});
@@ -113,4 +112,22 @@ describe('RouterResponseController', () => {
113112
expect(response.render.calledWith(template, value)).to.be.true;
114113
});
115114
});
115+
116+
describe('setHeaders', () => {
117+
let setHeaderStub: sinon.SinonStub;
118+
119+
beforeEach(() => {
120+
setHeaderStub = sinon.stub(adapter, 'setHeader').callsFake(() => ({}));
121+
});
122+
123+
it('should set all custom headers', () => {
124+
const response = {};
125+
const headers = [{ name: 'test', value: 'test_value' }];
126+
127+
routerResponseController.setHeaders(response, headers);
128+
expect(
129+
setHeaderStub.calledWith(response, headers[0].name, headers[0].value),
130+
).to.be.true;
131+
});
132+
});
116133
});

packages/core/test/router/routes-resolver.spec.ts

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import * as sinon from 'sinon';
1+
import { BadRequestException, Post } from '@nestjs/common';
22
import { expect } from 'chai';
3-
import { RoutesResolver } from '../../router/routes-resolver';
3+
import * as sinon from 'sinon';
44
import { Controller } from '../../../common/decorators/core/controller.decorator';
55
import { Get } from '../../../common/decorators/http/request-mapping.decorator';
6-
import { RequestMethod } from '../../../common/enums/request-method.enum';
7-
import { ApplicationConfig } from '../../application-config';
8-
import { BadRequestException, Post } from '@nestjs/common';
96
import { ExpressAdapter } from '../../adapters/express-adapter';
7+
import { ApplicationConfig } from '../../application-config';
8+
import { RoutesResolver } from '../../router/routes-resolver';
109

1110
describe('RoutesResolver', () => {
1211
@Controller('global')
@@ -22,14 +21,18 @@ describe('RoutesResolver', () => {
2221
let routesResolver: RoutesResolver;
2322
let container;
2423
let modules: Map<string, any>;
24+
let applicationRef;
2525

2626
before(() => {
2727
modules = new Map();
28+
applicationRef = {
29+
use: () => ({}),
30+
setNotFoundHandler: sinon.spy(),
31+
setErrorHandler: sinon.spy(),
32+
};
2833
container = {
2934
getModules: () => modules,
30-
getApplicationRef: () => ({
31-
use: () => ({})
32-
})
35+
getApplicationRef: () => applicationRef,
3336
};
3437
router = {
3538
get() {},
@@ -38,10 +41,7 @@ describe('RoutesResolver', () => {
3841
});
3942

4043
beforeEach(() => {
41-
routesResolver = new RoutesResolver(
42-
container,
43-
new ApplicationConfig(),
44-
);
44+
routesResolver = new RoutesResolver(container, new ApplicationConfig());
4545
});
4646

4747
describe('registerRouters', () => {
@@ -54,20 +54,27 @@ describe('RoutesResolver', () => {
5454
routes.set('TestRoute', routeWrapper);
5555

5656
const appInstance = new ExpressAdapter(router);
57-
const exploreSpy = sinon.spy((routesResolver as any).routerBuilder, 'explore');
57+
const exploreSpy = sinon.spy(
58+
(routesResolver as any).routerBuilder,
59+
'explore',
60+
);
5861
const moduleName = '';
5962

60-
sinon.stub((routesResolver as any).routerBuilder, 'extractRouterPath').callsFake(() => '');
63+
sinon
64+
.stub((routesResolver as any).routerBuilder, 'extractRouterPath')
65+
.callsFake(() => '');
6166
routesResolver.registerRouters(routes, moduleName, '', appInstance);
6267

6368
expect(exploreSpy.called).to.be.true;
64-
expect(exploreSpy.calledWith(
65-
routeWrapper.instance,
66-
routeWrapper.metatype,
67-
moduleName,
68-
appInstance,
69-
'',
70-
)).to.be.true;
69+
expect(
70+
exploreSpy.calledWith(
71+
routeWrapper.instance,
72+
routeWrapper.metatype,
73+
moduleName,
74+
appInstance,
75+
'',
76+
),
77+
).to.be.true;
7178
});
7279
});
7380

@@ -110,4 +117,21 @@ describe('RoutesResolver', () => {
110117
});
111118
});
112119
});
120+
121+
describe('registerNotFoundHandler', () => {
122+
it('should register not found handler', () => {
123+
routesResolver.registerNotFoundHandler();
124+
125+
expect(applicationRef.setNotFoundHandler.called).to.be.true;
126+
});
127+
});
128+
129+
describe('registerExceptionHandler', () => {
130+
it('should register exception handler', () => {
131+
const ref = container.getApplicationRef();
132+
routesResolver.registerExceptionHandler();
133+
134+
expect(applicationRef.setErrorHandler.called).to.be.true;
135+
});
136+
});
113137
});

0 commit comments

Comments
 (0)