87 lines
2.4 KiB
TypeScript
87 lines
2.4 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const mocks = vi.hoisted(() => ({
|
|
calls: vi.fn(),
|
|
dispositions: vi.fn(),
|
|
contacts: vi.fn(),
|
|
policy: vi.fn(),
|
|
dialerLists: vi.fn(),
|
|
audit: vi.fn(),
|
|
}));
|
|
|
|
vi.mock("@hivegrid/db/admin-sales-core.server", () => ({
|
|
writeAdminSalesAudit: mocks.audit,
|
|
}));
|
|
vi.mock("~/utils/db.server", () => ({
|
|
db: {
|
|
adminCallSession: { findMany: mocks.calls },
|
|
adminCallDisposition: { findMany: mocks.dispositions },
|
|
adminContact: { findMany: mocks.contacts },
|
|
adminTelephonyPolicy: { findUnique: mocks.policy },
|
|
adminDialerList: { findMany: mocks.dialerLists },
|
|
},
|
|
}));
|
|
|
|
import { readAdminTelephonyWorkspace } from "./admin-telephony-workspace.server";
|
|
|
|
describe("admin telephony team scope", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
mocks.calls.mockResolvedValue([{ id: "call-b", adminUserId: "sales-b" }]);
|
|
mocks.dispositions.mockResolvedValue([]);
|
|
mocks.contacts.mockResolvedValue([]);
|
|
mocks.policy.mockResolvedValue(null);
|
|
mocks.dialerLists.mockResolvedValue([]);
|
|
});
|
|
|
|
it("loads team calls read-only and audits a selected foreign call", async () => {
|
|
const result = await readAdminTelephonyWorkspace(
|
|
{
|
|
adminUserId: "manager",
|
|
canReadAllCommunication: true,
|
|
canCall: false,
|
|
canManageSettings: false,
|
|
canManageRecording: false,
|
|
actor: (reason: string) => ({
|
|
adminUserId: "manager",
|
|
email: "manager@example.test",
|
|
reason,
|
|
}),
|
|
} as never,
|
|
"call-b"
|
|
);
|
|
|
|
expect(mocks.calls).toHaveBeenCalledWith(
|
|
expect.objectContaining({ where: {} })
|
|
);
|
|
expect(result.permissions.canCall).toBe(false);
|
|
expect(mocks.audit).toHaveBeenCalledWith(
|
|
expect.anything(),
|
|
expect.objectContaining({
|
|
action: "admin.sales.telephony.foreignCalls.read",
|
|
targetId: "call-b",
|
|
after: {
|
|
foreignTargets: [
|
|
{
|
|
targetId: "call-b",
|
|
dataOwnerAdminUserId: "sales-b",
|
|
},
|
|
],
|
|
accessKind: "read",
|
|
},
|
|
})
|
|
);
|
|
expect(mocks.audit).toHaveBeenCalledWith(
|
|
expect.anything(),
|
|
expect.objectContaining({
|
|
action: "admin.sales.telephony.foreignCall.read",
|
|
targetId: "call-b",
|
|
after: {
|
|
dataOwnerAdminUserId: "sales-b",
|
|
accessKind: "read",
|
|
},
|
|
})
|
|
);
|
|
});
|
|
});
|