50 lines
1.9 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
});
|