Skip to content

Commit

Permalink
fix(#646): I18nValidationExceptionFilter error response body (#647)
Browse files Browse the repository at this point in the history
Co-authored-by: Rubin Bhandari <roobin.bhandari@gmail.com>
  • Loading branch information
Jeel-Parikh and rubiin authored Sep 8, 2024
1 parent e9732dd commit b8e84f1
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 30 deletions.
8 changes: 4 additions & 4 deletions src/filters/i18n-validation-exception.filter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,18 +90,18 @@ export class I18nValidationExceptionFilter implements ExceptionFilter {
protected buildResponseBody(
host: ArgumentsHost,
exc: I18nValidationException,
errors: string[] | I18nValidationError[] | object,
error: string[] | I18nValidationError[] | object,
) {
if ('responseBodyFormatter' in this.options) {
return this.options.responseBodyFormatter(host, exc, errors);
return this.options.responseBodyFormatter(host, exc, error);
} else {
return {
statusCode:
this.options.errorHttpStatusCode === undefined
? exc.getStatus()
: this.options.errorHttpStatusCode,
message: exc.getResponse(),
errors,
message: error,
error: exc.getResponse(),
};
}
}
Expand Down
6 changes: 5 additions & 1 deletion src/middlewares/i18n.middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,11 @@ export class I18nMiddleware implements NestMiddleware {
class MiddlewareHttpContext
implements ExecutionContext, ArgumentsHost, HttpArgumentsHost
{
constructor(private req: any, private res: any, private next: any) {}
constructor(
private req: any,
private res: any,
private next: any,
) {}

getClass<T = any>(): Type<T> {
throw ExecutionContextMethodNotImplemented;
Expand Down
2 changes: 1 addition & 1 deletion src/utils/typescript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export const convertObjectToTypeDefinition = async (
return [];
};

const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed, });
const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });

export const createTypesFile = async (object: any) => {
const sourceFile = ts.createSourceFile(
Expand Down
40 changes: 20 additions & 20 deletions tests/i18n-dto.e2e.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ describe('i18n module e2e dto', () => {

var toon = {
statusCode: 400,
errors: [
message: [
{
property: 'email',
children: [],
Expand Down Expand Up @@ -108,8 +108,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: {
message: {
email: ['email is invalid', 'email cannot be empty'],
password: ['password cannot be empty'],
subscribeToEmail: ['extra.subscribeToEmail is not a boolean'],
Expand All @@ -120,6 +119,7 @@ describe('i18n module e2e dto', () => {
'extra.max with value: "100" needs to be less than 10, ow and SUPER',
],
},
error: 'Bad Request',
});
});

Expand All @@ -136,8 +136,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: {
message: {
test: ['property test should not exist'],
email: ['email is invalid', 'email cannot be empty'],
password: ['password cannot be empty'],
Expand All @@ -149,6 +148,7 @@ describe('i18n module e2e dto', () => {
'extra.max with value: "100" needs to be less than 10, ow and SUPER',
],
},
error: 'Bad Request',
});
});

Expand All @@ -164,8 +164,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: {
message: {
email: ['email is ongeldig', 'e-mail adres mag niet leeg zijn'],
password: ['wachtwoord mag niet leeg zijn'],
subscribeToEmail: ['extra.subscribeToEmail is geen boolean'],
Expand All @@ -176,6 +175,7 @@ describe('i18n module e2e dto', () => {
'extra.max met waarde: "100" moet lager zijn dan 10, ow en SUPER',
],
},
error: 'Bad Request',
});
});
});
Expand All @@ -193,15 +193,15 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: [
message: [
'email is invalid',
'email cannot be empty',
'password cannot be empty',
'extra.subscribeToEmail is not a boolean',
'extra.min with value: "1" needs to be at least 5, ow and COOL',
'extra.max with value: "100" needs to be less than 10, ow and SUPER',
],
error: 'Bad Request',
});
});

Expand All @@ -218,8 +218,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: [
message: [
'property test should not exist',
'email is invalid',
'email cannot be empty',
Expand All @@ -228,6 +227,7 @@ describe('i18n module e2e dto', () => {
'extra.min with value: "1" needs to be at least 5, ow and COOL',
'extra.max with value: "100" needs to be less than 10, ow and SUPER',
],
error: 'Bad Request',
});
});

Expand All @@ -243,15 +243,15 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: [
message: [
'email is ongeldig',
'e-mail adres mag niet leeg zijn',
'wachtwoord mag niet leeg zijn',
'extra.subscribeToEmail is geen boolean',
'extra.min met waarde: "1" moet hoger zijn dan 5, ow en COOL',
'extra.max met waarde: "100" moet lager zijn dan 10, ow en SUPER',
],
error: 'Bad Request',
});
});
});
Expand Down Expand Up @@ -359,7 +359,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
errors: [
message: [
{
property: 'email',
children: [],
Expand Down Expand Up @@ -417,7 +417,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
errors: [
message: [
{
children: [],
constraints: {
Expand Down Expand Up @@ -481,7 +481,7 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
errors: [
message: [
{
property: 'email',
children: [],
Expand Down Expand Up @@ -540,14 +540,14 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 400,
message: 'Bad Request',
errors: [
message: [
'email is invalid',
'password cannot be empty',
'extra.subscribeToEmail is not a boolean',
'extra.min with value: "1" needs to be at least 5, ow and COOL',
'extra.max with value: "100" needs to be less than 10, ow and SUPER',
],
error: 'Bad Request',
});
});
});
Expand All @@ -565,15 +565,15 @@ describe('i18n module e2e dto', () => {
.expect((res) => {
expect(res.body).toMatchObject({
statusCode: 422,
message: 'Bad Request',
errors: [
message: [
'email is invalid',
'email cannot be empty',
'password cannot be empty',
'extra.subscribeToEmail is not a boolean',
'extra.min with value: "1" needs to be at least 5, ow and COOL',
'extra.max with value: "100" needs to be less than 10, ow and SUPER',
],
error: 'Bad Request',
});
});
});
Expand Down
4 changes: 2 additions & 2 deletions tests/i18n-express.e2e.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -700,8 +700,7 @@ describe('i18n module e2e express', () => {
.expect(400)
.expect({
statusCode: 400,
message: 'Bad Request',
errors: [
message: [
{
property: 'age',
value: 2,
Expand All @@ -712,6 +711,7 @@ describe('i18n module e2e express', () => {
},
},
],
error: 'Bad Request',
});
});

Expand Down
4 changes: 2 additions & 2 deletions tests/i18n-fastify.e2e.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -704,8 +704,7 @@ describe('i18n module e2e fastify', () => {
.expect(400)
.expect({
statusCode: 400,
message: 'Bad Request',
errors: [
message: [
{
property: 'age',
value: 2,
Expand All @@ -716,6 +715,7 @@ describe('i18n module e2e fastify', () => {
},
},
],
error: 'Bad Request',
});
});

Expand Down

0 comments on commit b8e84f1

Please sign in to comment.