Skip to main content
Glama
client-factory.test.ts5.94 kB
/** * @vitest-environment node */ import { vi } from 'vitest'; import { DeepSourceClientFactory } from '../client/factory.js'; import { ProjectsClient } from '../client/projects-client.js'; import { IssuesClient } from '../client/issues-client.js'; import { RunsClient } from '../client/runs-client.js'; import { MetricsClient } from '../client/metrics-client.js'; import { SecurityClient } from '../client/security-client.js'; describe('DeepSourceClientFactory', () => { const API_KEY = 'test-api-key'; describe('constructor', () => { it('should throw an error if API key is not provided', () => { expect(() => { const factory = new DeepSourceClientFactory(''); return factory; // Return factory to prevent unused variable warning }).toThrow('DeepSource API key is required'); expect(() => { // @ts-expect-error - Testing with null API key const factory = new DeepSourceClientFactory(null); return factory; // Return factory to prevent unused variable warning }).toThrow('DeepSource API key is required'); }); it('should create a factory with default config', () => { const factory = new DeepSourceClientFactory(API_KEY); expect(factory).toBeInstanceOf(DeepSourceClientFactory); }); it('should create a factory with custom config', () => { const config = { baseURL: 'https://custom-api.deepsource.io/graphql/', timeout: 15000, headers: { 'X-Custom-Header': 'custom-value', }, }; const factory = new DeepSourceClientFactory(API_KEY, config); expect(factory).toBeInstanceOf(DeepSourceClientFactory); }); }); describe('getProjectsClient', () => { it('should return a ProjectsClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client = factory.getProjectsClient(); expect(client).toBeInstanceOf(ProjectsClient); }); it('should cache the ProjectsClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client1 = factory.getProjectsClient(); const client2 = factory.getProjectsClient(); // Should be the same instance expect(client1).toBe(client2); }); }); describe('testConnection', () => { it('should return true if connection test succeeds', async () => { const factory = new DeepSourceClientFactory(API_KEY); // Mock the listProjects method const mockProjectsClient = { listProjects: vi.fn<() => Promise<never[]>>().mockResolvedValue([]), }; // Override getProjectsClient to return our mock vi.spyOn(factory, 'getProjectsClient').mockReturnValue( mockProjectsClient as unknown as ProjectsClient ); const result = await factory.testConnection(); expect(result).toBe(true); expect(mockProjectsClient.listProjects).toHaveBeenCalledTimes(1); }); it('should return false if connection test fails', async () => { const factory = new DeepSourceClientFactory(API_KEY); // Mock the listProjects method const mockProjectsClient = { listProjects: vi .fn<() => Promise<never[]>>() .mockRejectedValue(new Error('Connection error')), }; // Override getProjectsClient to return our mock vi.spyOn(factory, 'getProjectsClient').mockReturnValue( mockProjectsClient as unknown as ProjectsClient ); const result = await factory.testConnection(); expect(result).toBe(false); expect(mockProjectsClient.listProjects).toHaveBeenCalledTimes(1); }); }); describe('getIssuesClient', () => { it('should return an IssuesClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client = factory.getIssuesClient(); expect(client).toBeInstanceOf(IssuesClient); }); it('should cache the IssuesClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client1 = factory.getIssuesClient(); const client2 = factory.getIssuesClient(); // Should be the same instance expect(client1).toBe(client2); }); }); describe('getRunsClient', () => { it('should return a RunsClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client = factory.getRunsClient(); expect(client).toBeInstanceOf(RunsClient); }); it('should cache the RunsClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client1 = factory.getRunsClient(); const client2 = factory.getRunsClient(); // Should be the same instance expect(client1).toBe(client2); }); }); describe('getMetricsClient', () => { it('should return a MetricsClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client = factory.getMetricsClient(); expect(client).toBeInstanceOf(MetricsClient); }); it('should cache the MetricsClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client1 = factory.getMetricsClient(); const client2 = factory.getMetricsClient(); // Should be the same instance expect(client1).toBe(client2); }); }); describe('getSecurityClient', () => { it('should return a SecurityClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client = factory.getSecurityClient(); expect(client).toBeInstanceOf(SecurityClient); }); it('should cache the SecurityClient instance', () => { const factory = new DeepSourceClientFactory(API_KEY); const client1 = factory.getSecurityClient(); const client2 = factory.getSecurityClient(); // Should be the same instance expect(client1).toBe(client2); }); }); });

Latest Blog Posts

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/sapientpants/deepsource-mcp-server'

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