194 lines
5.0 KiB
TypeScript
194 lines
5.0 KiB
TypeScript
import { NestFactory } from '@nestjs/core';
|
|
import {
|
|
FastifyAdapter,
|
|
NestFastifyApplication
|
|
} from '@nestjs/platform-fastify';
|
|
import { AppModule } from '../src/app.module';
|
|
import { NoopLogger } from '../utils/noop-logger';
|
|
import request from 'supertest';
|
|
|
|
describe('Fastify adapter', () => {
|
|
let app: NestFastifyApplication;
|
|
|
|
describe('when "fallthrough" option is set to "true"', () => {
|
|
beforeAll(async () => {
|
|
app = await NestFactory.create(
|
|
AppModule.withFallthrough(),
|
|
new FastifyAdapter(),
|
|
{
|
|
logger: new NoopLogger()
|
|
}
|
|
);
|
|
app.setGlobalPrefix('api');
|
|
|
|
await app.init();
|
|
await app.getHttpAdapter().getInstance().ready();
|
|
});
|
|
|
|
describe('GET /api', () => {
|
|
it('should return "Hello, world!"', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/api'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.payload).toEqual('Hello, world!');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GET /', () => {
|
|
it('should return HTML file', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.headers['content-type']).toMatch(/html/);
|
|
expect(result.payload).toContain('Static website');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GET /index.html', () => {
|
|
it('should return index page', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/index.html'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.payload).toContain('Static website');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GET /logo.svg', () => {
|
|
it('should return logo', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/logo.svg'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.headers['content-type']).toMatch(/image/);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when trying to get a non-existing file', () => {
|
|
it('should returns index page', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/404'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.payload).toContain('Static website');
|
|
});
|
|
});
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await app.close();
|
|
});
|
|
});
|
|
|
|
describe('when "fallthrough" option is set to "false"', () => {
|
|
beforeAll(async () => {
|
|
app = await NestFactory.create(
|
|
AppModule.withoutFallthrough(),
|
|
new FastifyAdapter(),
|
|
{
|
|
logger: new NoopLogger()
|
|
}
|
|
);
|
|
app.setGlobalPrefix('api');
|
|
|
|
await app.init();
|
|
await app.getHttpAdapter().getInstance().ready();
|
|
});
|
|
|
|
describe('GET /api', () => {
|
|
it('should return "Hello, world!"', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/api'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.payload).toEqual('Hello, world!');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GET /', () => {
|
|
it('should return HTML file', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.headers['content-type']).toMatch(/html/);
|
|
expect(result.payload).toContain('Static website');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GET /index.html', () => {
|
|
it('should return index page', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/index.html'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.payload).toContain('Static website');
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GET /logo.svg', () => {
|
|
it('should return logo', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/logo.svg'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(200);
|
|
expect(result.headers['content-type']).toMatch(/image/);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when trying to get a non-existing file', () => {
|
|
it('should return 404', async () => {
|
|
return app
|
|
.inject({
|
|
method: 'GET',
|
|
url: '/404'
|
|
})
|
|
.then((result) => {
|
|
expect(result.statusCode).toEqual(404);
|
|
});
|
|
});
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await app.close();
|
|
});
|
|
});
|
|
});
|