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 (cls: new () => T, payload: Record) => 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); }); });