diff --git a/packages/common/pipes/file/parse-file-pipe.builder.ts b/packages/common/pipes/file/parse-file-pipe.builder.ts index 7835322d972..fafbe78fe83 100644 --- a/packages/common/pipes/file/parse-file-pipe.builder.ts +++ b/packages/common/pipes/file/parse-file-pipe.builder.ts @@ -14,12 +14,15 @@ export class ParseFilePipeBuilder { private validators: FileValidator[] = []; addMaxSizeValidator(options: MaxFileSizeValidatorOptions) { - this.validators.push(new MaxFileSizeValidator(options)); - return this; + return this.addValidator(new MaxFileSizeValidator(options)); } addFileTypeValidator(options: FileTypeValidatorOptions) { - this.validators.push(new FileTypeValidator(options)); + return this.addValidator(new FileTypeValidator(options)); + } + + addValidator(validator: FileValidator) { + this.validators.push(validator); return this; } diff --git a/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts b/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts index 8c31904aaaf..43f1b29a1c5 100644 --- a/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts +++ b/packages/common/test/pipes/file/parse-file-pipe.builder.spec.ts @@ -1,6 +1,8 @@ import { expect } from 'chai'; import { FileTypeValidator, + FileTypeValidatorOptions, + FileValidator, MaxFileSizeValidator, ParseFilePipeBuilder, } from '../../../pipes'; @@ -50,6 +52,32 @@ describe('ParseFilePipeBuilder', () => { }); }); + describe('when custom validator was chained', () => { + it('should return a ParseFilePipe with TestFileValidator and given options', () => { + class TestFileValidator extends FileValidator<{ name: string }> { + buildErrorMessage(file: any): string { + return 'TestFileValidator failed'; + } + + isValid(file: any): boolean | Promise { + return true; + } + } + + const options = { + name: 'test', + }; + + const parseFilePipe = parseFilePipeBuilder + .addValidator(new TestFileValidator(options)) + .build(); + + expect(parseFilePipe.getValidators()).to.deep.include( + new TestFileValidator(options), + ); + }); + }); + describe('when it is called twice with different validators', () => { it('should not reuse validators', () => { const maxSizeValidatorOptions = {