mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
test: add enterprise feature mock utilities
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
import { vi } from "vitest";
|
||||||
|
import type { EnterpriseFeature } from "@snapotter/enterprise";
|
||||||
|
|
||||||
|
export function mockEnterpriseFeatures(features: EnterpriseFeature[]) {
|
||||||
|
vi.doMock("@snapotter/enterprise", () => ({
|
||||||
|
isFeatureEnabled: (feature: string) =>
|
||||||
|
features.includes(feature as EnterpriseFeature),
|
||||||
|
getActiveLicense: () => ({
|
||||||
|
org: "test-org",
|
||||||
|
plan: "enterprise" as const,
|
||||||
|
features,
|
||||||
|
seats: 100,
|
||||||
|
expiresAt: new Date(
|
||||||
|
Date.now() + 365 * 24 * 60 * 60 * 1000,
|
||||||
|
).toISOString(),
|
||||||
|
issuedAt: new Date().toISOString(),
|
||||||
|
}),
|
||||||
|
initEnterprise: vi.fn(),
|
||||||
|
loadS3Storage: vi.fn(),
|
||||||
|
ENTERPRISE_FEATURES: features,
|
||||||
|
PLAN_FEATURES: { team: [], enterprise: features },
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
export function mockNoEnterprise() {
|
||||||
|
vi.doMock("@snapotter/enterprise", () => ({
|
||||||
|
isFeatureEnabled: () => false,
|
||||||
|
getActiveLicense: () => null,
|
||||||
|
initEnterprise: vi.fn(),
|
||||||
|
loadS3Storage: vi.fn(),
|
||||||
|
ENTERPRISE_FEATURES: [],
|
||||||
|
PLAN_FEATURES: { team: [], enterprise: [] },
|
||||||
|
}));
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
import { describe, it, expect, vi, beforeEach } from "vitest";
|
||||||
|
|
||||||
|
describe("enterprise mock", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.resetModules();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("mocks feature enabled", async () => {
|
||||||
|
const { mockEnterpriseFeatures } = await import(
|
||||||
|
"../../helpers/enterprise-mock.js"
|
||||||
|
);
|
||||||
|
mockEnterpriseFeatures(["audit_export", "siem_forwarding"]);
|
||||||
|
const { isFeatureEnabled } = await import("@snapotter/enterprise");
|
||||||
|
expect(isFeatureEnabled("audit_export")).toBe(true);
|
||||||
|
expect(isFeatureEnabled("siem_forwarding")).toBe(true);
|
||||||
|
expect(isFeatureEnabled("scim")).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("mocks no enterprise", async () => {
|
||||||
|
const { mockNoEnterprise } = await import(
|
||||||
|
"../../helpers/enterprise-mock.js"
|
||||||
|
);
|
||||||
|
mockNoEnterprise();
|
||||||
|
const { isFeatureEnabled } = await import("@snapotter/enterprise");
|
||||||
|
expect(isFeatureEnabled("audit_export")).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns license payload with correct shape", async () => {
|
||||||
|
const { mockEnterpriseFeatures } = await import(
|
||||||
|
"../../helpers/enterprise-mock.js"
|
||||||
|
);
|
||||||
|
mockEnterpriseFeatures(["s3_storage", "mfa"]);
|
||||||
|
const { getActiveLicense } = await import("@snapotter/enterprise");
|
||||||
|
const license = getActiveLicense();
|
||||||
|
expect(license).not.toBeNull();
|
||||||
|
expect(license!.org).toBe("test-org");
|
||||||
|
expect(license!.plan).toBe("enterprise");
|
||||||
|
expect(license!.features).toEqual(["s3_storage", "mfa"]);
|
||||||
|
expect(license!.seats).toBe(100);
|
||||||
|
expect(new Date(license!.expiresAt).getTime()).toBeGreaterThan(Date.now());
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns null license when no enterprise", async () => {
|
||||||
|
const { mockNoEnterprise } = await import(
|
||||||
|
"../../helpers/enterprise-mock.js"
|
||||||
|
);
|
||||||
|
mockNoEnterprise();
|
||||||
|
const { getActiveLicense } = await import("@snapotter/enterprise");
|
||||||
|
expect(getActiveLicense()).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user