/**
 * Unit test: a search-target monitor request is forwarded intact to the API.
 */
import { createMonitor } from "../../../v2/methods/monitor";
import type { CreateMonitorRequest, MonitorSearchTarget } from "../../../v2/types";

describe("v2 monitor search target", () => {
  test("createMonitor forwards a search target with its camelCase fields", async () => {
    let captured: any;
    const http: any = {
      post: async (_path: string, body: any) => {
        captured = body;
        return { status: 200, data: { success: true, data: { id: "mon_1", ...body } } };
      },
    };

    const searchTarget: MonitorSearchTarget = {
      type: "search",
      queries: ["firecrawl launch"],
      searchWindow: "24h",
      includeDomains: ["firecrawl.dev"],
      excludeDomains: ["spam.com"],
      maxResults: 20,
    };

    const request: CreateMonitorRequest = {
      name: "Search monitor",
      schedule: { text: "every 30 minutes" },
      goal: "Alert when Firecrawl launches a product",
      targets: [searchTarget],
    };

    await createMonitor(http, request);

    expect(captured.targets[0]).toEqual(searchTarget);
    expect(captured.targets[0].type).toBe("search");
    expect(captured.targets[0].searchWindow).toBe("24h");
    expect(captured.targets[0].maxResults).toBe(20);
  });
});
