Skip to main content
Glama

mcp-youtube

by kirbah
container.test.ts3.67 kB
let initializeContainer: typeof import("../../src/container").initializeContainer; let mockCacheServiceConstructorFn: jest.Mock; let mockYoutubeServiceConstructorFn: jest.Mock; let mockTranscriptServiceConstructorFn: jest.Mock; // Added mock for TranscriptService describe("initializeContainer", () => { beforeEach(async () => { jest.resetModules(); // Reset modules before each test // For constructor mocks, we mock the class behavior // The actual instances will be created by these mocked constructors const mockCacheServiceInstance = {} as import("../../src/services/cache.service").CacheService; // representative instance mockCacheServiceConstructorFn = jest .fn() .mockImplementation(() => mockCacheServiceInstance); const mockYoutubeServiceInstance = {} as import("../../src/services/youtube.service").YoutubeService; // representative instance mockYoutubeServiceConstructorFn = jest .fn() .mockImplementation(() => mockYoutubeServiceInstance); const mockTranscriptServiceInstance = {} as import("../../src/services/transcript.service").TranscriptService; // representative instance mockTranscriptServiceConstructorFn = jest .fn() .mockImplementation(() => mockTranscriptServiceInstance); // Use jest.doMock to control the mocks for the dynamically imported module jest.doMock("../../src/services/cache.service", () => ({ CacheService: mockCacheServiceConstructorFn, })); jest.doMock("../../src/services/youtube.service", () => ({ YoutubeService: mockYoutubeServiceConstructorFn, })); jest.doMock("../../src/services/transcript.service", () => ({ TranscriptService: mockTranscriptServiceConstructorFn, })); // Dynamically import the module under test AFTER jest.doMock calls const containerModule = await import("../../src/container"); initializeContainer = containerModule.initializeContainer; // ClearAllMocks is not strictly necessary here because we are using freshly created jest.fn()s // and they haven't been called yet. But it doesn't hurt. jest.clearAllMocks(); }); it("should initialize services and return the container", async () => { const container = await initializeContainer(); expect(mockCacheServiceConstructorFn).toHaveBeenCalledTimes(1); expect(mockCacheServiceConstructorFn).toHaveBeenCalledWith(); expect(mockYoutubeServiceConstructorFn).toHaveBeenCalledTimes(1); // Assert that YoutubeService constructor was called with the instance created by CacheService mock expect(mockYoutubeServiceConstructorFn).toHaveBeenCalledWith( mockCacheServiceConstructorFn.mock.results[0].value ); expect(mockTranscriptServiceConstructorFn).toHaveBeenCalledTimes(1); expect(mockTranscriptServiceConstructorFn).toHaveBeenCalledWith( mockCacheServiceConstructorFn.mock.results[0].value ); expect(container).toEqual({ cacheService: mockCacheServiceConstructorFn.mock.results[0].value, youtubeService: mockYoutubeServiceConstructorFn.mock.results[0].value, transcriptService: mockTranscriptServiceConstructorFn.mock.results[0].value, // Added }); // Call initializeContainer again const sameContainer = await initializeContainer(); expect(sameContainer).toBe(container); // Should be the same instance // Initialization logic should not be called again expect(mockCacheServiceConstructorFn).toHaveBeenCalledTimes(1); expect(mockYoutubeServiceConstructorFn).toHaveBeenCalledTimes(1); expect(mockTranscriptServiceConstructorFn).toHaveBeenCalledTimes(1); // Added }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kirbah/mcp-youtube'

If you have feedback or need assistance with the MCP directory API, please join our Discord server