* Should return `false` if no `teamId` is passed to `getShouldServeCache` * Change to falsey check * test: Add comprehensive tests for shouldServeCache fix - Add tests for CacheService.getShouldServeCache to verify it returns false when no teamId is provided (instead of undefined) - Add tests for GoogleCalendarService.getFreeBusyResult to verify the falsey check properly handles undefined, null, 0, empty string, and false values - All tests verify the fix in PR #24465 which changes undefined return to false and changes === false check to !shouldServeCache Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * fix: Resolve type errors in test files - Fix private credential property access by using type assertion - Add missing IFeaturesRepository methods to mock Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Alex van Andel <me@alexvanandel.com>
93 lines
3.7 KiB
TypeScript
93 lines
3.7 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import type { IFeaturesRepository } from "@calcom/features/flags/features.repository.interface";
|
|
|
|
import { CacheService } from "./getShouldServeCache";
|
|
|
|
describe("CacheService.getShouldServeCache", () => {
|
|
const mockFeaturesRepository: IFeaturesRepository = {
|
|
checkIfTeamHasFeature: vi.fn(),
|
|
checkIfFeatureIsEnabledGlobally: vi.fn(),
|
|
checkIfUserHasFeature: vi.fn(),
|
|
};
|
|
|
|
const cacheService = new CacheService({ featuresRepository: mockFeaturesRepository });
|
|
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
describe("when shouldServeCache is explicitly set to boolean", () => {
|
|
it("should return true when shouldServeCache is true", async () => {
|
|
const result = await cacheService.getShouldServeCache(true, 123);
|
|
expect(result).toBe(true);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should return false when shouldServeCache is false", async () => {
|
|
const result = await cacheService.getShouldServeCache(false, 123);
|
|
expect(result).toBe(false);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).not.toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
describe("when shouldServeCache is undefined", () => {
|
|
it("should return false when no teamId is provided", async () => {
|
|
const result = await cacheService.getShouldServeCache(undefined, undefined);
|
|
expect(result).toBe(false);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should return false when teamId is null", async () => {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const result = await cacheService.getShouldServeCache(undefined, null as any);
|
|
expect(result).toBe(false);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should return false when teamId is 0", async () => {
|
|
const result = await cacheService.getShouldServeCache(undefined, 0);
|
|
expect(result).toBe(false);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should check feature repository when teamId is provided and return true if feature is enabled", async () => {
|
|
vi.mocked(mockFeaturesRepository.checkIfTeamHasFeature).mockResolvedValue(true);
|
|
|
|
const result = await cacheService.getShouldServeCache(undefined, 123);
|
|
|
|
expect(result).toBe(true);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).toHaveBeenCalledWith(123, "calendar-cache-serve");
|
|
});
|
|
|
|
it("should check feature repository when teamId is provided and return false if feature is disabled", async () => {
|
|
vi.mocked(mockFeaturesRepository.checkIfTeamHasFeature).mockResolvedValue(false);
|
|
|
|
const result = await cacheService.getShouldServeCache(undefined, 456);
|
|
|
|
expect(result).toBe(false);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).toHaveBeenCalledWith(456, "calendar-cache-serve");
|
|
});
|
|
});
|
|
|
|
describe("edge cases", () => {
|
|
it("should prioritize explicit shouldServeCache over teamId check", async () => {
|
|
vi.mocked(mockFeaturesRepository.checkIfTeamHasFeature).mockResolvedValue(true);
|
|
|
|
const result = await cacheService.getShouldServeCache(false, 123);
|
|
|
|
expect(result).toBe(false);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("should handle positive teamId correctly", async () => {
|
|
vi.mocked(mockFeaturesRepository.checkIfTeamHasFeature).mockResolvedValue(true);
|
|
|
|
const result = await cacheService.getShouldServeCache(undefined, 999);
|
|
|
|
expect(result).toBe(true);
|
|
expect(mockFeaturesRepository.checkIfTeamHasFeature).toHaveBeenCalledWith(999, "calendar-cache-serve");
|
|
});
|
|
});
|
|
});
|