import { Types } from "mongoose"; import { blameCaseInitiatedByFieldExpert, claimCaseInitiatedByFieldExpert, } from "./tenant-scope"; describe("field expert ownership helpers", () => { const expertId = new Types.ObjectId(); const otherExpertId = new Types.ObjectId(); const blameId = new Types.ObjectId(); describe("blameCaseInitiatedByFieldExpert", () => { it("matches when initiatedByFieldExpertId equals actor.sub (string)", () => { expect( blameCaseInitiatedByFieldExpert( { expertInitiated: true, initiatedByFieldExpertId: expertId, }, { sub: String(expertId) }, ), ).toBe(true); }); it("does not require actor.role on JWT", () => { expect( blameCaseInitiatedByFieldExpert( { expertInitiated: true, initiatedByFieldExpertId: expertId, }, { sub: String(expertId) }, ), ).toBe(true); }); it("rejects another expert", () => { expect( blameCaseInitiatedByFieldExpert( { expertInitiated: true, initiatedByFieldExpertId: expertId, }, { sub: String(otherExpertId) }, ), ).toBe(false); }); }); describe("claimCaseInitiatedByFieldExpert", () => { it("matches claim.initiatedByFieldExpertId", () => { expect( claimCaseInitiatedByFieldExpert( { initiatedByFieldExpertId: expertId }, { sub: String(expertId) }, ), ).toBe(true); }); it("matches via linked expert-initiated blame when claim field is missing", () => { expect( claimCaseInitiatedByFieldExpert( { blameRequestId: blameId }, { sub: String(expertId) }, { expertInitiated: true, initiatedByFieldExpertId: expertId, }, ), ).toBe(true); }); it("rejects when neither claim nor blame links to actor", () => { expect( claimCaseInitiatedByFieldExpert( { blameRequestId: blameId }, { sub: String(expertId) }, { expertInitiated: true, initiatedByFieldExpertId: otherExpertId, }, ), ).toBe(false); }); }); });