/
partial-type.helper.spec.ts
84 lines (72 loc) 路 2.55 KB
/
partial-type.helper.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { classToClass, Expose, Transform, Type } from 'class-transformer';
import { IsString, validate } from 'class-validator';
import { PartialType } from '../lib';
import { getValidationMetadataByTarget } from './type-helpers.test-utils';
describe('PartialType', () => {
class BaseUserDto {
@IsString()
@Transform((str) => str + '_transformed')
@Type(() => String)
parentProperty!: string;
}
class CreateUserDto extends BaseUserDto {
login: string = 'defaultLogin';
@Expose()
@Transform((str) => str + '_transformed')
@IsString()
password!: string;
}
class UpdateUserDto extends PartialType(CreateUserDto) {}
describe('Validation metadata', () => {
it('should inherit metadata', () => {
const validationKeys = getValidationMetadataByTarget(UpdateUserDto).map(
(item) => item.propertyName,
);
expect(validationKeys).toEqual([
'password',
'parentProperty',
'password',
'parentProperty',
]);
});
describe('when object does not fulfil validation rules', () => {
it('"validate" should return validation errors', async () => {
const updateDto = new UpdateUserDto();
updateDto.password = 1234567 as any;
const validationErrors = await validate(updateDto);
expect(validationErrors.length).toEqual(1);
expect(validationErrors[0].constraints).toEqual({
isString: 'password must be a string',
});
});
});
describe('otherwise', () => {
it('"validate" should return an empty array', async () => {
const updateDto = new UpdateUserDto();
updateDto.password = '1234567891011';
const validationErrors = await validate(updateDto);
expect(validationErrors.length).toEqual(0);
});
});
});
describe('Transformer metadata', () => {
it('should inherit transformer metadata', () => {
const password = '1234567891011';
const parentProperty = 'test';
const updateDto = new UpdateUserDto();
updateDto.password = password;
updateDto.parentProperty = parentProperty;
const transformedDto = classToClass(updateDto);
expect(transformedDto.password).toEqual(password + '_transformed');
expect(transformedDto.parentProperty).toEqual(
parentProperty + '_transformed',
);
});
});
describe('Property initializers', () => {
it('should inherit property initializers', () => {
const updateUserDto = new UpdateUserDto();
expect(updateUserDto.login).toEqual('defaultLogin');
});
});
});