import { PingResponseSchema, type PingResponse } from './ping.contract';

describe('PingResponseSchema', () => {
  const validPayload: PingResponse = {
    status: 'ok',
    service: 'sar-api',
    version: '0.1.0',
    idEmpresa: 1,
    requestId: '550e8400-e29b-41d4-a716-446655440000',
    uptimeSeconds: 42,
    now: '2026-05-27T12:34:56.000Z',
  };

  it('aceita payload válido', () => {
    const parsed = PingResponseSchema.parse(validPayload);
    expect(parsed).toEqual(validPayload);
  });

  it('rejeita status diferente de "ok"', () => {
    const bad = { ...validPayload, status: 'degraded' };
    expect(() => PingResponseSchema.parse(bad)).toThrow();
  });

  it('rejeita requestId que não é UUID', () => {
    const bad = { ...validPayload, requestId: 'not-a-uuid' };
    expect(() => PingResponseSchema.parse(bad)).toThrow();
  });

  it('rejeita uptimeSeconds negativo', () => {
    const bad = { ...validPayload, uptimeSeconds: -1 };
    expect(() => PingResponseSchema.parse(bad)).toThrow();
  });

  it('rejeita "now" que não é ISO datetime', () => {
    const bad = { ...validPayload, now: '2026-05-27' };
    expect(() => PingResponseSchema.parse(bad)).toThrow();
  });

  it('rejeita idEmpresa não inteiro', () => {
    const bad = { ...validPayload, idEmpresa: 1.5 };
    expect(() => PingResponseSchema.parse(bad)).toThrow();
  });
});
