36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
import { plainToInstance } from 'class-transformer';
|
|
import { validate } from 'class-validator';
|
|
import {
|
|
PublicQueryGoodDto,
|
|
PublicTagFilterDto,
|
|
} from './public-query-good.dto';
|
|
|
|
describe('PublicQueryGoodDto', () => {
|
|
it('parses tags from a JSON query parameter into nested DTOs', async () => {
|
|
const dto = plainToInstance(PublicQueryGoodDto, {
|
|
tags: JSON.stringify([
|
|
{ tagGroupId: '1', tagIds: ['11', '12'] },
|
|
{ tagGroupId: '2', tagIds: ['25'] },
|
|
]),
|
|
});
|
|
|
|
expect(dto.tags).toHaveLength(2);
|
|
expect(dto.tags?.[0]).toBeInstanceOf(PublicTagFilterDto);
|
|
expect(dto.tags?.[0]).toEqual({
|
|
tagGroupId: '1',
|
|
tagIds: ['11', '12'],
|
|
});
|
|
await expect(validate(dto)).resolves.toHaveLength(0);
|
|
});
|
|
|
|
it('rejects malformed group and tag ids', async () => {
|
|
const dto = plainToInstance(PublicQueryGoodDto, {
|
|
tags: JSON.stringify([
|
|
{ tagGroupId: 'craft', tagIds: ['11', 'bad'] },
|
|
]),
|
|
});
|
|
|
|
expect(await validate(dto)).not.toHaveLength(0);
|
|
});
|
|
});
|