mirror of
https://github.com/nestjs/nest.git
synced 2026-02-21 23:11:44 +00:00
172 lines
5.2 KiB
TypeScript
172 lines
5.2 KiB
TypeScript
import { isNil, isObject } from '@nestjs/common/utils/shared.utils';
|
|
import { expect } from 'chai';
|
|
import { of } from 'rxjs';
|
|
import * as sinon from 'sinon';
|
|
import { RequestMethod } from '../../../common';
|
|
import { RouterResponseController } from '../../router/router-response-controller';
|
|
import { NoopHttpAdapter } from '../utils/noop-adapter.spec';
|
|
|
|
describe('RouterResponseController', () => {
|
|
let adapter: NoopHttpAdapter;
|
|
let routerResponseController: RouterResponseController;
|
|
|
|
beforeEach(() => {
|
|
adapter = new NoopHttpAdapter({});
|
|
routerResponseController = new RouterResponseController(adapter);
|
|
});
|
|
|
|
describe('apply', () => {
|
|
let response: {
|
|
send: sinon.SinonSpy;
|
|
status?: sinon.SinonSpy;
|
|
json: sinon.SinonSpy;
|
|
};
|
|
beforeEach(() => {
|
|
response = { send: sinon.spy(), json: sinon.spy(), status: sinon.spy() };
|
|
});
|
|
describe('when result is', () => {
|
|
beforeEach(() => {
|
|
sinon
|
|
.stub(adapter, 'reply')
|
|
.callsFake((responseRef: any, body: any, statusCode?: number) => {
|
|
if (statusCode) {
|
|
responseRef.status(statusCode);
|
|
}
|
|
if (isNil(body)) {
|
|
return responseRef.send();
|
|
}
|
|
return isObject(body)
|
|
? responseRef.json(body)
|
|
: responseRef.send(String(body));
|
|
});
|
|
});
|
|
describe('nil', () => {
|
|
it('should call send()', async () => {
|
|
const value = null;
|
|
await routerResponseController.apply(value, response, 200);
|
|
expect(response.send.called).to.be.true;
|
|
});
|
|
});
|
|
describe('string', () => {
|
|
it('should call send(value)', async () => {
|
|
const value = 'string';
|
|
await routerResponseController.apply(value, response, 200);
|
|
expect(response.send.called).to.be.true;
|
|
expect(response.send.calledWith(String(value))).to.be.true;
|
|
});
|
|
});
|
|
describe('object', () => {
|
|
it('should call json(value)', async () => {
|
|
const value = { test: 'test' };
|
|
await routerResponseController.apply(value, response, 200);
|
|
expect(response.json.called).to.be.true;
|
|
expect(response.json.calledWith(value)).to.be.true;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('transformToResult', () => {
|
|
describe('when resultOrDeffered', () => {
|
|
describe('is Promise', () => {
|
|
it('should returns Promise', async () => {
|
|
const value = 100;
|
|
expect(
|
|
await routerResponseController.transformToResult(
|
|
Promise.resolve(value),
|
|
),
|
|
).to.be.eq(100);
|
|
});
|
|
});
|
|
|
|
describe('is Observable', () => {
|
|
it('should returns Promise', async () => {
|
|
const value = 100;
|
|
expect(
|
|
await routerResponseController.transformToResult(of(value)),
|
|
).to.be.eq(100);
|
|
});
|
|
});
|
|
|
|
describe('is value', () => {
|
|
it('should returns Promise', async () => {
|
|
const value = 100;
|
|
expect(
|
|
await routerResponseController.transformToResult(value),
|
|
).to.be.eq(100);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getStatusByMethod', () => {
|
|
describe('when RequestMethod is POST', () => {
|
|
it('should returns 201', () => {
|
|
expect(
|
|
routerResponseController.getStatusByMethod(RequestMethod.POST),
|
|
).to.be.eql(201);
|
|
});
|
|
});
|
|
describe('when RequestMethod is not POST', () => {
|
|
it('should returns 200', () => {
|
|
expect(
|
|
routerResponseController.getStatusByMethod(RequestMethod.GET),
|
|
).to.be.eql(200);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('render', () => {
|
|
beforeEach(() => {
|
|
sinon
|
|
.stub(adapter, 'render')
|
|
.callsFake((response, view: string, options: any) => {
|
|
return response.render(view, options);
|
|
});
|
|
});
|
|
it('should call "res.render()" with expected args', async () => {
|
|
const template = 'template';
|
|
const value = 'test';
|
|
const result = Promise.resolve(value);
|
|
const response = { render: sinon.spy() };
|
|
|
|
await routerResponseController.render(result, response, template);
|
|
expect(response.render.calledWith(template, value)).to.be.true;
|
|
});
|
|
});
|
|
|
|
describe('setHeaders', () => {
|
|
let setHeaderStub: sinon.SinonStub;
|
|
|
|
beforeEach(() => {
|
|
setHeaderStub = sinon.stub(adapter, 'setHeader').callsFake(() => ({}));
|
|
});
|
|
|
|
it('should set all custom headers', () => {
|
|
const response = {};
|
|
const headers = [{ name: 'test', value: 'test_value' }];
|
|
|
|
routerResponseController.setHeaders(response, headers);
|
|
expect(
|
|
setHeaderStub.calledWith(response, headers[0].name, headers[0].value),
|
|
).to.be.true;
|
|
});
|
|
});
|
|
|
|
describe('status', () => {
|
|
let statusStub: sinon.SinonStub;
|
|
|
|
beforeEach(() => {
|
|
statusStub = sinon.stub(adapter, 'status').callsFake(() => ({}));
|
|
});
|
|
|
|
it('should set status', () => {
|
|
const response = {};
|
|
const statusCode = 400;
|
|
|
|
routerResponseController.setStatus(response, statusCode);
|
|
expect(statusStub.calledWith(response, statusCode)).to.be.true;
|
|
});
|
|
});
|
|
});
|