Files
calendar/packages/features/bookings/Booker/utils/isFeatureEnabledForVisitor.test.ts
T
Hariom BalharaandGitHub 209a401113 fix: Enable feature for embeds when 100 pc is set (#20003)
* Enable feature for embeds when 100 pc is set

* Dont consider reserved status for quick availability check
2025-03-13 17:16:43 +05:30

106 lines
3.5 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from "vitest";
import { getCookie } from "@calcom/lib/cookie";
import { isVisitorWithinPercentage } from "./isFeatureEnabledForVisitor";
const generateRandomUuid = () => {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0;
const v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
};
const mockGetCookie = ({ expectedUid }: { expectedUid: string }) =>
//@ts-expect-error - mock implementation
getCookie.mockImplementation((name) => {
if (name === "uid") {
return expectedUid;
}
return null;
});
vi.mock("@calcom/lib/cookie", () => ({
getCookie: vi.fn(),
}));
describe("isVisitorWithinPercentage", () => {
beforeEach(() => {
vi.clearAllMocks();
});
// Test for deterministic behavior
it("should provide consistent results for the same visitorId", () => {
const testUuids = [
"f956595b-0a69-4167-b9c9-a15d6ac445bb",
"550e8400-e29b-41d4-a716-446655440000",
"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"6ba7b811-9dad-11d1-80b4-00c04fd430c8",
"6ba7b812-9dad-11d1-80b4-00c04fd430c8",
];
// For each UUID, check results are consistent across multiple calls
testUuids.forEach((uuid) => {
mockGetCookie({ expectedUid: uuid });
const result1 = isVisitorWithinPercentage({ percentage: 50 });
const result2 = isVisitorWithinPercentage({ percentage: 50 });
const result3 = isVisitorWithinPercentage({ percentage: 50 });
// All results should be the same for the same UUID
expect(result1).toBe(result2);
expect(result2).toBe(result3);
});
});
// Test for correct percentage distribution
it("should approximately match the configured percentage", () => {
// Generate a large number of random UUIDs to test distribution
const sampleSize = 10000;
const testPercentages = [10, 25, 50, 75, 90];
testPercentages.forEach((percentage) => {
let enabledCount = 0;
// Run test with many random UUIDs
for (let i = 0; i < sampleSize; i++) {
const uuid = generateRandomUuid();
mockGetCookie({ expectedUid: uuid });
if (isVisitorWithinPercentage({ percentage })) {
enabledCount++;
}
}
// Calculate the actual percentage
const actualPercentage = (enabledCount / sampleSize) * 100;
// We allow a 3% margin of error given the sample size
expect(actualPercentage).toBeGreaterThanOrEqual(percentage - 3);
expect(actualPercentage).toBeLessThanOrEqual(percentage + 3);
});
});
// Test for fallback to random behavior when no UUID is provided
it("should not enable feature when UUID is not available unless the feature is 100% enabled", () => {
mockGetCookie({ expectedUid: undefined });
expect(isVisitorWithinPercentage({ percentage: 50 })).toBe(false);
expect(isVisitorWithinPercentage({ percentage: 100 })).toBe(true);
});
it("should disable the feature when percentage is 0", () => {
const uuids = Array.from({ length: 100 }, () => generateRandomUuid());
uuids.forEach((uuid) => {
mockGetCookie({ expectedUid: uuid });
expect(isVisitorWithinPercentage({ percentage: 0 })).toBe(false);
});
});
it("should enable the feature when percentage is 100", () => {
const uuids = Array.from({ length: 100 }, () => generateRandomUuid());
uuids.forEach((uuid) => {
mockGetCookie({ expectedUid: uuid });
expect(isVisitorWithinPercentage({ percentage: 100 })).toBe(true);
});
});
});