Skip to main content
Glama
coverage-focused.test.ts10.8 kB
/** * Focused tests to improve branch coverage in specific areas */ import { convertColorTool } from '../../src/tools/convert-color'; import { analyzeColorTool } from '../../src/tools/analyze-color'; import { createPaletteHtmlTool } from '../../src/tools/create-palette-html'; import { createColorWheelHtmlTool } from '../../src/tools/create-color-wheel-html'; import { createGradientHtmlTool } from '../../src/tools/create-gradient-html'; import { simulateColorblindnessTool } from '../../src/tools/simulate-colorblindness'; import { optimizeForAccessibilityTool } from '../../src/tools/optimize-for-accessibility'; describe('Coverage Focused Tests', () => { describe('Convert Color Tool - Missing Branches', () => { it('should handle precision validation edge cases', async () => { // Test precision boundary values const result1 = await convertColorTool.handler({ color: '#FF0000', output_format: 'hsl', precision: 11, // Above maximum }); expect(result1.success).toBe(false); const result2 = await convertColorTool.handler({ color: '#FF0000', output_format: 'hsl', precision: -1, // Below minimum }); expect(result2.success).toBe(false); }); it('should handle variable name with CSS/SCSS formats', async () => { const result1 = await convertColorTool.handler({ color: '#FF0000', output_format: 'css-var', variable_name: 'test-color', }); expect(result1.success).toBe(true); const result2 = await convertColorTool.handler({ color: '#FF0000', output_format: 'scss-var', variable_name: 'test-color', }); expect(result2.success).toBe(true); }); it('should handle invalid output formats', async () => { const result = await convertColorTool.handler({ color: '#FF0000', output_format: 'invalid-format' as any, }); expect(result.success).toBe(false); }); }); describe('Analyze Color Tool - Missing Branches', () => { it('should handle specific analysis types', async () => { const result = await analyzeColorTool.handler({ color: '#FF0000', analysis_types: ['brightness'], }); expect(result.success).toBe(true); }); it('should handle empty analysis types array', async () => { const result = await analyzeColorTool.handler({ color: '#FF0000', analysis_types: [], }); expect(result.success).toBe(false); }); it('should handle invalid analysis types', async () => { const result = await analyzeColorTool.handler({ color: '#FF0000', analysis_types: ['invalid-type'] as any, }); expect(result.success).toBe(false); }); }); describe('HTML Tools - Missing Branches', () => { it('should handle palette HTML with different themes', async () => { const result1 = await createPaletteHtmlTool.handler({ palette: ['#FF0000', '#00FF00'], theme: 'dark', }); expect(result1.success).toBe(true); const result2 = await createPaletteHtmlTool.handler({ palette: ['#FF0000', '#00FF00'], theme: 'auto', }); expect(result2.success).toBe(true); }); it('should handle color wheel with different sizes', async () => { const result1 = await createColorWheelHtmlTool.handler({ size: 200, // Minimum }); expect(result1.success).toBe(true); const result2 = await createColorWheelHtmlTool.handler({ size: 1000, // Maximum }); expect(result2.success).toBe(true); }); it('should handle color wheel with harmony highlighting', async () => { const result = await createColorWheelHtmlTool.handler({ show_harmony: true, harmony_type: 'complementary', highlight_colors: ['#FF0000'], }); expect(result.success).toBe(true); }); it('should handle gradient HTML with variations', async () => { const result = await createGradientHtmlTool.handler({ gradient_css: 'linear-gradient(45deg, #FF0000, #0000FF)', variations: true, }); expect(result.success).toBe(true); }); it('should handle gradient HTML with interactive controls', async () => { const result = await createGradientHtmlTool.handler({ gradient_css: 'radial-gradient(circle, #FF0000, #0000FF)', interactive_controls: true, }); expect(result.success).toBe(true); }); }); describe('Accessibility Tools - Missing Branches', () => { it('should handle colorblindness simulation with different severities', async () => { const result1 = await simulateColorblindnessTool.handler({ colors: ['#FF0000', '#00FF00'], type: 'protanopia', severity: 50, }); expect(result1.success).toBe(true); const result2 = await simulateColorblindnessTool.handler({ colors: ['#FF0000', '#00FF00'], type: 'deuteranopia', severity: 0, }); expect(result2.success).toBe(true); }); it('should handle accessibility optimization with different standards', async () => { const result1 = await optimizeForAccessibilityTool.handler({ palette: ['#FF0000', '#00FF00'], use_cases: ['text'], target_standard: 'WCAG_AAA', }); expect(result1.success).toBe(true); const result2 = await optimizeForAccessibilityTool.handler({ palette: ['#FF0000', '#00FF00'], use_cases: ['background'], preserve_hue: false, }); expect(result2.success).toBe(true); }); it('should handle accessibility optimization with preserve brand colors', async () => { const result = await optimizeForAccessibilityTool.handler({ palette: ['#FF0000', '#00FF00', '#0000FF'], use_cases: ['text'], preserve_brand_colors: ['#FF0000'], }); expect(result.success).toBe(true); }); }); describe('Error Handling Branches', () => { it('should handle null/undefined parameters', async () => { const result1 = await convertColorTool.handler(null); expect(result1.success).toBe(false); const result2 = await convertColorTool.handler(undefined); expect(result2.success).toBe(false); }); it('should handle empty objects', async () => { const result = await convertColorTool.handler({}); expect(result.success).toBe(false); }); it('should handle invalid color formats', async () => { const invalidColors = [ 'not-a-color', '#GGGGGG', 'invalid-color-format', 'rgb(a, b, c)', '', ' ', ]; for (const color of invalidColors) { const result = await convertColorTool.handler({ color, output_format: 'rgb', }); expect(result.success).toBe(false); } }); it('should handle palette HTML with invalid parameters', async () => { const result1 = await createPaletteHtmlTool.handler({ palette: [], }); expect(result1.success).toBe(false); const result2 = await createPaletteHtmlTool.handler({ palette: ['invalid-color'], }); expect(result2.success).toBe(false); const result3 = await createPaletteHtmlTool.handler({ palette: ['#FF0000'], layout: 'invalid-layout' as any, }); expect(result3.success).toBe(false); }); }); describe('Parameter Validation Branches', () => { it('should handle various parameter type validations', async () => { // Test non-string color const result1 = await convertColorTool.handler({ color: 123 as any, output_format: 'rgb', }); expect(result1.success).toBe(false); // Test non-string output_format const result2 = await convertColorTool.handler({ color: '#FF0000', output_format: 123 as any, }); expect(result2.success).toBe(false); // Test non-number precision const result3 = await convertColorTool.handler({ color: '#FF0000', output_format: 'hsl', precision: 'invalid' as any, }); expect(result3.success).toBe(false); }); it('should handle array parameter validations', async () => { // Test non-array palette const result1 = await createPaletteHtmlTool.handler({ palette: 'not-an-array' as any, }); expect(result1.success).toBe(false); // Test non-array colors for colorblindness const result2 = await simulateColorblindnessTool.handler({ colors: 'not-an-array' as any, type: 'protanopia', }); expect(result2.success).toBe(false); }); }); describe('Edge Case Values', () => { it('should handle boundary values for numeric parameters', async () => { // Test color wheel size boundaries const result1 = await createColorWheelHtmlTool.handler({ size: 199, // Below minimum }); expect(result1.success).toBe(false); const result2 = await createColorWheelHtmlTool.handler({ size: 1001, // Above maximum }); expect(result2.success).toBe(false); // Test colorblindness severity boundaries const result3 = await simulateColorblindnessTool.handler({ colors: ['#FF0000'], type: 'protanopia', severity: -1, // Below minimum }); expect(result3.success).toBe(false); const result4 = await simulateColorblindnessTool.handler({ colors: ['#FF0000'], type: 'protanopia', severity: 101, // Above maximum }); expect(result4.success).toBe(false); }); it('should handle string length validations', async () => { // Test very long color string const longColor = '#FF0000' + 'a'.repeat(1000); const result = await convertColorTool.handler({ color: longColor, output_format: 'rgb', }); expect(result.success).toBe(false); }); }); describe('Optional Parameter Branches', () => { it('should handle tools with all optional parameters', async () => { const result1 = await createColorWheelHtmlTool.handler({}); expect(result1.success).toBe(true); const result2 = await analyzeColorTool.handler({ color: '#FF0000', }); expect(result2.success).toBe(true); }); it('should handle partial parameter sets', async () => { const result = await createPaletteHtmlTool.handler({ palette: ['#FF0000', '#00FF00'], show_values: true, // Other parameters left as defaults }); expect(result.success).toBe(true); }); }); });

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/keyurgolani/ColorMcp'

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