import { beforeEach, describe, expect, it, vi } from "vitest";
import { POST } from "./route";

const mocks = vi.hoisted(() => ({
  requireApiV1Auth: vi.fn(),
  approveQuote: vi.fn(),
}));

vi.mock("@/lib/api-v1/auth", () => ({
  requireApiV1Auth: mocks.requireApiV1Auth,
}));

vi.mock("@/lib/api-v1/services/quotes-service", () => ({
  approveQuote: mocks.approveQuote,
}));

describe("POST /api/v1/quotes/:id/approve", () => {
  const quoteId = "66666666-6666-4666-8666-666666666666";

  beforeEach(() => {
    vi.clearAllMocks();
  });

  it("aprova orcamento e retorna pedido gerado", async () => {
    mocks.requireApiV1Auth.mockResolvedValue({
      supabase: {},
      user: { id: "user-1" },
    });
    mocks.approveQuote.mockResolvedValue({
      ok: true,
      orderId: "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
      notification: null,
    });

    const response = await POST(new Request(`http://localhost/api/v1/quotes/${quoteId}/approve`), {
      params: Promise.resolve({ id: quoteId }),
    });

    expect(response.status).toBe(200);
    await expect(response.json()).resolves.toMatchObject({
      success: true,
      data: {
        order_id: "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
      },
    });
  });
});
