import { describe, expect, it } from "vitest"; import { CLOUD_TOOLS, cloudProjects } from "@/lib/cloud-policy"; describe("autonomous cloud project rules", () => { it("keeps the newest saved version while preserving an older published address for the same project", () => { const projects = cloudProjects([ { id: "old", session_id: "project", prompt: "First version", created_at: "2026-11-01T10:00:00Z", deployed_url: "https://site.pages.dev" }, { id: "new", session_id: "project", prompt: "Updated version", created_at: "2026-11-02T10:00:00Z", deployed_url: null }, ]); expect(projects).toHaveLength(1); expect(projects[0]?.latest.id).toBe("new"); expect(projects[0]?.published?.deployed_url).toBe("https://site.pages.dev"); expect(projects[0]?.versions).toBe(2); }); it("keeps separate projects independent and never treats an unpublished version as deployed", () => { const projects = cloudProjects([ { id: "one", session_id: "a", prompt: "Site one", created_at: "2026-11-02T10:00:00Z", deployed_url: null }, { id: "two", session_id: "b", prompt: "Site two", created_at: "2026-11-01T10:00:00Z", deployed_url: null }, ]); expect(projects).toHaveLength(2); expect(projects.map(p => p.published)).toEqual([null, null]); }); it("limits cloud voice to cloud reads and publish permission requests rather than direct deployment", () => { expect(CLOUD_TOOLS[0]?.functionDeclarations.map(t => t.name)).toEqual(["get_cloud_projects", "request_publish_project"]); }); });