32 lines
1.5 KiB
TypeScript
32 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
updateDocumentResourceMembershipSchema,
|
|
updateResourceMembershipSchema,
|
|
} from "./validators/resource-memberships.js";
|
|
|
|
describe("resource membership contract", () => {
|
|
it("accepts legacy state-only membership updates", () => {
|
|
expect(updateResourceMembershipSchema.parse({ state: "left" })).toEqual({ state: "left" });
|
|
expect(updateResourceMembershipSchema.parse({ state: "joined" })).toEqual({ state: "joined" });
|
|
});
|
|
|
|
it("accepts star-only updates without requiring a state mutation", () => {
|
|
expect(updateResourceMembershipSchema.parse({ starred: true })).toEqual({ starred: true });
|
|
expect(updateResourceMembershipSchema.parse({ starred: false })).toEqual({ starred: false });
|
|
});
|
|
|
|
it("rejects empty or contradictory star/state updates", () => {
|
|
expect(() => updateResourceMembershipSchema.parse({})).toThrow("state or starred is required");
|
|
expect(() => updateResourceMembershipSchema.parse({ state: "left", starred: true })).toThrow(
|
|
"starred resources must be joined",
|
|
);
|
|
});
|
|
|
|
it("accepts document star updates without join state", () => {
|
|
expect(updateDocumentResourceMembershipSchema.parse({ starred: true })).toEqual({ starred: true });
|
|
expect(updateDocumentResourceMembershipSchema.parse({ starred: false })).toEqual({ starred: false });
|
|
expect(() => updateDocumentResourceMembershipSchema.parse({ state: "joined", starred: true })).toThrow();
|
|
expect(() => updateDocumentResourceMembershipSchema.parse({})).toThrow();
|
|
});
|
|
});
|