import { describe, expect, it } from "vitest";
import {
  mockSuccessfulCliRun,
  runExistingCodexCliAgent,
  setupCliRunnerTestModule,
  supervisorSpawnMock,
} from "./cli-runner.test-support.js";

describe("runCliAgent session behavior", () => {
  it("keeps resuming the CLI across model changes and passes the new model flag", async () => {
    const runCliAgent = await setupCliRunnerTestModule();
    mockSuccessfulCliRun();

    await runExistingCodexCliAgent({
      runCliAgent,
      runId: "run-model-switch",
      cliSessionBindingAuthProfileId: "openai:default",
      authProfileId: "openai:default",
    });

    const input = supervisorSpawnMock.mock.calls[0]?.[0] as { argv?: string[] };
    expect(input.argv).toEqual([
      "codex",
      "exec",
      "resume",
      "thread-123",
      "--json",
      "--model",
      "gpt-5.4",
      "hi",
    ]);
  });

  it("starts a fresh CLI session when the auth profile changes", async () => {
    const runCliAgent = await setupCliRunnerTestModule();
    mockSuccessfulCliRun();

    await runExistingCodexCliAgent({
      runCliAgent,
      runId: "run-auth-change",
      cliSessionBindingAuthProfileId: "openai:work",
      authProfileId: "openai:personal",
    });

    const input = supervisorSpawnMock.mock.calls[0]?.[0] as { argv?: string[]; scopeKey?: string };
    expect(input.argv).toEqual(["codex", "exec", "--json", "--model", "gpt-5.4", "hi"]);
    expect(input.scopeKey).toBeUndefined();
  });
});
