Skip to content

Commit

Permalink
feat(fastify): Do not crash if enableVersioning is not used (fixes ne…
Browse files Browse the repository at this point in the history
  • Loading branch information
Fcmam5 committed May 5, 2024
1 parent 1db72fd commit c0af8af
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 3 deletions.
98 changes: 98 additions & 0 deletions integration/versioning/e2e/default-versioning.spec.ts
@@ -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();
});
});
});
6 changes: 3 additions & 3 deletions packages/platform-fastify/adapters/fastify-adapter.ts
Expand Up @@ -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
Expand All @@ -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()];
Expand All @@ -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;
Expand Down

0 comments on commit c0af8af

Please sign in to comment.