Skip to main content
Glama
deepsource-report-utils.test.ts10.2 kB
/** * Tests for DeepSource report utility methods * Focuses on testing the internal utility methods related to report processing */ import { DeepSourceClient, ReportType } from '../deepsource'; // Import jest from vitest import { vi } from 'vitest'; // Create a testable class to access private methods class TestableDeepSourceClient extends DeepSourceClient { static testExtractReportData(response: unknown, reportType: ReportType) { // @ts-expect-error - Accessing private method for testing return DeepSourceClient.extractReportData(response, reportType); } } describe('DeepSource Report Utility Methods', () => { describe('extractReportData', () => { // We need to access the private static method const extractReportData = (DeepSourceClient as Record<string, unknown>).extractReportData as ( _response: unknown, _reportType: ReportType ) => Record<string, unknown> | null; it('should return null for null response', () => { const result = extractReportData(null, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null for non-object response', () => { const result = extractReportData('string-response', ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when data property is missing', () => { const response = { notData: {} }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when data property is not an object', () => { const response = { data: 'string-data' }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when GraphQL data is missing', () => { const response = { data: {} }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when GraphQL data is not an object', () => { const response = { data: { data: 'string-data' } }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when repository is missing', () => { const response = { data: { data: {} } }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when repository is not an object', () => { const response = { data: { data: { repository: 'string-repository' } } }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when reports is missing', () => { const response = { data: { data: { repository: {} } } }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when reports is not an object', () => { const response = { data: { data: { repository: { reports: 'string-reports' } } } }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when report data is missing', () => { const response = { data: { data: { repository: { reports: {}, }, }, }, }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should return null when report data is not an object', () => { const response = { data: { data: { repository: { reports: { owaspTop10: 'string-report', }, }, }, }, }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toBeNull(); }); it('should successfully extract OWASP_TOP_10 report data', () => { const reportData = { key: 'OWASP_TOP_10', title: 'OWASP Top 10', securityIssueStats: [], }; const response = { data: { data: { repository: { reports: { owaspTop10: reportData, }, }, }, }, }; const result = extractReportData(response, ReportType.OWASP_TOP_10); expect(result).toEqual(reportData); }); it('should successfully extract SANS_TOP_25 report data', () => { const reportData = { key: 'SANS_TOP_25', title: 'SANS Top 25', securityIssueStats: [], }; const response = { data: { data: { repository: { reports: { sansTop25: reportData, }, }, }, }, }; const result = extractReportData(response, ReportType.SANS_TOP_25); expect(result).toEqual(reportData); }); }); describe('getReportField', () => { // We need to access the private static method const getReportField = (DeepSourceClient as Record<string, unknown>).getReportField as ( _reportType: ReportType ) => string; it('should return correct field name for OWASP_TOP_10', () => { const fieldName = getReportField(ReportType.OWASP_TOP_10); expect(fieldName).toBe('owaspTop10'); }); it('should return correct field name for SANS_TOP_25', () => { const fieldName = getReportField(ReportType.SANS_TOP_25); expect(fieldName).toBe('sansTop25'); }); it('should return correct field name for MISRA_C', () => { const fieldName = getReportField(ReportType.MISRA_C); expect(fieldName).toBe('misraC'); }); it('should return correct field name for CODE_COVERAGE', () => { const fieldName = getReportField(ReportType.CODE_COVERAGE); expect(fieldName).toBe('codeCoverage'); }); it('should return correct field name for CODE_HEALTH_TREND', () => { const fieldName = getReportField(ReportType.CODE_HEALTH_TREND); expect(fieldName).toBe('codeHealthTrend'); }); it('should return correct field name for ISSUE_DISTRIBUTION', () => { const fieldName = getReportField(ReportType.ISSUE_DISTRIBUTION); expect(fieldName).toBe('issueDistribution'); }); it('should return correct field name for ISSUES_PREVENTED', () => { const fieldName = getReportField(ReportType.ISSUES_PREVENTED); expect(fieldName).toBe('issuesPrevented'); }); it('should return correct field name for ISSUES_AUTOFIXED', () => { const fieldName = getReportField(ReportType.ISSUES_AUTOFIXED); expect(fieldName).toBe('issuesAutofixed'); }); it('should throw for an invalid report type', () => { expect(() => getReportField('INVALID_TYPE' as ReportType)).toThrow('Unsupported report type'); }); }); describe('getTitleForReportType', () => { // We need to access the private static method const getTitleForReportType = (DeepSourceClient as Record<string, unknown>) .getTitleForReportType as (_reportType: ReportType) => string; it('should return correct title for OWASP_TOP_10', () => { const title = getTitleForReportType(ReportType.OWASP_TOP_10); expect(title).toBe('OWASP Top 10'); }); it('should return correct title for SANS_TOP_25', () => { const title = getTitleForReportType(ReportType.SANS_TOP_25); expect(title).toBe('SANS Top 25'); }); it('should return correct title for MISRA_C', () => { const title = getTitleForReportType(ReportType.MISRA_C); expect(title).toBe('MISRA-C'); }); it('should return correct title for CODE_COVERAGE', () => { const title = getTitleForReportType(ReportType.CODE_COVERAGE); expect(title).toBe('Code Coverage'); }); it('should return correct title for CODE_HEALTH_TREND', () => { const title = getTitleForReportType(ReportType.CODE_HEALTH_TREND); expect(title).toBe('Code Health Trend'); }); it('should return correct title for ISSUE_DISTRIBUTION', () => { const title = getTitleForReportType(ReportType.ISSUE_DISTRIBUTION); expect(title).toBe('Issue Distribution'); }); it('should return correct title for ISSUES_PREVENTED', () => { const title = getTitleForReportType(ReportType.ISSUES_PREVENTED); expect(title).toBe('Issues Prevented'); }); it('should return correct title for ISSUES_AUTOFIXED', () => { const title = getTitleForReportType(ReportType.ISSUES_AUTOFIXED); expect(title).toBe('Issues Autofixed'); }); it('should return "Unknown Report" for an invalid report type', () => { const title = getTitleForReportType('INVALID_TYPE' as ReportType); expect(title).toBe('Unknown Report'); }); }); describe('extractReportData - fieldName handling (line 3277)', () => { it('should return null when getReportField returns falsy value (line 3277)', () => { // Mock getReportField to return a falsy value (null, undefined, empty string) const originalGetReportField = DeepSourceClient['getReportField']; // Temporarily override getReportField to return an empty string DeepSourceClient['getReportField'] = vi.fn().mockReturnValue(''); // Create a response with all required levels of nesting const mockResponse = { data: { data: { repository: { reports: { // Some report data, but fieldName will be empty someReport: { data: 'value' }, }, }, }, }, }; // Test the method with a response that would otherwise be valid, // but we've mocked getReportField to return empty string const result = TestableDeepSourceClient.testExtractReportData( mockResponse, ReportType.OWASP_TOP_10 ); // Verify that line 3277 was executed (the method returned null) expect(result).toBeNull(); // Restore original method DeepSourceClient['getReportField'] = originalGetReportField; }); }); });

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