import { describe, it, expect } from 'vitest'; // Test the transformations used in handlers describe('Handler Function Transformations', () => { // Test parameter transformations for handlers describe('Schema Transformations', () => { describe('Page and Page Size Transformations', () => { it('should test transform for Projects tool', () => { const transform = (val: any) => (val ? parseInt(val, 10) || null : null); // Projects page parameter expect(transform('10')).toBe(10); expect(transform('invalid')).toBe(null); expect(transform(undefined)).toBe(null); expect(transform('')).toBe(null); // Projects page_size parameter expect(transform('20')).toBe(20); }); it('should test transform for Metrics tool', () => { const transform = (val: any) => (val ? parseInt(val, 10) || null : null); // Metrics page parameter expect(transform('10')).toBe(10); expect(transform('invalid')).toBe(null); // Metrics page_size parameter expect(transform('20')).toBe(20); }); it('should test transform for Issues tool', () => { const transform = (val: any) => (val ? parseInt(val, 10) || null : null); // Issues page parameter expect(transform('10')).toBe(10); expect(transform('invalid')).toBe(null); // Issues page_size parameter expect(transform('20')).toBe(20); }); it('should test transform for Components Measures tool', () => { const transform = (val: any) => (val ? parseInt(val, 10) || null : null); // Components Measures page parameter expect(transform('10')).toBe(10); expect(transform('invalid')).toBe(null); // Components Measures page_size parameter expect(transform('20')).toBe(20); }); it('should test transform for Measures History tool', () => { const transform = (val: any) => (val ? parseInt(val, 10) || null : null); // Measures History page parameter expect(transform('10')).toBe(10); expect(transform('invalid')).toBe(null); // Measures History page_size parameter expect(transform('20')).toBe(20); }); }); describe('Boolean Parameter Transformations', () => { it('should test boolean transform for resolved parameter', () => { const transform = (val: any) => val === 'true'; expect(transform('true')).toBe(true); expect(transform('false')).toBe(false); expect(transform('someOtherValue')).toBe(false); }); it('should test boolean transform for on_component_only parameter', () => { const transform = (val: any) => val === 'true'; expect(transform('true')).toBe(true); expect(transform('false')).toBe(false); expect(transform('someOtherValue')).toBe(false); }); it('should test boolean transform for since_leak_period parameter', () => { const transform = (val: any) => val === 'true'; expect(transform('true')).toBe(true); expect(transform('false')).toBe(false); expect(transform('someOtherValue')).toBe(false); }); it('should test boolean transform for in_new_code_period parameter', () => { const transform = (val: any) => val === 'true'; expect(transform('true')).toBe(true); expect(transform('false')).toBe(false); expect(transform('someOtherValue')).toBe(false); }); }); }); // These are mock tests for the handler implementations describe('Handler Implementation Mocks', () => { it('should mock metricsHandler implementation', () => { // Test the transform within the handler const nullToUndefined = (value: any) => (value === null ? undefined : value); // Mock params that would be processed by metricsHandler const params = { page: 2, page_size: 10 }; // Verify transformations work correctly expect(nullToUndefined(params.page)).toBe(2); expect(nullToUndefined(params.page_size)).toBe(10); expect(nullToUndefined(null)).toBeUndefined(); // Mock result structure const result = { content: [ { type: 'text', text: JSON.stringify( { metrics: [{ key: 'test-metric', name: 'Test Metric' }], paging: { pageIndex: 1, pageSize: 10, total: 1 }, }, null, 2 ), }, ], }; expect(result.content).toBeDefined(); expect(result.content[0]?.type).toBe('text'); expect(JSON.parse(result.content[0]?.text ?? '{}').metrics).toBeDefined(); }); it('should mock issuesHandler implementation', () => { // Mock the mapToSonarQubeParams function within issuesHandler const nullToUndefined = (value: any) => (value === null ? undefined : value); const mapToSonarQubeParams = (params: any) => { return { projectKey: params.project_key, severity: nullToUndefined(params.severity), page: nullToUndefined(params.page), }; }; // Test with sample parameters const params = { project_key: 'test-project', severity: 'MAJOR', page: null }; const result = mapToSonarQubeParams(params); // Verify transformations expect(result.projectKey).toBe('test-project'); expect(result.severity).toBe('MAJOR'); expect(result.page).toBeUndefined(); // Mock the handler return structure const handlerResult = { content: [ { type: 'text', text: JSON.stringify({ issues: [{ key: 'test-issue', rule: 'test-rule', severity: 'MAJOR' }], paging: { pageIndex: 1, pageSize: 10, total: 1 }, }), }, ], }; expect(handlerResult.content[0]?.type).toBe('text'); }); it('should mock componentMeasuresHandler implementation', () => { // Mock the array transformation logic const params = { component: 'test-component', metric_keys: 'coverage', branch: 'main', }; // Test array conversion logic const metricKeys = Array.isArray(params.metric_keys) ? params.metric_keys : [params.metric_keys]; expect(metricKeys).toEqual(['coverage']); // Test with array input const paramsWithArray = { component: 'test-component', metric_keys: ['coverage', 'bugs'], branch: 'main', }; const metricKeysFromArray = Array.isArray(paramsWithArray.metric_keys) ? paramsWithArray.metric_keys : [paramsWithArray.metric_keys]; expect(metricKeysFromArray).toEqual(['coverage', 'bugs']); // Mock the handler return structure const handlerResult = { content: [ { type: 'text', text: JSON.stringify({ component: { key: 'test-component', measures: [{ metric: 'coverage', value: '85.4' }], }, metrics: [{ key: 'coverage', name: 'Coverage' }], }), }, ], }; expect(handlerResult.content[0]?.type).toBe('text'); }); it('should mock componentsMeasuresHandler implementation', () => { // Mock the array transformation logic for components and metrics const params = { component_keys: 'test-component', metric_keys: 'coverage', page: '1', page_size: '10', }; // Test component keys array conversion const componentKeys = Array.isArray(params.component_keys) ? params.component_keys : [params.component_keys]; expect(componentKeys).toEqual(['test-component']); // Test metric keys array conversion const metricKeys = Array.isArray(params.metric_keys) ? params.metric_keys : [params.metric_keys]; expect(metricKeys).toEqual(['coverage']); // Test null to undefined conversion const nullToUndefined = (value: any) => (value === null ? undefined : value); expect(nullToUndefined(null)).toBeUndefined(); expect(nullToUndefined('value')).toBe('value'); // Mock the handler return structure const handlerResult = { content: [ { type: 'text', text: JSON.stringify({ components: [ { key: 'test-component', measures: [{ metric: 'coverage', value: '85.4' }], }, ], metrics: [{ key: 'coverage', name: 'Coverage' }], paging: { pageIndex: 1, pageSize: 10, total: 1 }, }), }, ], }; expect(handlerResult.content[0]?.type).toBe('text'); }); it('should mock measuresHistoryHandler implementation', () => { // Mock the metrics array transformation logic const params = { component: 'test-component', metrics: 'coverage', from: '2023-01-01', to: '2023-12-31', }; // Test metrics array conversion const metrics = Array.isArray(params.metrics) ? params.metrics : [params.metrics]; expect(metrics).toEqual(['coverage']); // Test with array input const paramsWithArray = { component: 'test-component', metrics: ['coverage', 'bugs'], from: '2023-01-01', to: '2023-12-31', }; const metricsFromArray = Array.isArray(paramsWithArray.metrics) ? paramsWithArray.metrics : [paramsWithArray.metrics]; expect(metricsFromArray).toEqual(['coverage', 'bugs']); // Mock the handler return structure const handlerResult = { content: [ { type: 'text', text: JSON.stringify({ measures: [ { metric: 'coverage', history: [{ date: '2023-01-01', value: '85.4' }], }, ], paging: { pageIndex: 1, pageSize: 10, total: 1 }, }), }, ], }; expect(handlerResult.content[0]?.type).toBe('text'); }); }); });