import { beforeEach, describe, expect, it, vi } from 'vitest';

const mocked = vi.hoisted(() => ({
  query: vi.fn(),
}));

vi.mock('../../db', () => ({
  default: { query: mocked.query },
}));

describe('archive service', () => {
  beforeEach(() => {
    vi.clearAllMocks();
  });

  it('voids archived forecasts with a distinct void outcome', async () => {
    const { voidArchivedForecast } = await import('../archive');

    await voidArchivedForecast('arch-1', 'event canceled');

    expect(mocked.query).toHaveBeenCalledTimes(1);
    expect(String(mocked.query.mock.calls[0]?.[0])).toContain("SET outcome = 'void'");
    expect(mocked.query.mock.calls[0]?.[1]).toEqual([
      'VOID_INVALID_MATCHUP',
      'event canceled',
      'arch-1',
    ]);
  });

  it('excludes void outcomes from archive bucket totals', async () => {
    const { refreshBucketStats } = await import('../archive');

    await refreshBucketStats();

    expect(mocked.query).toHaveBeenCalledTimes(1);
    expect(String(mocked.query.mock.calls[0]?.[0])).toContain("COUNT(*) FILTER (WHERE outcome != 'void') AS total");
  });
});
