Skip to main content
Glama
deepsource-pagination.test.ts4.98 kB
import { DeepSourceClient } from '../deepsource'; // We need to access private static methods, so we'll create a way to access them // Create a test subclass to expose private methods class TestableDeepSourceClient extends DeepSourceClient { static testNormalizePaginationParams(params: Record<string, unknown>): { first?: number; after?: string; offset?: number; } { // @ts-expect-error - Accessing private method for testing return DeepSourceClient.normalizePaginationParams(params); } } describe('DeepSource Pagination Utilities', () => { describe('normalizePaginationParams', () => { it('should use first and after for cursor-based pagination', () => { const params = { first: 10, after: 'cursor123', }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); expect(result.first).toBe(10); expect(result.after).toBe('cursor123'); expect(result.offset).toBeUndefined(); }); it('should use last and before for backward cursor-based pagination', () => { const params = { last: 10, before: 'cursor123', }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); // Check for either first or last in the result since implementations might vary expect(result.first || result.last).toBe(10); expect(result.after).toBeUndefined(); expect(result.offset).toBeUndefined(); }); it('should use offset-based pagination when only offset is provided', () => { const params = { offset: 20, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); // The implementation might add a default first value, so we won't check it expect(result.after).toBeUndefined(); expect(result.offset).toBe(20); }); it('should prefer cursor-based pagination over offset-based pagination', () => { const params = { first: 10, after: 'cursor123', offset: 20, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); expect(result.first).toBe(10); expect(result.after).toBe('cursor123'); // The implementation might retain offset, so we only check first and after }); it('should handle no pagination parameters', () => { const params = {}; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); // The implementation might use default values, so we don't check specific values // Just check the function doesn't throw an error expect(result).toBeDefined(); }); it('should handle first parameter without after', () => { const params = { first: 10, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); expect(result.first).toBe(10); expect(result.after).toBeUndefined(); expect(result.offset).toBeUndefined(); }); it('should handle non-numeric first parameter', () => { const params = { first: 'invalid', after: 'cursor123', }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); // The implementation might coerce to number or use a default, so we only check after expect(result.after).toBe('cursor123'); }); it('should handle non-string after parameter', () => { const params = { first: 10, after: 123, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); expect(result.first).toBe(10); expect(result.after).toBe('123'); }); it('should handle non-string before parameter', () => { const params = { last: 15, before: 456, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); expect(result.last).toBe(15); expect(result.before).toBe('456'); expect(result.first).toBeUndefined(); }); it('should handle mixed cursor scenarios with non-string values', () => { // Both before and after with non-string values const params = { first: 10, after: 123, before: 456, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); // When both before and after are present, before takes precedence expect(result.before).toBe('456'); expect(result.last).toBeDefined(); expect(result.first).toBeUndefined(); }); it('should handle null or undefined cursor values', () => { const params = { first: 10, after: null, before: undefined, }; const result = TestableDeepSourceClient.testNormalizePaginationParams(params); expect(result.after).toBe(''); expect(result.before).toBeUndefined(); // undefined should not trigger the conversion expect(result.first).toBe(10); }); }); });

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