Update workspace model ownership flows
This commit is contained in:
@@ -4,6 +4,7 @@ import {
|
||||
RecentProviderSessionDescriptorPayloadSchema,
|
||||
SessionInboundMessageSchema,
|
||||
SessionOutboundMessageSchema,
|
||||
WorkspaceCreateRequestSchema,
|
||||
WorkspaceDescriptorPayloadSchema,
|
||||
WorkspaceScriptPayloadSchema,
|
||||
} from "./messages.js";
|
||||
@@ -866,4 +867,42 @@ describe("workspace message schemas", () => {
|
||||
const checkout = result.data.payload.entries[0]?.project.checkout;
|
||||
expect(checkout?.worktreeRoot).toBe("C:\\repo");
|
||||
});
|
||||
|
||||
test("workspace.create.request rejects old flat backing shape and accepts new source envelope", () => {
|
||||
// Old flat shape with backing enum must be rejected.
|
||||
const oldFlat = WorkspaceCreateRequestSchema.safeParse({
|
||||
type: "workspace.create.request",
|
||||
requestId: "req-old",
|
||||
backing: "worktree",
|
||||
cwd: "/tmp/repo",
|
||||
branch: "feat/my-feature",
|
||||
});
|
||||
expect(oldFlat.success).toBe(false);
|
||||
|
||||
// New envelope shape with source discriminated union must be accepted.
|
||||
const newWorktree = WorkspaceCreateRequestSchema.parse({
|
||||
type: "workspace.create.request",
|
||||
requestId: "req-worktree",
|
||||
source: {
|
||||
kind: "worktree",
|
||||
cwd: "/tmp/repo",
|
||||
action: "checkout",
|
||||
refName: "feat/my-feature",
|
||||
},
|
||||
});
|
||||
expect(newWorktree.type).toBe("workspace.create.request");
|
||||
expect(newWorktree.source.kind).toBe("worktree");
|
||||
|
||||
// Directory source must also be accepted.
|
||||
const newDirectory = WorkspaceCreateRequestSchema.parse({
|
||||
type: "workspace.create.request",
|
||||
requestId: "req-dir",
|
||||
source: {
|
||||
kind: "directory",
|
||||
path: "/tmp/repo",
|
||||
},
|
||||
});
|
||||
expect(newDirectory.type).toBe("workspace.create.request");
|
||||
expect(newDirectory.source.kind).toBe("directory");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user