Files
Checkmate/server/tests/services/system/EntitlementsService.test.js
T

50 lines
1.9 KiB
JavaScript

import { EntitlementsFactory, SaaSEntitlementsProvider, SelfHostedEntitlementsProvider } from "@/services/system/EntitlementsService.js";
import { Org } from "@/db/models/index.js";
jest.mock("@/db/models/index.js", () => ({
Org: { findById: jest.fn() },
}));
describe("EntitlementsService", () => {
afterEach(() => jest.resetAllMocks());
test("SaaS provider maps plan keys to Plans", async () => {
const cases = [
{ planKey: "free", expected: "free" },
{ planKey: "pro", expected: "pro" },
{ planKey: "business", expected: "business" },
{ planKey: "enterprise", expected: "enterprise" },
{ planKey: undefined, expected: "free" },
];
for (const c of cases) {
Org.findById.mockReturnValueOnce({ lean: () => Promise.resolve({ planKey: c.planKey }) });
const provider = new SaaSEntitlementsProvider();
const ent = await provider.getForOrg("org1");
expect(ent.plan).toBe(c.expected);
}
});
test("Self-hosted provider returns unlimited plan", async () => {
const provider = new SelfHostedEntitlementsProvider();
const ent = await provider.getForOrg("org1");
expect(ent.plan).toBe("unlimited");
});
test("Factory returns correct provider based on DEPLOYMENT_MODE", () => {
jest.resetModules();
jest.isolateModules(() => {
jest.doMock("@/config/index.js", () => ({ config: { DEPLOYMENT_MODE: "self_hosted" } }));
const mod = require("@/services/system/EntitlementsService.js");
expect(mod.EntitlementsFactory.create()).toBeInstanceOf(mod.SelfHostedEntitlementsProvider);
});
jest.resetModules();
jest.isolateModules(() => {
jest.doMock("@/config/index.js", () => ({ config: { DEPLOYMENT_MODE: "saas" } }));
const mod = require("@/services/system/EntitlementsService.js");
expect(mod.EntitlementsFactory.create()).toBeInstanceOf(mod.SaaSEntitlementsProvider);
});
});
});