mirror of
https://github.com/nestjs/nest.git
synced 2026-02-21 23:11:44 +00:00
feat(fastify): Do not crash if enableVersioning is not used (fixes #13496)
This commit is contained in:
98
integration/versioning/e2e/default-versioning.spec.ts
Normal file
98
integration/versioning/e2e/default-versioning.spec.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import { INestApplication, VersioningType } from '@nestjs/common';
|
||||
import {
|
||||
FastifyAdapter,
|
||||
NestFastifyApplication,
|
||||
} from '@nestjs/platform-fastify';
|
||||
import { Test } from '@nestjs/testing';
|
||||
import * as request from 'supertest';
|
||||
import { AppModule } from '../src/app.module';
|
||||
|
||||
/**
|
||||
* `.enableVersioning()` uses `VersioningType.URI` type by default
|
||||
* Regression test for #13496
|
||||
* @see [Versioning](https://docs.nestjs.com/techniques/versioning)
|
||||
*/
|
||||
describe('Default Versioning behavior', () => {
|
||||
// ======================================================================== //
|
||||
describe('Express', () => {
|
||||
let app: INestApplication;
|
||||
before(async () => {
|
||||
const moduleRef = await Test.createTestingModule({
|
||||
imports: [AppModule],
|
||||
}).compile();
|
||||
|
||||
app = moduleRef.createNestApplication();
|
||||
app.enableVersioning();
|
||||
await app.init();
|
||||
});
|
||||
|
||||
describe('GET /', () => {
|
||||
it('V1', () => {
|
||||
return request(app.getHttpServer())
|
||||
.get('/v1')
|
||||
.expect(200)
|
||||
.expect('Hello World V1!');
|
||||
});
|
||||
|
||||
it('No Version', () => {
|
||||
return request(app.getHttpServer()).get('/').expect(404);
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /neutral', () => {
|
||||
it('No Version', () => {
|
||||
return request(app.getHttpServer())
|
||||
.get('/neutral')
|
||||
.expect(200)
|
||||
.expect('Neutral');
|
||||
});
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await app.close();
|
||||
});
|
||||
});
|
||||
|
||||
// ======================================================================== //
|
||||
describe('Fastify', () => {
|
||||
let app: INestApplication;
|
||||
before(async () => {
|
||||
const moduleRef = await Test.createTestingModule({
|
||||
imports: [AppModule],
|
||||
}).compile();
|
||||
|
||||
app = moduleRef.createNestApplication<NestFastifyApplication>(
|
||||
new FastifyAdapter(),
|
||||
);
|
||||
app.enableVersioning();
|
||||
await app.init();
|
||||
await app.getHttpAdapter().getInstance().ready();
|
||||
});
|
||||
|
||||
describe('GET /', () => {
|
||||
it('V1', () => {
|
||||
return request(app.getHttpServer())
|
||||
.get('/v1')
|
||||
.expect(200)
|
||||
.expect('Hello World V1!');
|
||||
});
|
||||
|
||||
it('No Version', () => {
|
||||
return request(app.getHttpServer()).get('/').expect(404);
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /neutral', () => {
|
||||
it('No Version', () => {
|
||||
return request(app.getHttpServer())
|
||||
.get('/neutral')
|
||||
.expect(200)
|
||||
.expect('Neutral');
|
||||
});
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await app.close();
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -166,7 +166,7 @@ export class FastifyAdapter<
|
||||
},
|
||||
deriveConstraint: (req: FastifyRequest) => {
|
||||
// Media Type (Accept Header) Versioning Handler
|
||||
if (this.versioningOptions.type === VersioningType.MEDIA_TYPE) {
|
||||
if (this.versioningOptions?.type === VersioningType.MEDIA_TYPE) {
|
||||
const MEDIA_TYPE_HEADER = 'Accept';
|
||||
const acceptHeaderValue: string | undefined = (req.headers?.[
|
||||
MEDIA_TYPE_HEADER
|
||||
@@ -181,7 +181,7 @@ export class FastifyAdapter<
|
||||
: acceptHeaderVersionParameter.split(this.versioningOptions.key)[1];
|
||||
}
|
||||
// Header Versioning Handler
|
||||
else if (this.versioningOptions.type === VersioningType.HEADER) {
|
||||
else if (this.versioningOptions?.type === VersioningType.HEADER) {
|
||||
const customHeaderVersionParameter: string | string[] | undefined =
|
||||
req.headers?.[this.versioningOptions.header] ||
|
||||
req.headers?.[this.versioningOptions.header.toLowerCase()];
|
||||
@@ -191,7 +191,7 @@ export class FastifyAdapter<
|
||||
: customHeaderVersionParameter;
|
||||
}
|
||||
// Custom Versioning Handler
|
||||
else if (this.versioningOptions.type === VersioningType.CUSTOM) {
|
||||
else if (this.versioningOptions?.type === VersioningType.CUSTOM) {
|
||||
return this.versioningOptions.extractor(req);
|
||||
}
|
||||
return undefined;
|
||||
|
||||
Reference in New Issue
Block a user