Files
calendar/packages/features/calendar-cache/lib/getShouldServeCache.test.ts
T
Joe Au-YeungGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>Alex van Andel
17ab088af8 fix: Faulty logic around shouldServeCache (#24465)
* 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>
2025-10-15 11:20:25 +00:00

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");
});
});
});