import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';
import { describe, expect, it } from 'vitest';
import { CreateTradeDto } from '../src/modules/trading/dto/trade.dto';

describe('trade DTO validation', () => {
  it('normalizes symbols and accepts decimal strings', async () => {
    const dto = plainToInstance(CreateTradeDto, {
      openDate: '2026-06-18',
      asset: ' btc ',
      dir: 'LONG',
      tradeType: 'Swing',
      result: 'OPEN',
      entry: 104500.25,
      qty: '0.125',
      adds: [],
      partials: [],
    });

    const errors = await validate(dto);

    expect(errors).toHaveLength(0);
    expect(dto.asset).toBe('BTC');
    expect(dto.entry).toBe('104500.25');
  });

  it('rejects exponential notation for financial values', async () => {
    const dto = plainToInstance(CreateTradeDto, {
      openDate: '2026-06-18',
      asset: 'BTC',
      dir: 'LONG',
      tradeType: 'Swing',
      result: 'OPEN',
      entry: '1e6',
    });

    const errors = await validate(dto);

    expect(errors.some((error) => error.property === 'entry')).toBe(true);
  });
});
