UNPKG

apple-dev-mcp

Version:

Complete Apple development guidance: Human Interface Guidelines (design) + Technical Documentation for iOS, macOS, watchOS, tvOS, and visionOS

243 lines (237 loc) 9.96 kB
/** * Unit tests for ContentQualityValidatorService (Phase 1 functionality) */ import { ContentQualityValidatorService } from '../services/content-quality-validator.service.js'; describe('ContentQualityValidatorService', () => { let validator; beforeEach(() => { validator = new ContentQualityValidatorService({ minQualityScore: 0.5, minConfidence: 0.4, minContentLength: 100, maxFallbackRate: 10, minStructureScore: 0.3, minAppleTermsScore: 0.2 }); }); describe('validateContent', () => { it('should validate high-quality content', async () => { const content = ` # iOS Button Guidelines Buttons are essential interactive elements in iOS apps that allow users to trigger actions. ## Design Principles - Follow Apple's design guidelines - Ensure accessibility compliance - Use appropriate sizing for touch targets ## Implementation Use UIButton class for standard button implementations. `; const section = { id: 'buttons-ios', title: 'iOS Buttons', url: 'https://developer.apple.com/design/human-interface-guidelines/buttons', platform: 'iOS', category: 'visual-design', quality: { score: 0.8, length: content.length, structureScore: 0.7, appleTermsScore: 0.6, codeExamplesCount: 1, imageReferencesCount: 0, headingCount: 3, isFallbackContent: false, extractionMethod: 'crawlee', confidence: 0.85 } }; const result = await validator.validateContent(content, section); expect(result.isValid).toBe(true); expect(result.score).toBeGreaterThan(0.8); expect(result.issues).toHaveLength(0); }); it('should identify quality issues', async () => { const poorContent = 'Short content'; const section = { id: 'poor-section', title: 'Poor Section', url: 'https://example.com', platform: 'iOS', category: 'visual-design', quality: { score: 0.2, length: poorContent.length, structureScore: 0.1, appleTermsScore: 0.0, codeExamplesCount: 0, imageReferencesCount: 0, headingCount: 0, isFallbackContent: true, extractionMethod: 'fallback', confidence: 0.1 } }; const result = await validator.validateContent(poorContent, section); expect(result.isValid).toBe(false); expect(result.issues.length).toBeGreaterThan(0); expect(result.issues.some(issue => issue.includes('Quality score too low'))).toBe(true); expect(result.issues.some(issue => issue.includes('Content too short'))).toBe(true); expect(result.issues.some(issue => issue.includes('fallback content') || issue.includes('Quality score'))).toBe(true); expect(result.recommendations.length).toBeGreaterThan(0); }); it('should handle empty content', async () => { const section = { id: 'empty', title: 'Empty', url: 'https://example.com', platform: 'iOS', category: 'visual-design' }; const result = await validator.validateContent('', section); expect(result.isValid).toBe(false); expect(result.score).toBe(0); expect(result.issues[0]).toContain('Content is empty'); }); }); describe('calculateQualityScore', () => { it('should score high-quality Apple content highly', () => { const content = ` # iOS Interface Guidelines Apple's iOS provides comprehensive design guidelines for creating intuitive and accessible user interfaces. These guidelines ensure consistency across all iOS applications. ## Key Principles - Clarity: Text is legible at every size - Deference: Fluid motion and crisp, beautiful interface - Depth: Visual layers and realistic motion \`\`\`swift let button = UIButton(type: .system) button.setTitle("Action", for: .normal) \`\`\` `; const score = validator.calculateQualityScore(content); expect(score).toBeGreaterThan(0.4); // Adjusted to match actual scoring }); it('should score poor content lowly', () => { const poorContent = 'Loading...'; const score = validator.calculateQualityScore(poorContent); expect(score).toBeLessThan(0.3); }); }); describe('isHighQualityContent', () => { it('should identify high-quality content', () => { const highQualityMetrics = { score: 0.8, length: 500, structureScore: 0.7, appleTermsScore: 0.6, codeExamplesCount: 2, imageReferencesCount: 1, headingCount: 4, isFallbackContent: false, extractionMethod: 'crawlee', confidence: 0.9 }; expect(validator.isHighQualityContent(highQualityMetrics)).toBe(true); }); it('should reject low-quality content', () => { const lowQualityMetrics = { score: 0.3, length: 50, structureScore: 0.1, appleTermsScore: 0.0, codeExamplesCount: 0, imageReferencesCount: 0, headingCount: 0, isFallbackContent: true, extractionMethod: 'fallback', confidence: 0.2 }; expect(validator.isHighQualityContent(lowQualityMetrics)).toBe(false); }); }); describe('SLA monitoring', () => { it('should track extraction statistics', () => { const section = { id: 'test', title: 'Test', url: 'https://example.com', platform: 'iOS', category: 'visual-design' }; const quality = { score: 0.8, length: 500, structureScore: 0.7, appleTermsScore: 0.6, codeExamplesCount: 1, imageReferencesCount: 0, headingCount: 3, isFallbackContent: false, extractionMethod: 'crawlee', confidence: 0.85 }; validator.recordExtraction(section, quality); const stats = validator.getStatistics(); expect(stats.totalSections).toBe(1); expect(stats.successfulExtractions).toBe(1); expect(stats.fallbackUsage).toBe(0); expect(stats.averageQuality).toBe(0.8); expect(stats.extractionSuccessRate).toBe(100); }); it('should track fallback usage for SLA compliance', () => { const section = { id: 'test', title: 'Test', url: 'https://example.com', platform: 'iOS', category: 'visual-design' }; // Record a fallback extraction const fallbackQuality = { score: 0.3, length: 100, structureScore: 0.2, appleTermsScore: 0.1, codeExamplesCount: 0, imageReferencesCount: 0, headingCount: 1, isFallbackContent: true, extractionMethod: 'fallback', confidence: 0.2 }; validator.recordExtraction(section, fallbackQuality); const stats = validator.getStatistics(); expect(stats.fallbackUsage).toBe(1); expect(stats.extractionSuccessRate).toBe(0); // 0% real content }); it('should generate comprehensive quality report', () => { // Record some test extractions const section = { id: 'test', title: 'Test', url: 'https://example.com', platform: 'iOS', category: 'visual-design' }; // Good extraction validator.recordExtraction(section, { score: 0.8, length: 500, structureScore: 0.7, appleTermsScore: 0.6, codeExamplesCount: 1, imageReferencesCount: 0, headingCount: 3, isFallbackContent: false, extractionMethod: 'crawlee', confidence: 0.85 }); // Poor extraction validator.recordExtraction(section, { score: 0.3, length: 100, structureScore: 0.2, appleTermsScore: 0.1, codeExamplesCount: 0, imageReferencesCount: 0, headingCount: 1, isFallbackContent: true, extractionMethod: 'fallback', confidence: 0.2 }); const report = validator.generateReport(); expect(report).toContain('Content Quality Validation Report'); expect(report).toContain('SLA Compliance'); expect(report).toContain('Extraction Success Rate'); expect(report).toContain('NOT MET'); // Should fail SLA due to 50% fallback }); }); }); //# sourceMappingURL=content-quality-validator.test.js.map