UNPKG

@birhaus/test-utils

Version:

BIRHAUS Testing & Validation Framework - Comprehensive testing utilities for cognitive load, accessibility, and BIRHAUS principle compliance

1 lines 22.3 kB
{"version":3,"sources":["../../src/lighthouse/LighthouseValidator.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * BIRHAUS Lighthouse Integration\n * \n * Automated Lighthouse performance and accessibility scoring with BIRHAUS-specific metrics\n * \n * Features:\n * - Lighthouse audit integration\n * - BIRHAUS principle scoring\n * - Cognitive load performance metrics\n * - Spanish-first accessibility scoring\n * - Financial app optimization checks\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// Lighthouse APIs commonly use 'any' types for extensibility\n\nexport interface BirhausLighthouseConfig {\n url: string\n device?: 'desktop' | 'mobile'\n throttling?: 'slow-4g' | 'fast-3g' | 'none'\n \n // BIRHAUS-specific thresholds\n performance?: {\n score?: number\n fcp?: number // First Contentful Paint\n lcp?: number // Largest Contentful Paint\n cls?: number // Cumulative Layout Shift\n fid?: number // First Input Delay\n }\n \n accessibility?: {\n score?: number\n contrastRatio?: number\n keyboardNav?: boolean\n screenReader?: boolean\n }\n \n cognitive?: {\n millerLawCompliance?: boolean\n undoPatterns?: boolean\n spanishFirst?: boolean\n }\n}\n\nexport interface BirhausLighthouseResult {\n url: string\n timestamp: number\n \n // Standard Lighthouse scores\n performance: number\n accessibility: number\n bestPractices: number\n seo: number\n pwa: number\n \n // BIRHAUS-specific scores\n cognitiveLoad: number\n spanishCoverage: number\n undoPatterns: number\n birhausCompliance: number\n \n // Detailed metrics\n metrics: {\n // Performance\n firstContentfulPaint: number\n largestContentfulPaint: number\n cumulativeLayoutShift: number\n firstInputDelay: number\n timeToInteractive: number\n \n // Cognitive load\n navigationItems: number\n formFields: number\n confirmationDialogs: number\n \n // Accessibility\n contrastRatio: number\n missingAltText: number\n keyboardAccessible: boolean\n \n // Spanish coverage\n spanishLabels: number\n bilingualSupport: boolean\n financialTermsTranslated: number\n }\n \n // Recommendations\n recommendations: Array<{\n category: 'performance' | 'accessibility' | 'cognitive' | 'spanish' | 'undo'\n priority: 'high' | 'medium' | 'low'\n title: string\n titleEs: string\n description: string\n descriptionEs: string\n birhausPrinciple?: number\n estimatedImpact: number\n }>\n \n passed: boolean\n overallScore: number\n}\n\nexport class BirhausLighthouseValidator {\n private config: Required<BirhausLighthouseConfig>\n \n constructor(config: BirhausLighthouseConfig) {\n this.config = {\n device: 'desktop',\n throttling: 'fast-3g',\n performance: {\n score: 90,\n fcp: 2000,\n lcp: 3000,\n cls: 0.1,\n fid: 100\n },\n accessibility: {\n score: 95,\n contrastRatio: 4.5,\n keyboardNav: true,\n screenReader: true\n },\n cognitive: {\n millerLawCompliance: true,\n undoPatterns: true,\n spanishFirst: true\n },\n ...config\n }\n }\n \n /**\n * Run comprehensive BIRHAUS Lighthouse audit\n */\n async runAudit(): Promise<BirhausLighthouseResult> {\n try {\n // Run standard Lighthouse audit\n const lighthouseResult = await this.runLighthouseAudit()\n \n // Run BIRHAUS-specific audits\n const birhausResult = await this.runBirhausAudits()\n \n // Combine and calculate scores\n return this.combineResults(lighthouseResult, birhausResult)\n \n } catch (error) {\n console.error('BIRHAUS Lighthouse audit failed:', error)\n throw new Error(`Lighthouse audit failed: ${error}`)\n }\n }\n \n /**\n * Run standard Lighthouse audit\n */\n private async runLighthouseAudit(): Promise<any> {\n // In a real implementation, this would use lighthouse programmatically\n // For now, return mock data\n return {\n lhr: {\n categories: {\n performance: { score: 0.85 },\n accessibility: { score: 0.92 },\n 'best-practices': { score: 0.88 },\n seo: { score: 0.90 },\n pwa: { score: 0.75 }\n },\n audits: {\n 'first-contentful-paint': { numericValue: 1800 },\n 'largest-contentful-paint': { numericValue: 2500 },\n 'cumulative-layout-shift': { numericValue: 0.08 },\n 'first-input-delay': { numericValue: 80 },\n 'interactive': { numericValue: 3200 },\n 'color-contrast': { score: 0.95 },\n 'image-alt': { score: 0.88 }\n }\n }\n }\n }\n \n /**\n * Run BIRHAUS-specific audits\n */\n private async runBirhausAudits(): Promise<any> {\n // These would integrate with our existing BIRHAUS validators\n const page = await this.getPage()\n \n const cognitiveAudit = await this.auditCognitiveLoad(page)\n const spanishAudit = await this.auditSpanishCoverage(page)\n const undoAudit = await this.auditUndoPatterns(page)\n \n return {\n cognitive: cognitiveAudit,\n spanish: spanishAudit,\n undo: undoAudit\n }\n }\n \n /**\n * Audit cognitive load compliance\n */\n private async auditCognitiveLoad(_page: any): Promise<any> {\n // Mock implementation - would use MillersLawValidator\n return {\n score: 0.92,\n navigationItems: 5,\n formFields: 4,\n confirmationDialogs: 0,\n violations: []\n }\n }\n \n /**\n * Audit Spanish coverage\n */\n private async auditSpanishCoverage(_page: any): Promise<any> {\n // Mock implementation - would use SpanishCoverageValidator\n return {\n score: 0.88,\n spanishLabels: 85,\n bilingualSupport: true,\n financialTermsTranslated: 95,\n violations: []\n }\n }\n \n /**\n * Audit undo patterns\n */\n private async auditUndoPatterns(_page: any): Promise<any> {\n // Mock implementation - would use UndoPatternValidator\n return {\n score: 0.95,\n confirmationDialogs: 0,\n undoFunctionality: true,\n violations: []\n }\n }\n \n /**\n * Get page handle for testing\n */\n private async getPage(): Promise<any> {\n // Mock implementation - would return Playwright page or Puppeteer page\n return {}\n }\n \n /**\n * Combine Lighthouse and BIRHAUS results\n */\n // eslint-disable-next-line max-lines-per-function, complexity -- Result aggregation requires comprehensive processing\n private combineResults(lighthouse: any, birhaus: any): BirhausLighthouseResult {\n const lhr = lighthouse.lhr\n \n // Extract Lighthouse scores\n const performance = Math.round((lhr.categories.performance.score || 0) * 100)\n const accessibility = Math.round((lhr.categories.accessibility.score || 0) * 100)\n const bestPractices = Math.round((lhr.categories['best-practices'].score || 0) * 100)\n const seo = Math.round((lhr.categories.seo.score || 0) * 100)\n const pwa = Math.round((lhr.categories.pwa.score || 0) * 100)\n \n // Extract BIRHAUS scores\n const cognitiveLoad = Math.round((birhaus.cognitive.score || 0) * 100)\n const spanishCoverage = Math.round((birhaus.spanish.score || 0) * 100)\n const undoPatterns = Math.round((birhaus.undo.score || 0) * 100)\n \n // Calculate BIRHAUS compliance score\n const birhausCompliance = Math.round(\n (cognitiveLoad + spanishCoverage + undoPatterns) / 3\n )\n \n // Calculate overall score\n const overallScore = Math.round(\n (performance + accessibility + bestPractices + cognitiveLoad + spanishCoverage + undoPatterns) / 6\n )\n \n // Generate recommendations\n const recommendations = this.generateRecommendations(lighthouse, birhaus)\n \n // Determine if audit passed\n const passed = this.evaluatePassingCriteria({\n performance,\n accessibility,\n cognitiveLoad,\n spanishCoverage,\n undoPatterns,\n overallScore\n })\n \n return {\n url: this.config.url,\n timestamp: Date.now(),\n \n // Standard scores\n performance,\n accessibility,\n bestPractices,\n seo,\n pwa,\n \n // BIRHAUS scores\n cognitiveLoad,\n spanishCoverage,\n undoPatterns,\n birhausCompliance,\n \n // Detailed metrics\n metrics: {\n // Performance\n firstContentfulPaint: lhr.audits['first-contentful-paint']?.numericValue || 0,\n largestContentfulPaint: lhr.audits['largest-contentful-paint']?.numericValue || 0,\n cumulativeLayoutShift: lhr.audits['cumulative-layout-shift']?.numericValue || 0,\n firstInputDelay: lhr.audits['first-input-delay']?.numericValue || 0,\n timeToInteractive: lhr.audits['interactive']?.numericValue || 0,\n \n // Cognitive load\n navigationItems: birhaus.cognitive.navigationItems || 0,\n formFields: birhaus.cognitive.formFields || 0,\n confirmationDialogs: birhaus.cognitive.confirmationDialogs || 0,\n \n // Accessibility\n contrastRatio: (lhr.audits['color-contrast']?.score || 0) * 4.5,\n missingAltText: birhaus.accessibility?.missingAltText || 0,\n keyboardAccessible: true,\n \n // Spanish coverage\n spanishLabels: birhaus.spanish.spanishLabels || 0,\n bilingualSupport: birhaus.spanish.bilingualSupport || false,\n financialTermsTranslated: birhaus.spanish.financialTermsTranslated || 0\n },\n \n recommendations,\n passed,\n overallScore\n }\n }\n \n /**\n * Generate improvement recommendations\n */\n // eslint-disable-next-line max-lines-per-function -- Recommendations require comprehensive analysis\n private generateRecommendations(lighthouse: any, birhaus: any): BirhausLighthouseResult['recommendations'] {\n const recommendations: BirhausLighthouseResult['recommendations'] = []\n \n // Performance recommendations\n if (lighthouse.lhr.categories.performance.score < 0.9) {\n recommendations.push({\n category: 'performance',\n priority: 'high',\n title: 'Improve page performance',\n titleEs: 'Mejorar rendimiento de página',\n description: 'Optimize images, reduce bundle size, and improve loading times',\n descriptionEs: 'Optimizar imágenes, reducir tamaño de bundle y mejorar tiempos de carga',\n estimatedImpact: 85\n })\n }\n \n // Cognitive load recommendations\n if (birhaus.cognitive.score < 0.9) {\n recommendations.push({\n category: 'cognitive',\n priority: 'high',\n title: 'Reduce cognitive load',\n titleEs: 'Reducir carga cognitiva',\n description: 'Limit navigation items to 7, reduce form complexity, and eliminate confirmation dialogs',\n descriptionEs: 'Limitar elementos de navegación a 7, reducir complejidad de formularios y eliminar diálogos de confirmación',\n birhausPrinciple: 1,\n estimatedImpact: 90\n })\n }\n \n // Spanish coverage recommendations\n if (birhaus.spanish.score < 0.85) {\n recommendations.push({\n category: 'spanish',\n priority: 'medium',\n title: 'Improve Spanish coverage',\n titleEs: 'Mejorar cobertura en español',\n description: 'Add Spanish labels to all interactive elements and financial terminology',\n descriptionEs: 'Agregar etiquetas en español a todos los elementos interactivos y terminología financiera',\n birhausPrinciple: 7,\n estimatedImpact: 75\n })\n }\n \n // Undo pattern recommendations\n if (birhaus.undo.score < 0.9) {\n recommendations.push({\n category: 'undo',\n priority: 'high',\n title: 'Implement undo patterns',\n titleEs: 'Implementar patrones de deshacer',\n description: 'Replace confirmation dialogs with undo functionality for destructive actions',\n descriptionEs: 'Reemplazar diálogos de confirmación con funcionalidad de deshacer para acciones destructivas',\n birhausPrinciple: 5,\n estimatedImpact: 95\n })\n }\n \n return recommendations.sort((a, b) => {\n const priorityOrder = { high: 3, medium: 2, low: 1 }\n return priorityOrder[b.priority] - priorityOrder[a.priority]\n })\n }\n \n /**\n * Evaluate if audit results meet passing criteria\n */\n private evaluatePassingCriteria(scores: any): boolean {\n return (\n scores.performance >= (this.config.performance?.score || 90) &&\n scores.accessibility >= (this.config.accessibility?.score || 90) &&\n scores.cognitiveLoad >= 85 &&\n scores.spanishCoverage >= 80 &&\n scores.undoPatterns >= 90 &&\n scores.overallScore >= 85\n )\n }\n}\n\n/**\n * Run BIRHAUS Lighthouse audit\n */\nexport async function runBirhausLighthouseAudit(\n url: string,\n config?: Partial<BirhausLighthouseConfig>\n): Promise<BirhausLighthouseResult> {\n const validator = new BirhausLighthouseValidator({ url, ...config })\n return await validator.runAudit()\n}\n\n/**\n * Assert Lighthouse performance meets BIRHAUS standards\n */\nexport async function expectLighthouseScore(\n url: string,\n minScore: number = 85,\n config?: Partial<BirhausLighthouseConfig>\n): Promise<void> {\n const result = await runBirhausLighthouseAudit(url, config)\n \n if (!result.passed || result.overallScore < minScore) {\n const highPriorityRecs = result.recommendations\n .filter(r => r.priority === 'high')\n .map(r => r.titleEs)\n .join(', ')\n \n throw new Error(\n `BIRHAUS Lighthouse audit failed (Score: ${result.overallScore}/${minScore}):\\n\\n` +\n `Performance: ${result.performance}/100\\n` +\n `Accessibility: ${result.accessibility}/100\\n` +\n `Cognitive Load: ${result.cognitiveLoad}/100\\n` +\n `Spanish Coverage: ${result.spanishCoverage}/100\\n` +\n `Undo Patterns: ${result.undoPatterns}/100\\n\\n` +\n `High priority recommendations: ${highPriorityRecs}\\n\\n` +\n `Total recommendations: ${result.recommendations.length}`\n )\n }\n}\n\n"]}