import { describe, expect, it } from "vitest";
import { applyAgentSkillSnapshot } from "./agent-skills-state";

describe("applyAgentSkillSnapshot", () => {
  it("hydrates the initial snapshot without arming autosave", () => {
    const result = applyAgentSkillSnapshot(
      {
        draft: [],
        lastSaved: [],
        hasHydratedSnapshot: false,
      },
      ["paperclip", "para-memory-files"],
    );

    expect(result).toEqual({
      draft: ["paperclip", "para-memory-files"],
      lastSaved: ["paperclip", "para-memory-files"],
      hasHydratedSnapshot: true,
      shouldSkipAutosave: true,
    });
  });

  it("keeps unsaved local edits when a fresh snapshot arrives", () => {
    const result = applyAgentSkillSnapshot(
      {
        draft: ["paperclip", "custom-skill"],
        lastSaved: ["paperclip"],
        hasHydratedSnapshot: true,
      },
      ["paperclip"],
    );

    expect(result).toEqual({
      draft: ["paperclip", "custom-skill"],
      lastSaved: ["paperclip"],
      hasHydratedSnapshot: true,
      shouldSkipAutosave: false,
    });
  });

  it("adopts server state after a successful save and skips the follow-up autosave pass", () => {
    const result = applyAgentSkillSnapshot(
      {
        draft: ["paperclip", "custom-skill"],
        lastSaved: ["paperclip", "custom-skill"],
        hasHydratedSnapshot: true,
      },
      ["paperclip", "custom-skill"],
    );

    expect(result).toEqual({
      draft: ["paperclip", "custom-skill"],
      lastSaved: ["paperclip", "custom-skill"],
      hasHydratedSnapshot: true,
      shouldSkipAutosave: true,
    });
  });
});
