44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
import 'reflect-metadata';
|
|
import { plainToInstance } from 'class-transformer';
|
|
import { validate } from 'class-validator';
|
|
import { AddPositionDto } from './add-position.dto';
|
|
import { UpdatePositionDto } from './update-position.dto';
|
|
|
|
describe('position DTO validation', () => {
|
|
const validateDto = async <T extends object>(cls: new () => T, payload: Record<string, unknown>) =>
|
|
validate(plainToInstance(cls, payload));
|
|
|
|
it('rejects zero quantity when adding a position', async () => {
|
|
const errors = await validateDto(AddPositionDto, { secid: 'SBER', quantity: 0 });
|
|
|
|
expect(errors.some((error) => error.property === 'quantity')).toBe(true);
|
|
});
|
|
|
|
it('rejects zero quantity when updating a position', async () => {
|
|
const errors = await validateDto(UpdatePositionDto, { quantity: 0 });
|
|
|
|
expect(errors.some((error) => error.property === 'quantity')).toBe(true);
|
|
});
|
|
|
|
it('rejects invalid buyDate values', async () => {
|
|
const addErrors = await validateDto(AddPositionDto, {
|
|
secid: 'SBER',
|
|
quantity: 1,
|
|
buyDate: 'not-a-date',
|
|
});
|
|
const updateErrors = await validateDto(UpdatePositionDto, { buyDate: 'not-a-date' });
|
|
|
|
expect(addErrors.some((error) => error.property === 'buyDate')).toBe(true);
|
|
expect(updateErrors.some((error) => error.property === 'buyDate')).toBe(true);
|
|
});
|
|
|
|
it('accepts valid position payloads', async () => {
|
|
await expect(
|
|
validateDto(AddPositionDto, { secid: 'SBER', quantity: 1, buyDate: '2026-06-01' }),
|
|
).resolves.toHaveLength(0);
|
|
await expect(
|
|
validateDto(UpdatePositionDto, { quantity: 2, buyDate: '2026-06-15' }),
|
|
).resolves.toHaveLength(0);
|
|
});
|
|
});
|