import 'reflect-metadata';
import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';
import { CreateNotificationDto, NotificationQueryDto } from './notification.dto';

describe('NotificationQueryDto', () => {
  it('converts numeric query-string values before integer validation', async () => {
    const dto = plainToInstance(NotificationQueryDto, {
      after: '42',
      limit: '20',
    });

    await expect(validate(dto)).resolves.toEqual([]);
    expect(dto.after).toBe(42);
    expect(dto.limit).toBe(20);
  });
});

describe('notification DTO boundaries', () => {
  it('rejects an empty recipient set', async () => {
    const dto = plainToInstance(CreateNotificationDto, {
      recipientIds: [],
      type: 'test',
      title: '标题',
    });
    await expect(validate(dto)).resolves.toEqual(expect.arrayContaining([expect.any(Object)]));
  });

  it('rejects non-positive cursors and page sizes outside 1-100', async () => {
    for (const value of [{ after: '0' }, { limit: '0' }, { limit: '101' }]) {
      const dto = plainToInstance(NotificationQueryDto, value);
      expect(await validate(dto)).not.toEqual([]);
    }
  });
});
