92
Test suites
955
Total tests
955
Passed
0
Failed
100.00%
Pass rate
762.77s
Duration
Test Suites
tests/jest/certificates.test.js
| Test | Status | Duration |
|---|---|---|
| Certificate Data Validation Certificate Count should have exactly 35 certificates | passed | 18ms |
| Certificate Data Validation Certificate Structure all certificates should have required fields | passed | 130ms |
| Certificate Data Validation Certificate Structure all certificate IDs should be unique and sequential | passed | 7ms |
| Certificate Data Validation Certificate Structure all titles should be non-empty strings | passed | 28ms |
| Certificate Data Validation Certificate Structure all categories should be non-empty strings | passed | 35ms |
| Certificate Data Validation File Paths all images should start with "images/" | passed | 35ms |
| Certificate Data Validation File Paths all thumbs should start with "images/thumbs/" | passed | 27ms |
| Certificate Data Validation File Paths image and thumb filenames should match | passed | 23ms |
| Certificate Data Validation File Paths all image files should exist | passed | 18ms |
| Certificate Data Validation File Paths all thumb files should exist | passed | 14ms |
| Certificate Data Validation LinkedIn URL Sources should have certificates from multiple sources | passed | 70ms |
| Certificate Data Validation LinkedIn URL Sources Udemy certificates should have correct URL format | passed | 12ms |
| Certificate Data Validation LinkedIn URL Sources LinkedIn CDN certificates should have correct URL format | passed | 19ms |
| Certificate Data Validation LinkedIn URL Sources Skilljar certificates should have correct URL format | passed | 1ms |
| Certificate Data Validation Certificate Title Uniqueness all certificate titles should be unique | passed | 7ms |
| Certificate Data Validation Category Distribution should have at least 3 different categories | passed | 1ms |
| Certificate Data Validation Category Distribution categories should be properly formatted (capitalized) | passed | 26ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #1 - Introduction to SQL | passed | 13ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #2 - Agentic AI for Developers | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #3 - Cybersecurity at Work (2020) | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #4 - Foundations of Building in Board | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #5 - Automated Tests with Cypress - Advanced | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #6 - Design Elements of Automated Tests | passed | 10ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #7 - Playwright UI + API (10h course) | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #8 - AWS for Developers: DynamoDB | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #9 - Learning Docker | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #10 - Best Practices in Test Automation with Cypress | passed | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #11 - E2E Tests With Cypress | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #12 - Playwright Automation | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #13 - GraphQL Essential Training | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #14 - End-to-End JavaScript Testing with Cypress.io | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #15 - API Testing Foundations | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #16 - Gherkin Language - The Master Guide | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #17 - Learning Selenium | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #18 - Test Automation Foundations | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #19 - Working with Difficult People | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #20 - Automation Selenium WebDriver + Java | passed | 3ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #21 - Mobile Automation: Appium Cucumber Android & iOS + Jenkins | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #22 - Agile Management with Scrum | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #23 - Automation Test with Cypress - Basics | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #24 - Automation Test with Cypress - Intermediary | passed | 4ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #25 - Web Design for Beginners: Real World Coding in HTML & CSS | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #26 - Software Testing: Becoming an Expert | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #27 - Postman Introduction | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #28 - The Python Bible⢠| Everything You Need to Program in Python | passed | 9ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #29 - GitHub Intensive Course | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #30 - Regular Expressions | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #31 - Python for Beginners (Python 3) | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #32 - Cypress - Modern Automation Testing from Scratch + Frameworks | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #33 - Swift 5 Programming For Beginners | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #34 - Certified ISTQB Agile Tester Foundation Level | passed | 15ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #35 - GitHub Ultimate: Master Git and GitHub - Beginner to Expert | passed | 8ms |
tests/jest/js-certificates-unit.test.js
| Test | Status | Duration |
|---|---|---|
| certificates.js - Unit Tests File Structure and Exports file exists and is readable | passed | 45ms |
| certificates.js - Unit Tests File Structure and Exports contains certificate data array | passed | 9ms |
| certificates.js - Unit Tests File Structure and Exports contains CertificateModal class definition | passed | 1ms |
| certificates.js - Unit Tests File Structure and Exports contains getBasePath function | passed | 9ms |
| certificates.js - Unit Tests File Structure and Exports exports to window object | passed | 1ms |
| certificates.js - Unit Tests Certificate Data Validation has exactly 35 certificates | passed | 13ms |
| certificates.js - Unit Tests Certificate Data Validation all certificates have required properties | passed | 172ms |
| certificates.js - Unit Tests Certificate Data Validation all image paths use relative paths without ../ | passed | 45ms |
| certificates.js - Unit Tests Certificate Data Validation all thumb paths are in thumbs folder | passed | 14ms |
| certificates.js - Unit Tests Certificate Data Validation LinkedIn URLs use HTTPS protocol | passed | 16ms |
| certificates.js - Unit Tests Certificate Data Validation all categories are from valid list | passed | 16ms |
| certificates.js - Unit Tests Input Sanitization Logic escapeHtml properly handles special characters | passed | 2ms |
| certificates.js - Unit Tests Input Sanitization Logic validates inputs before processing | passed | 0ms |
| certificates.js - Unit Tests CertificateModal Class Methods has constructor method | passed | 5ms |
| certificates.js - Unit Tests CertificateModal Class Methods has all required methods | passed | 11ms |
| certificates.js - Unit Tests Navigation Logic uses modulo arithmetic for wrap-around | passed | 0ms |
| certificates.js - Unit Tests Navigation Logic handles both forward and backward navigation | passed | 0ms |
| certificates.js - Unit Tests Navigation Logic prevents negative index with + certificates.length | passed | 19ms |
| certificates.js - Unit Tests Error Handling checks if container exists | passed | 1ms |
| certificates.js - Unit Tests Error Handling logs error when container missing | passed | 13ms |
| certificates.js - Unit Tests Error Handling has early return on error | passed | 1ms |
| certificates.js - Unit Tests Error Handling warns when modal not initialized | passed | 1ms |
| certificates.js - Unit Tests Event Handling handles close button click | passed | 1ms |
| certificates.js - Unit Tests Event Handling handles navigation buttons | passed | 0ms |
| certificates.js - Unit Tests Event Handling implements keyboard navigation | passed | 1ms |
| certificates.js - Unit Tests Event Handling closes modal on background click | passed | 0ms |
| certificates.js - Unit Tests Accessibility includes ARIA labels for buttons | passed | 1ms |
| certificates.js - Unit Tests Accessibility implements lazy loading for images | passed | 0ms |
| certificates.js - Unit Tests Accessibility uses semantic button elements | passed | 13ms |
| certificates.js - Unit Tests UI State Management (Disabled Modal) clears active class for visibility | passed | 1ms |
| certificates.js - Unit Tests UI State Management (Disabled Modal) resets body scroll overflow | passed | 0ms |
| certificates.js - Unit Tests UI State Management (Disabled Modal) switches between grid and viewer display | passed | 9ms |
| certificates.js - Unit Tests Code Quality uses strict equality (===) | passed | 0ms |
| certificates.js - Unit Tests Code Quality uses const for immutable values | passed | 13ms |
| certificates.js - Unit Tests Code Quality uses template literals for HTML generation | passed | 1ms |
| certificates.js - Unit Tests Code Quality includes code documentation comments | passed | 12ms |
| certificates.js - Unit Tests Initialization waits for DOMContentLoaded | passed | 1ms |
| certificates.js - Unit Tests Initialization creates global window reference | passed | 0ms |
| certificates.js - Unit Tests Initialization provides fallback helper function | passed | 5ms |
| certificates.js - Unit Tests Initialization logs initialization messages | passed | 1ms |
| certificates.js - Unit Tests Functional Tests - getBasePath returns empty string for root path | passed | 61ms |
| certificates.js - Unit Tests Functional Tests - getBasePath returns ../ for /pages/ path | passed | 11ms |
| certificates.js - Unit Tests Functional Tests - getBasePath returns ../../ for nested /pages/folder/ path | passed | 7ms |
| certificates.js - Unit Tests Functional Tests - escapeHtml escapes HTML special characters | passed | 17ms |
| certificates.js - Unit Tests Functional Tests - escapeHtml handles empty string | passed | 1ms |
| certificates.js - Unit Tests Functional Tests - escapeHtml handles normal text without special chars | passed | 1ms |
| certificates.js - Unit Tests Image Path Handling uses basePath for image sources | passed | 9ms |
| certificates.js - Unit Tests Image Path Handling generates correct paths for thumbnails | passed | 1ms |
| certificates.js - Unit Tests Image Path Handling generates correct paths for full images | passed | 0ms |
| certificates.js - Unit Tests LinkedIn Integration includes LinkedIn verification links | passed | 15ms |
| certificates.js - Unit Tests LinkedIn Integration handles certificates with LinkedIn URLs | passed | 1ms |
| certificates.js - Unit Tests LinkedIn Integration LinkedIn links open in new tab | passed | 0ms |
src/utils/inBrowserTestRunner.test.js
| Test | Status | Duration |
|---|---|---|
| createTestSuites structure exposes every suite and test with its translation keys | passed | 52ms |
| dom-structure suite root mounted fails when #root is missing | passed | 177ms |
| dom-structure suite root mounted fails when #root is empty | passed | 61ms |
| dom-structure suite root mounted reports the number of top-level nodes | passed | 24ms |
| dom-structure suite landmarks lists every missing landmark | passed | 66ms |
| dom-structure suite landmarks reports only the missing one for <header></header><main></main> | passed | 15ms |
| dom-structure suite landmarks reports only the missing one for <nav></nav><footer></footer> | passed | 20ms |
| dom-structure suite landmarks reports only the missing one for <div role="main"></div><div role="contentinfo"></div> | passed | 8ms |
| dom-structure suite landmarks passes when all are present | passed | 6ms |
| dom-structure suite safe links accepts noopener or noreferrer in any case | passed | 17ms |
| dom-structure suite safe links lists at most three insecure hrefs | passed | 18ms |
| dom-structure suite image alt accepts alt or aria-hidden | passed | 27ms |
| dom-structure suite image alt fails on images with neither alt nor aria-hidden="true" | passed | 11ms |
| a11y suite heading hierarchy requires an h1 | passed | 19ms |
| a11y suite heading hierarchy rejects empty or whitespace-only headings | passed | 24ms |
| a11y suite heading hierarchy quotes the first 30 trimmed characters of the h1 | passed | 19ms |
| a11y suite button labels accepts text, aria-label, aria-labelledby or title | passed | 50ms |
| a11y suite button labels treats whitespace-only labels as missing | passed | 22ms |
| a11y suite dialog roles requires aria-modal="true" | passed | 20ms |
| a11y suite dialog roles passes for modal dialogs | passed | 11ms |
| i18n suite initialized fails without a ready instance (null) | passed | 2ms |
| i18n suite initialized fails without a ready instance ({"isInitialized": false}) | passed | 16ms |
| i18n suite initialized reports the current language | passed | 5ms |
| i18n suite supported language accepts en | passed | 2ms |
| i18n suite supported language accepts pt-BR | passed | 1ms |
| i18n suite supported language accepts es | passed | 1ms |
| i18n suite supported language falls back to en without an instance | passed | 8ms |
| i18n suite supported language rejects other languages | passed | 1ms |
| i18n suite missing keys passes when every sample key resolves | passed | 7ms |
| i18n suite missing keys reports keys that echo back or are empty | passed | 7ms |
| i18n suite missing keys reports every key without an instance | passed | 8ms |
| network suite edge asset simulates a pass when fetch is unavailable | passed | 1ms |
| network suite edge asset HEAD-requests the favicon without caching and reports timing | passed | 16ms |
| network suite edge asset accepts a 304 response | passed | 7ms |
| network suite edge asset rejects failing HTTP statuses | passed | 10ms |
| network suite edge asset treats network errors as a completed request | passed | 1ms |
| network suite edge asset tolerates errors without a message | passed | 17ms |
| network suite secure context passes on localhost | passed | 8ms |
| performance suite navigation timing reports TTFB and DOM content loaded | passed | 1ms |
| performance suite navigation timing records a baseline without entries ([]) | passed | 8ms |
| performance suite navigation timing records a baseline without entries (undefined) | passed | 2ms |
| performance suite raf simulates a pass when requestAnimationFrame is unavailable | passed | 1ms |
| performance suite raf passes at exactly the 200ms threshold | passed | 10ms |
| performance suite raf rounds the healthy frame tick | passed | 1ms |
| performance suite raf rejects frames slower than 200ms | passed | 1ms |
| executeTest returns a passed result with the run message and rounded duration | passed | 10ms |
| executeTest falls back to a default message and a minimum 1ms duration | passed | 5ms |
| executeTest returns a failed result with the error message | passed | 1ms |
| executeTest uses a default error and minimum duration when the error has no message | passed | 6ms |
| executeTest falls back to Date.now when performance is unavailable | passed | 1ms |
src/components/test-results/CiMetrics.test.jsx
| Test | Status | Duration |
|---|---|---|
| CiMetrics layout renders three cards with icons and titles | passed | 337ms |
| CiMetrics layout shows spinners while loading | passed | 88ms |
| CiMetrics layout shows empty states without data | passed | 45ms |
| Jest card renders stats, computed rate and report link | passed | 749ms |
| Jest card lists suites with badges and toggles the list | passed | 391ms |
| Jest card prefers an explicit pass rate and falls back on missing counts | passed | 115ms |
| Jest card reports 100% for an empty run | passed | 86ms |
| Jest card rate 95 uses the success tone | passed | 137ms |
| Jest card rate 94.99 uses the warning tone | passed | 69ms |
| Jest card rate 80 uses the warning tone | passed | 89ms |
| Jest card rate 79.99 uses the error tone | passed | 77ms |
| E2E card counts steps across flows | passed | 248ms |
| E2E card renders flows with steps that expand individually | passed | 452ms |
| E2E card falls back to test counts when no flow has steps | passed | 121ms |
| E2E card defaults missing counts and flows to zero | passed | 77ms |
| E2E card uses passed counts when only failures are reported | passed | 78ms |
| Coverage card renders each metric with tone, fraction and bar | passed | 199ms |
| Coverage card scores just below 50% as errors | passed | 146ms |
src/components/Contact.test.jsx
| Test | Status | Duration |
|---|---|---|
| Contact Component renders contact form with correct access key | passed | 1.90s |
| Contact Component renders contact banner and section structure with expected styling and classes | passed | 178ms |
| Contact Component handles successful submission | passed | 790ms |
| Contact Component prevents submission if too fast (bot check) | passed | 345ms |
| Contact Component handles API error (success: false) | passed | 502ms |
| Contact Component handles network error | passed | 425ms |
| Contact Component prevents submission if honeypot is filled (bot check) | passed | 244ms |
| Contact Component logs error when Web3Forms key is not configured | passed | 44ms |
| Contact Component blocks submission until the captcha is solved | passed | 308ms |
| Contact Component blocks submission when the captcha token expires | passed | 554ms |
| Contact Component sends the captcha token and resets the captcha after submitting | passed | 882ms |
src/components/Navbar.test.jsx
| Test | Status | Duration |
|---|---|---|
| Navbar Component marks the link for the current page as active | passed | 1.55s |
| Navbar Component renders brand logo and text | passed | 217ms |
| Navbar Component renders navigation links | passed | 225ms |
| Navbar Component renders social, theme toggle, and CTA links | passed | 203ms |
| Navbar Component toggles theme on click in navbar | passed | 365ms |
| Navbar Component switches language from the compact navbar selector | passed | 833ms |
| Navbar Component accepts onOpenCertificates callback prop | passed | 192ms |
| Navbar Component calls onOpenContact when Send me a message button is clicked | passed | 146ms |
| Navbar Component renders mobile menu toggle button | passed | 130ms |
| Navbar Component toggles mobile menu on click | passed | 697ms |
| Navbar Component closes mobile menu when a nav link is clicked | passed | 621ms |
| Navbar Component closes mobile menu when backdrop is clicked | passed | 573ms |
| Navbar Component closes mobile menu on Escape key | passed | 618ms |
| Navbar Component calculates and sets navigation height | passed | 241ms |
| Navbar Component applies correct styles to mobile menu and overlay when open | passed | 244ms |
| Navbar Component handles ResizeObserver when available | passed | 123ms |
| Navbar Component home link scroll-to-top scrolls to top when already on home and the page is scrolled down | passed | 230ms |
| Navbar Component home link scroll-to-top leaves navigation alone when the page is at the top | passed | 243ms |
| Navbar Component home link scroll-to-top navigates instead of scrolling when on another route | passed | 206ms |
| Navbar Component handles missing ResizeObserver gracefully | passed | 89ms |
src/components/test-results/TrendHistory.test.jsx
| Test | Status | Duration |
|---|---|---|
| TrendHistory renders nothing while loading and an empty state under two runs | passed | 288ms |
| TrendHistory shows the latest run, five sparklines and the unstable list | passed | 760ms |
| TrendHistory hovering a sparkline focuses that run in every tile | passed | 509ms |
| TrendHistory exposes the same data as a table | passed | 426ms |
| TrendHistory details draws exact sparkline paths, areas and markers | passed | 163ms |
| TrendHistory details tiles show the latest run with pass/fail tones | passed | 146ms |
| TrendHistory details hovering picks the nearest run and draws a cursor where data exists | passed | 353ms |
| TrendHistory details ignores hover on a sparkline without layout width | passed | 128ms |
| TrendHistory details lists unstable tests by failure count with their layer | passed | 134ms |
| TrendHistory details says when nothing failed and renders an empty sparkline without data | passed | 117ms |
| TrendHistory details table rows format each metric and date | passed | 184ms |
| TrendHistory details a non-array history shows the empty state | passed | 21ms |
src/components/Articles.filters.test.jsx
| Test | Status | Duration |
|---|---|---|
| Articles stats and listing summarises articles, minutes, venues and tags | passed | 682ms |
| Articles stats and listing lists internal posts first and features only the first card | passed | 196ms |
| Articles stats and listing renders theme tabs with icons and counts | passed | 794ms |
| Articles stats and listing sorts tag pills by priority then alphabetically | passed | 170ms |
| Articles card mapping maps an internal post with defaults derived from its tags | passed | 197ms |
| Articles card mapping prefers markdown metadata and legacy fields when present | passed | 132ms |
| Articles card mapping falls back to Cypress defaults for a bare post | passed | 175ms |
| Articles card mapping maps external articles through translation keys | passed | 134ms |
| Articles card mapping uses localized post fields for the active language | passed | 307ms |
| Articles theme filters Home Assistant tab filters articles and syncs the URL | passed | 1.37s |
| Articles theme filters Cypress tab filters articles and syncs the URL | passed | 725ms |
| Articles theme filters AI & LLM tab filters articles and syncs the URL | passed | 730ms |
| Articles theme filters Architecture & Auth tab filters articles and syncs the URL | passed | 650ms |
| Articles tag filters a tag pill filters, opens the disclosure and updates the URL | passed | 586ms |
| Articles tag filters a home tag also selects the Home Assistant theme | passed | 554ms |
| Articles tag filters cypress tag matches tags containing cypress | passed | 140ms |
| Articles tag filters tags match ignoring whitespace | passed | 108ms |
| Articles tag filters a home tag in the URL selects the Home Assistant theme | passed | 160ms |
| Articles tag filters an explicit theme in the URL wins over a home tag | passed | 198ms |
| Articles tag filters toggling the disclosure keeps it open | passed | 134ms |
| Articles search query "zigbee" matches html, description, title, tags and theme | passed | 334ms |
| Articles search query "SMART" matches html, description, title, tags and theme | passed | 292ms |
| Articles search query "bare" matches html, description, title, tags and theme | passed | 277ms |
| Articles search query "auth0" matches html, description, title, tags and theme | passed | 301ms |
| Articles search query "ai" matches html, description, title, tags and theme | passed | 220ms |
| Articles search search is prefilled from the URL and cleared by the clear button | passed | 235ms |
| Articles search whitespace-only searches do not filter | passed | 195ms |
| Articles search no matches shows the empty state, which clears every filter | passed | 401ms |
| Articles search the empty state names the tag when there is no query | passed | 181ms |
tests/jest/js-certificates-modal.test.js
| Test | Status | Duration |
|---|---|---|
| CertificateModal - Instance Behavior open() method (Disabled) does not add active class to container when modal is disabled | passed | 700ms |
| CertificateModal - Instance Behavior open() method (Disabled) does not set body overflow to hidden when modal is disabled | passed | 448ms |
| CertificateModal - Instance Behavior open() method (Disabled) does not call showGrid when modal is disabled | passed | 362ms |
| CertificateModal - Instance Behavior close() method removes active class from container | passed | 302ms |
| CertificateModal - Instance Behavior close() method restores body overflow | passed | 307ms |
| CertificateModal - Instance Behavior showGrid() method displays grid element | passed | 314ms |
| CertificateModal - Instance Behavior showGrid() method hides viewer element | passed | 277ms |
| CertificateModal - Instance Behavior openCertificate(index) method sets currentIndex to provided index | passed | 295ms |
| CertificateModal - Instance Behavior openCertificate(index) method hides grid and displays viewer | passed | 308ms |
| CertificateModal - Instance Behavior openCertificate(index) method calls updateViewer after setting index | passed | 428ms |
| CertificateModal - Instance Behavior navigate(direction) method increments index when direction is 1 | passed | 314ms |
| CertificateModal - Instance Behavior navigate(direction) method decrements index when direction is -1 | passed | 492ms |
| CertificateModal - Instance Behavior navigate(direction) method wraps forward at end (modulo logic) | passed | 335ms |
| CertificateModal - Instance Behavior navigate(direction) method wraps backward at start (modulo logic) | passed | 297ms |
| CertificateModal - Instance Behavior navigate(direction) method calls updateViewer after navigation | passed | 247ms |
| CertificateModal - Instance Behavior navigate(direction) method handles multiple navigations correctly | passed | 246ms |
| CertificateModal - Instance Behavior updateViewer() method updates image src with certificate image path | passed | 271ms |
| CertificateModal - Instance Behavior updateViewer() method updates image alt text with certificate title | passed | 299ms |
| CertificateModal - Instance Behavior updateViewer() method updates title element with certificate title | passed | 256ms |
| CertificateModal - Instance Behavior updateViewer() method updates category element with certificate category | passed | 300ms |
| CertificateModal - Instance Behavior updateViewer() method updates currentCert counter | passed | 386ms |
| CertificateModal - Instance Behavior updateViewer() method shows LinkedIn button when linkedinUrl exists | passed | 203ms |
| CertificateModal - Instance Behavior updateViewer() method hides LinkedIn button when linkedinUrl is missing | passed | 257ms |
| CertificateModal - Instance Behavior updateViewer() method updates viewFullBtn href with certificate image path | passed | 284ms |
| CertificateModal - Instance Behavior updateViewer() method applies basePath to image src and viewFullBtn | passed | 405ms |
| CertificateModal - Instance Behavior Event listener attachment attachEventListeners is called during init | passed | 461ms |
| CertificateModal - Instance Behavior Event listener attachment close button triggers close() | passed | 197ms |
| CertificateModal - Instance Behavior Event listener attachment next button navigates forward | passed | 227ms |
| CertificateModal - Instance Behavior Event listener attachment prev button navigates backward | passed | 239ms |
| CertificateModal - Instance Behavior Event listener attachment backToGrid button shows grid | passed | 203ms |
| CertificateModal - Instance Behavior Event listener attachment clicking modal background closes modal | passed | 182ms |
| CertificateModal - Instance Behavior Event listener attachment Escape key closes active modal | passed | 215ms |
| CertificateModal - Instance Behavior Event listener attachment navigate methods work when called directly | passed | 193ms |
| CertificateModal - Instance Behavior Event listener attachment showGrid method works when called directly | passed | 231ms |
| CertificateModal - Instance Behavior Event listener attachment keyboard events ignored when modal is not active | passed | 233ms |
| CertificateModal - Instance Behavior Render grid view grid items are created for certificates | passed | 225ms |
| CertificateModal - Instance Behavior Render grid view grid items are clickable to open certificate | passed | 282ms |
| CertificateModal - Instance Behavior Constructor edge cases returns early when modal container not found | passed | 219ms |
| CertificateModal - Instance Behavior Constructor edge cases initializes certificates array from module | passed | 253ms |
tests/jest/security-improvements.test.js
| Test | Status | Duration |
|---|---|---|
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality has file-level JSDoc documentation | passed | 64ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality defines Certificate typedef | passed | 10ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality getBasePath has JSDoc with examples | passed | 7ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality escapeHtml has JSDoc with security note | passed | 1ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality certificates array has JSDoc | passed | 2ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality CertificateModal class has JSDoc | passed | 5ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality constructor has parameter documentation | passed | 2ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality all major methods have JSDoc | passed | 8ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality key public methods marked with @public | passed | 1ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality methods have clear visibility documentation | passed | 8ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality methods with parameters have @param documentation | passed | 3ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality methods have @returns documentation | passed | 1ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality complex methods have @example sections | passed | 0ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization escapeHtml function is defined | passed | 1ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization uses createElement for safe escaping | passed | 7ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization escapeHtml is used in generateCertificateGrid | passed | 1ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization alt attributes use escapeHtml | passed | 9ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization updateViewer uses textContent for XSS safety | passed | 1ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization does not use innerHTML for user content | passed | 4ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading thumbnail images have loading="lazy" attribute | passed | 3ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading images have decoding="async" for performance | passed | 0ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading grid images have both lazy loading and async decoding | passed | 1ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading main viewer image has lazy loading | passed | 7ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading main viewer image has async decoding | passed | 0ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading all img tags use performance attributes | passed | 0ms |
| Code Documentation and Security Enhancements Code Quality Standards and Best Practices consistent JSDoc formatting | passed | 33ms |
| Code Documentation and Security Enhancements Code Quality Standards and Best Practices no TODO or FIXME comments | passed | 0ms |
| Code Documentation and Security Enhancements Code Quality Standards and Best Practices security comments are present | passed | 1ms |
| Code Documentation and Security Enhancements Code Quality Standards and Best Practices performance comments are present | passed | 9ms |
| Code Documentation and Security Enhancements Overall Documentation Coverage and Completeness all JavaScript files have JSDoc | passed | 0ms |
| Code Documentation and Security Enhancements Overall Documentation Coverage and Completeness documentation is comprehensive | passed | 13ms |
src/App.test.jsx
| Test | Status | Duration |
|---|---|---|
| App Component renders home route components | passed | 298ms |
| App Component renders the home page as hero, shipped, stack, then experience with nothing collapsible | passed | 107ms |
| App Component renders articles route | passed | 65ms |
| App Component renders side-projects route | passed | 69ms |
| App Component renders frameworks route | passed | 131ms |
| App Component renders test-results route | passed | 103ms |
| App Component opens and closes Certificates Modal via Navbar | passed | 202ms |
| App Component Background Gradient Effect body has gradient background applied | passed | 305ms |
| App Component Background Gradient Effect gradient contains blue-ish colors | passed | 74ms |
| App Component Background Gradient Effect background attachment is fixed for all routes | passed | 114ms |
| App Component Background Gradient Effect gradient persists across SPA navigation | passed | 132ms |
| App Component Background Gradient Effect App component has minimum height of 100vh | passed | 69ms |
| App Component Background Gradient Effect gradient effect is applied to all page routes | passed | 142ms |
tests/jest/js-certificates-functional.test.js
| Test | Status | Duration |
|---|---|---|
| certificates.js - Module Exports getBasePath function exports getBasePath function | passed | 95ms |
| certificates.js - Module Exports getBasePath function returns empty string for root path | passed | 45ms |
| certificates.js - Module Exports getBasePath function returns ../../ for /pages/something/ path (matches deep regex) | passed | 24ms |
| certificates.js - Module Exports getBasePath function returns ../../ for nested /pages/folder/ path | passed | 25ms |
| certificates.js - Module Exports getBasePath function returns ../ for /pages/ root listing | passed | 19ms |
| certificates.js - Module Exports getBasePath function handles root path with index.html | passed | 37ms |
| certificates.js - Module Exports escapeHtml function exports escapeHtml function | passed | 74ms |
| certificates.js - Module Exports escapeHtml function escapes < and > characters | passed | 49ms |
| certificates.js - Module Exports escapeHtml function escapes complete script tag | passed | 30ms |
| certificates.js - Module Exports escapeHtml function escapes ampersands | passed | 26ms |
| certificates.js - Module Exports escapeHtml function escapes quotes via textContent semantics | passed | 19ms |
| certificates.js - Module Exports escapeHtml function handles empty string | passed | 32ms |
| certificates.js - Module Exports escapeHtml function handles regular text without special chars | passed | 24ms |
| certificates.js - Module Exports escapeHtml function handles multiple special characters | passed | 26ms |
| certificates.js - Module Exports certificates data exports certificates array | passed | 27ms |
| certificates.js - Module Exports certificates data has exactly 35 certificates | passed | 24ms |
| certificates.js - Module Exports certificates data all certificates have required properties | passed | 280ms |
| certificates.js - Module Exports certificates data certificate IDs are sequential from 1 to 35 | passed | 49ms |
| certificates.js - Module Exports certificates data all image paths start with images/ | passed | 87ms |
| certificates.js - Module Exports certificates data all certificates have valid categories | passed | 47ms |
| certificates.js - Module Exports certificates data LinkedURL URLs use HTTPS when present | passed | 37ms |
| certificates.js - Module Exports CertificateModal class exports CertificateModal class | passed | 30ms |
| certificates.js - Module Exports CertificateModal class can instantiate CertificateModal | passed | 21ms |
| certificates.js - Module Exports CertificateModal class CertificateModal has expected methods | passed | 23ms |
| certificates.js - Module Exports CertificateModal class CertificateModal initializes currentIndex to 0 | passed | 24ms |
src/components/LiveTestRunner.test.jsx
| Test | Status | Duration |
|---|---|---|
| LiveTestRunner Component renders in initial idle state with run button and test stats | passed | 900ms |
| LiveTestRunner Component shows dashes instead of green zeros before the first run | passed | 132ms |
| LiveTestRunner Component executes all tests when run button is clicked | passed | 5.13s |
| LiveTestRunner Component filters tests by status pills | passed | 188ms |
| LiveTestRunner Component suite list is hidden until revealed | passed | 544ms |
| LiveTestRunner Component suites start collapsed and toggle on click | passed | 396ms |
| LiveTestRunner Component offers collapse all after a run, then expand all again | passed | 4.18s |
| LiveTestRunner Component running the suite expands every suite | passed | 409ms |
| LiveTestRunner Component passes WAI-ARIA dialog compliance when CookieConsent banner is active in the DOM | passed | 67ms |
| LiveTestRunner with deterministic results idle state shows placeholders, empty progress and the run affordance | passed | 137ms |
| LiveTestRunner with deterministic results revealed suites list idle tests with translated names and zero counts | passed | 214ms |
| LiveTestRunner with deterministic results a mixed run reports failures everywhere | passed | 1.55s |
| LiveTestRunner with deterministic results details panels show output and assertion errors | passed | 1.81s |
| LiveTestRunner with deterministic results filters hide non-matching tests and empty suites | passed | 1.75s |
| LiveTestRunner with deterministic results passed filter before any run hides every suite but all keeps them | passed | 218ms |
| LiveTestRunner with deterministic results an all-green run shows the verified badge and success progress | passed | 1.17s |
| LiveTestRunner with deterministic results collapse all toggles the ghost button state | passed | 1.65s |
| LiveTestRunner with deterministic results shows the running state while a test is in flight | passed | 1.85s |
| LiveTestRunner with deterministic results unmounting mid-run stops executing further tests | passed | 253ms |
src/components/Hero.test.jsx
| Test | Status | Duration |
|---|---|---|
| Hero Component Profile Section displays profile image with correct attributes | passed | 481ms |
| Hero Component Profile Section displays correct name | passed | 691ms |
| Hero Component Profile Section displays professional title | passed | 141ms |
| Hero Component Profile Section displays location | passed | 173ms |
| Hero Component Hero pitch and CTAs renders the portrait without an overlaid stat badge | passed | 163ms |
| Hero Component Hero pitch and CTAs renders primary homepage CTAs | passed | 354ms |
| Hero Component Hero pitch and CTAs renders proof stats by the numbers | passed | 227ms |
| Hero Component Hero pitch and CTAs calls onOpenContact when send message is clicked | passed | 279ms |
| Hero Component Hero pitch and CTAs keeps the hero to two columns: claim and portrait | passed | 201ms |
| Hero Component CI run log shows the last run as green with real readouts | passed | 797ms |
| Hero Component CI run log turns red and counts failures across suites | passed | 290ms |
| Hero Component CI run log renders live badge and mutation score row when mutation data is present | passed | 387ms |
| Hero portrait follows the document theme uses the white-backdrop headshot when <html data-theme="light"> | passed | 102ms |
| Hero portrait follows the document theme swaps the headshot live when the theme toggles | passed | 276ms |
src/components/Articles.test.jsx
| Test | Status | Duration |
|---|---|---|
| Articles Component displays Articles banner and themes | passed | 1.78s |
| Articles Component displays article cards including in-depth markdown and external articles | passed | 554ms |
| Articles Component filters by Home Assistant theme | passed | 514ms |
| Articles Component filters by Cypress theme | passed | 854ms |
| Articles Component filters by search input | passed | 538ms |
| Articles Component renders translated follow card copy | passed | 294ms |
| Articles Component Hasura GraphQL Medium article link should be correct | passed | 512ms |
| Articles Component Auth0 LinkedIn article link should be correct | passed | 468ms |
| Articles Component Cyprompt AI Dev.to article link should be correct | passed | 419ms |
| Articles Component Cyprompt article card should have correct tags | passed | 518ms |
| Articles Component Cyprompt article shows its cover art without the icon plate on top | passed | 493ms |
| Articles Component Global Hooks login article link should be correct | passed | 620ms |
| Articles Component Global Hooks article card should have correct tags | passed | 544ms |
| Articles Component Cypress 16 migration article should render with the correct link and metadata | passed | 526ms |
| Articles Component Home Assistant article points directly to dev.to | passed | 548ms |
| Articles Component Restored Cypress session article points directly to dev.to | passed | 464ms |
src/components/hooks/useTheme.test.jsx
| Test | Status | Duration |
|---|---|---|
| useTheme hook defaults to dark theme when no saved preference exists | passed | 141ms |
| useTheme hook respects saved light theme from localStorage | passed | 42ms |
| useTheme hook follows OS prefers-color-scheme: light when nothing is stored | passed | 31ms |
| useTheme hook stays dark when the OS states no preference | passed | 21ms |
| useTheme hook a stored choice outranks the OS preference | passed | 11ms |
| useTheme hook toggles theme and updates localStorage and DOM | passed | 43ms |
| useTheme hook setTheme updates directly to light or dark | passed | 38ms |
| useTheme hook applyThemeToDocument updates meta theme-color tag if present | passed | 8ms |
| useDocumentTheme reads the theme stamped on <html> | passed | 77ms |
| useDocumentTheme falls back to dark when nothing is stamped or stored | passed | 24ms |
| useDocumentTheme re-renders when applyThemeToDocument flips the attribute | passed | 144ms |
| useDocumentTheme stops observing after unmount | passed | 24ms |
src/components/SideProjects.test.jsx
| Test | Status | Duration |
|---|---|---|
| SideProjects (tabbed project showcases) renders one tab per project with LoopBeat selected by default | passed | 861ms |
| SideProjects (tabbed project showcases) shows only the LoopBeat showcase by default | passed | 633ms |
| SideProjects (tabbed project showcases) switches to the QA Forge showcase when its tab is clicked | passed | 790ms |
| SideProjects (tabbed project showcases) switches to the HELLGATE showcase when its tab is clicked | passed | 1.04s |
| SideProjects (tabbed project showcases) updates the URL hash when switching projects | passed | 1.29s |
| SideProjects (tabbed project showcases) opens directly on the project named in the URL hash | passed | 367ms |
| SideProjects (tabbed project showcases) moves between projects with arrow keys | passed | 734ms |
| SideProjects (tabbed project showcases) renders all 6 LoopBeat architecture pillars | passed | 508ms |
| SideProjects (tabbed project showcases) renders all 6 QA Forge tool pillars | passed | 1.10s |
| SideProjects (tabbed project showcases) renders all 6 HELLGATE architecture pillars | passed | 989ms |
| SideProjects (tabbed project showcases) mentions the key services and details of each project | passed | 1.51s |
| SideProjects (tabbed project showcases) renders the LoopBeat live app link opening securely in a new tab | passed | 278ms |
| SideProjects (tabbed project showcases) renders the QA Forge live app link opening securely in a new tab | passed | 416ms |
| SideProjects (tabbed project showcases) renders the HELLGATE live app link opening securely in a new tab | passed | 451ms |
| SideProjects (tabbed project showcases) renders 2 screenshots that fall back to a placeholder on load error | passed | 357ms |
| SideProjects (tabbed project showcases) opens the screenshot gallery when a screenshot is clicked | passed | 268ms |
| SideProjects (tabbed project showcases) hero preview falls back to a placeholder when the image is missing | passed | 291ms |
src/components/blog/Blog.test.jsx
| Test | Status | Duration |
|---|---|---|
| Blog Components BlogIndex renders blog header and articles | passed | 649ms |
| Blog Components BlogIndex filters articles by search input | passed | 311ms |
| Blog Components BlogIndex shows locale month and reading time on cards | passed | 167ms |
| Blog Components BlogIndex filters articles by tag button | passed | 796ms |
| Blog Components BlogIndex renders brand badges on post cards | passed | 147ms |
| Blog Components BlogPost renders single blog post with content and TOC | passed | 1.65s |
| Blog Components BlogPost renders Home Assistant blog post with cover image and content | passed | 334ms |
| Blog Components BlogPost renders Not Found state for invalid slug or unpublished draft | passed | 44ms |
| Blog Components blogIcons returns Home Assistant brand metadata for homeassistant posts | passed | 11ms |
| Blog Components blogIcons returns Cypress brand metadata for cypress posts | passed | 9ms |
| Blog Components blogIcons returns tag icons for known tags and null for unknown tags | passed | 1ms |
src/components/frameworks/AdvancedTesting.test.jsx
| Test | Status | Duration |
|---|---|---|
| AdvancedTesting Shared endpoints card renders "Endpoints Tested" label | passed | 470ms |
| AdvancedTesting Shared endpoints card renders 3 endpoint badges as links | passed | 788ms |
| AdvancedTesting API cards grid renders 3 API cards | passed | 114ms |
| AdvancedTesting k6 card renders title and subtitle | passed | 155ms |
| AdvancedTesting k6 card renders stats | passed | 193ms |
| AdvancedTesting k6 card renders 4 feature tiles | passed | 192ms |
| AdvancedTesting k6 card renders GitHub link | passed | 243ms |
| AdvancedTesting Jest + Supertest card renders title and subtitle | passed | 138ms |
| AdvancedTesting Jest + Supertest card renders stats | passed | 178ms |
| AdvancedTesting Jest + Supertest card renders 4 feature tiles | passed | 152ms |
| AdvancedTesting Jest + Supertest card renders GitHub link | passed | 289ms |
| AdvancedTesting Postman / Newman card renders title and subtitle | passed | 145ms |
| AdvancedTesting Postman / Newman card renders stats | passed | 105ms |
| AdvancedTesting Postman / Newman card renders 4 feature tiles | passed | 258ms |
| AdvancedTesting Postman / Newman card renders GitHub link | passed | 225ms |
| AdvancedTesting All CTA links all 3 API links open in new tab securely | passed | 267ms |
| AdvancedTesting All CTA links all CTA links have primary hover class | passed | 331ms |
| AdvancedTesting All CTA links renders live report links for all API repos | passed | 155ms |
| AdvancedTesting Theme CSS variables no card inlines its own accent, so every card reads as one palette | passed | 72ms |
tests/jest/csp-validation.test.js
| Test | Status | Duration |
|---|---|---|
| CSP Hash Generation should generate csp-hashes.json during build | passed | 30ms |
| CSP Hash Generation should generate correct SHA-256 hash for JSON-LD script | passed | 30ms |
| CSP Hash Generation should inject CSP hash into _headers file | passed | 18ms |
| CSP Hash Generation should NOT contain unsafe-inline in script-src | passed | 16ms |
| CSP Hash Generation should contain required CSP directives | passed | 12ms |
| CSP Hash Generation should allow required external script sources | passed | 27ms |
| CSP Hash Generation should allow hCaptcha for the contact form | passed | 16ms |
| CSP Hash Generation should keep fonts and styles first-party | passed | 1ms |
| CSP Hash Generation should temporarily allow unsafe-inline for styles | passed | 10ms |
| CSP Implementation Files should have gtag-init.js in dist/js/ | passed | 12ms |
| CSP Implementation Files should have vite-plugin-csp-hash.js at root | passed | 1ms |
| CSP Implementation Files should have generate-csp-headers.js script | passed | 0ms |
tests/jest/gtag-init.test.js
| Test | Status | Duration |
|---|---|---|
| gtag-init.js - Google Analytics Initialization File Loading and Structure file exists and can be loaded | passed | 36ms |
| gtag-init.js - Google Analytics Initialization File Loading and Structure contains CSP compliance comment | passed | 13ms |
| gtag-init.js - Google Analytics Initialization DataLayer Initialization initializes window.dataLayer as empty array when undefined | passed | 43ms |
| gtag-init.js - Google Analytics Initialization DataLayer Initialization preserves existing dataLayer if already defined | passed | 24ms |
| gtag-init.js - Google Analytics Initialization gtag Function creates window.gtag function | passed | 10ms |
| gtag-init.js - Google Analytics Initialization gtag Function gtag pushes arguments to dataLayer | passed | 12ms |
| gtag-init.js - Google Analytics Initialization gtag Function gtag handles multiple calls | passed | 16ms |
| gtag-init.js - Google Analytics Initialization gtag Function gtag preserves all arguments passed to it | passed | 2ms |
| gtag-init.js - Google Analytics Initialization Integration with Google Analytics follows Google Analytics initialization pattern | passed | 8ms |
| gtag-init.js - Google Analytics Initialization Integration with Google Analytics supports event tracking | passed | 10ms |
| gtag-init.js - Google Analytics Initialization Integration with Google Analytics supports custom parameters | passed | 64ms |
| gtag-init.js - Google Analytics Initialization CSP Compliance does not use eval or Function constructor | passed | 13ms |
| gtag-init.js - Google Analytics Initialization CSP Compliance does not contain inline event handlers | passed | 10ms |
src/components/frameworks/FrameworkCard.test.jsx
| Test | Status | Duration |
|---|---|---|
| FrameworkCard renders card title and subtitle from i18n | passed | 407ms |
| FrameworkCard renders the themed icon for playwright | passed | 94ms |
| FrameworkCard renders only the first 3 stats | passed | 112ms |
| FrameworkCard renders only the first 6 highlights | passed | 154ms |
| FrameworkCard renders CTA link with correct attributes | passed | 424ms |
| FrameworkCard renders secondary live report CTA when provided | passed | 243ms |
| FrameworkCard does not render live report CTA when secondaryCta is omitted | passed | 161ms |
| FrameworkCard renders feature icons from framework metadata | passed | 74ms |
| FrameworkCard leaves the accent to the stylesheet instead of inlining a per-card hue | passed | 73ms |
| FrameworkCard themes uses cypress theme for cypress id | passed | 95ms |
| FrameworkCard themes gives the Cucumber BDD card its own icon | passed | 68ms |
| FrameworkCard themes uses selenium theme for selenium id | passed | 68ms |
| FrameworkCard themes falls back to playwright theme for unknown id | passed | 67ms |
| FrameworkCard icons renders the CTA icon inside the View on GitHub link | passed | 81ms |
| FrameworkCard icons renders the secondary CTA icon inside the Live Report link | passed | 141ms |
| FrameworkCard icons renders every feature icon from metadata | passed | 126ms |
| FrameworkCard icons renders all icons as decorative material icons | passed | 86ms |
src/components/CookieConsent.test.jsx
| Test | Status | Duration |
|---|---|---|
| CookieConsent Component renders banner when no cookie is present | passed | 390ms |
| CookieConsent Component does not render banner when cookie is already set | passed | 32ms |
| CookieConsent Component sets cookie and initializes GA on accept | passed | 213ms |
| CookieConsent Component sets cookie and does not initialize GA on decline | passed | 102ms |
| CookieConsent Component checks if running in production environment | passed | 79ms |
| CookieConsent Component tracks consent acceptance event with gtag | passed | 135ms |
| CookieConsent Component does not reinitialize analytics if gtag already exists | passed | 120ms |
| CookieConsent Component marks the page while the banner is visible so the report FAB can move up | passed | 33ms |
| CookieConsent Component clears banner offset styles after accepting cookies | passed | 77ms |
| CookieConsent Component clears banner offset styles after declining cookies | passed | 92ms |
src/components/Frameworks.test.jsx
| Test | Status | Duration |
|---|---|---|
| Frameworks Component renders main title and description | passed | 1.29s |
| Frameworks Component Shared saucedemo.com target card renders saucedemo.com badge | passed | 676ms |
| Frameworks Component Shared saucedemo.com target card saucedemo.com badge links to the site | passed | 1.43s |
| Frameworks Component Shared saucedemo.com target card renders Testing label | passed | 663ms |
| Frameworks Component renders correct number of framework cards renders 9 framework cards and 12 total GitHub links across all sections | passed | 1.38s |
| Frameworks Component renders correct number of framework cards renders 11 live report links for repos that publish HTML reports | passed | 1.29s |
| Frameworks Component renders correct number of framework cards selenium JUnit card omits live report CTA | passed | 656ms |
| Frameworks Component Playwright Section renders card title and subtitle | passed | 650ms |
| Frameworks Component Playwright Section renders stat badges | passed | 759ms |
| Frameworks Component Playwright Section renders all 6 highlights | passed | 1.12s |
| Frameworks Component Playwright Section renders View on GitHub CTA link with correct href | passed | 848ms |
| Frameworks Component Cypress TypeScript Section renders card title and subtitle | passed | 542ms |
| Frameworks Component Cypress TypeScript Section renders stat badges | passed | 830ms |
| Frameworks Component Cypress TypeScript Section renders all 6 highlights | passed | 1.15s |
| Frameworks Component Cypress TypeScript Section renders CTA link with correct href | passed | 859ms |
| Frameworks Component Cypress BDD Section renders card title and subtitle | passed | 738ms |
| Frameworks Component Cypress BDD Section renders stat badges | passed | 819ms |
| Frameworks Component Cypress BDD Section renders all 6 highlights | passed | 926ms |
| Frameworks Component Cypress BDD Section renders CTA link with correct href | passed | 725ms |
| Frameworks Component Selenium JUnit Section renders card title and subtitle | passed | 453ms |
| Frameworks Component Selenium JUnit Section renders stat badges | passed | 724ms |
| Frameworks Component Selenium JUnit Section renders all 6 highlights | passed | 1.21s |
| Frameworks Component Selenium JUnit Section renders CTA link with correct href | passed | 1.02s |
| Frameworks Component Selenium TestNG Section renders card title and subtitle | passed | 633ms |
| Frameworks Component Selenium TestNG Section renders stat badges | passed | 532ms |
| Frameworks Component Selenium TestNG Section renders all 6 highlights | passed | 872ms |
| Frameworks Component Selenium TestNG Section renders CTA link with correct href | passed | 981ms |
| Frameworks Component API & Performance Testing Section renders section header and description | passed | 624ms |
| Frameworks Component API & Performance Testing Section renders shared endpoints card with label | passed | 637ms |
| Frameworks Component API & Performance Testing Section renders endpoint badges as links with correct hrefs | passed | 1.35s |
| Frameworks Component API & Performance Testing Section renders k6 card title, subtitle, stats, and highlights | passed | 1.10s |
| Frameworks Component API & Performance Testing Section renders Supertest card title, subtitle, stats, and highlights | passed | 1.22s |
| Frameworks Component API & Performance Testing Section renders Postman card title, subtitle, stats, and highlights | passed | 983ms |
| Frameworks Component API & Performance Testing Section renders View on GitHub links for all 3 API repos with correct hrefs | passed | 712ms |
| Frameworks Component API & Performance Testing Section all API CTA links open in new tab | passed | 749ms |
| Frameworks Component AI & LLM Testing Section renders section header and AI LLM cards | passed | 379ms |
| Frameworks Component AI & LLM Testing Section renders correct GitHub repository and Live Report links for AI LLM examples | passed | 947ms |
| Frameworks Component Contract Testing Section renders section header and Contract Testing cards | passed | 880ms |
| Frameworks Component Contract Testing Section renders correct GitHub repository and Live Report links for Contract Testing examples | passed | 1.34s |
| Frameworks Component Legacy E2E Testing Examples Section renders Legacy E2E section header and moved Selenium cards | passed | 878ms |
src/components/sideprojects/ScreenshotGallery.test.jsx
| Test | Status | Duration |
|---|---|---|
| ScreenshotGallery renders screenshots as zoomable buttons | passed | 727ms |
| ScreenshotGallery opens a zoomed gallery dialog when a screenshot is clicked | passed | 410ms |
| ScreenshotGallery navigates between screenshots in the gallery | passed | 395ms |
| ScreenshotGallery supports arrow-key navigation inside the gallery | passed | 353ms |
| ScreenshotGallery closes the gallery with Escape, close button, and backdrop click | passed | 518ms |
| ScreenshotGallery falls back to a placeholder and removes the zoom button when an image fails | passed | 124ms |
src/components/blog/blogIcons.test.jsx
| Test | Status | Duration |
|---|---|---|
| blogIcons utility getPostBrand returns Cypress brand when tags, slug, title include cypress or cypressDevTo is true | passed | 20ms |
| blogIcons utility getPostBrand returns Home Assistant brand when tags, slug, or title match | passed | 13ms |
| blogIcons utility getPostBrand returns TypeScript brand when tags or slug match | passed | 17ms |
| blogIcons utility getPostBrand returns Claude brand when tags or slug match | passed | 35ms |
| blogIcons utility getPostBrand returns Automation brand when tags include automation | passed | 6ms |
| blogIcons utility getPostBrand falls back to QA & Testing brand for unknown topics or empty objects | passed | 8ms |
| blogIcons utility getTagIcon returns corresponding icon component for known tag names | passed | 9ms |
| blogIcons utility getTagIcon returns null for unrecognized tags or falsy values | passed | 4ms |
src/components/sideprojects/SideProjects.data.test.js
| Test | Status | Duration |
|---|---|---|
| sideProjectsList lists all showcased projects in order | passed | 22ms |
| sideProjectsList LoopBeat exposes the fields the showcase needs | passed | 81ms |
| sideProjectsList QA Forge exposes the fields the showcase needs | passed | 23ms |
| sideProjectsList HELLGATE exposes the fields the showcase needs | passed | 62ms |
| loopBeatStructure exposes core identity fields | passed | 1ms |
| loopBeatStructure has a primary external link | passed | 15ms |
| loopBeatStructure covers the expected architecture pillars | passed | 0ms |
| loopBeatStructure describes the full storage pipeline | passed | 1ms |
| loopBeatStructure lists app screenshots under public/images/loopbeat | passed | 14ms |
| qaForgeStructure exposes core identity fields | passed | 1ms |
| qaForgeStructure has a primary external link to the live app | passed | 12ms |
| qaForgeStructure covers the expected tool pillars | passed | 1ms |
| qaForgeStructure describes the full URL-to-suite pipeline | passed | 8ms |
| qaForgeStructure lists app screenshots under public/images/qaforge | passed | 1ms |
| hellGateStructure exposes core identity fields | passed | 0ms |
| hellGateStructure has a primary external link to the live app | passed | 1ms |
| hellGateStructure covers the expected architecture pillars | passed | 1ms |
| hellGateStructure describes the full click-to-play pipeline | passed | 0ms |
| hellGateStructure lists app screenshots under public/images/hellgate | passed | 1ms |
src/components/TestResults.test.jsx
| Test | Status | Duration |
|---|---|---|
| TestResults page renders the page claim and the eight numbered sections | passed | 3.80s |
| TestResults page shows the mutation score readout and empty states for the new sections | passed | 3.82s |
| TestResults page shows the failing count on the status plate and the run metadata | passed | 2.60s |
| TestResults page reports all green when nothing failed | passed | 2.25s |
| TestResults page displays Jest metrics and expands the suite list | passed | 1.82s |
| TestResults page displays E2E metrics computed from steps and expands flows into steps | passed | 2.23s |
| TestResults page displays coverage metrics | passed | 2.53s |
| TestResults page links every report to its static HTML page | passed | 2.49s |
| TestResults page renders four highlighted code samples labelled with their file paths | passed | 1.72s |
| TestResults page falls back to the bundled E2E snapshot when the Gist fetch fails | passed | 2.41s |
| TestResults page shows the empty states when neither Gist nor snapshot has data | passed | 2.44s |
| TestResults page loads test-data.js when the snapshot is not preloaded | passed | 2.27s |
| TestResults page reports a load failure when test-data.js cannot be fetched | passed | 1.72s |
src/components/ErrorBoundary.test.jsx
| Test | Status | Duration |
|---|---|---|
| ErrorBoundary Component renders children when there is no error | passed | 157ms |
| ErrorBoundary Component renders error UI for standard unexpected Error with message and technical details | passed | 809ms |
| ErrorBoundary Component renders specific guidance message when an asset load error occurs | passed | 383ms |
| ErrorBoundary Component handles Error without message and non-Error objects correctly | passed | 108ms |
| ErrorBoundary Component handles reload page button click | passed | 265ms |
| ErrorBoundary Component handles return to home button click | passed | 144ms |
| ErrorBoundary Component displays componentStack in development mode | passed | 70ms |
src/components/articles/ArticleCard.test.jsx
| Test | Status | Duration |
|---|---|---|
| ArticleCard Component renders standard article card with metadata, tags, and dev icon | passed | 694ms |
| ArticleCard Component renders featured card with cover image and eager loading | passed | 92ms |
| ArticleCard Component renders with linkedin icon and custom linkKey | passed | 51ms |
| ArticleCard Component handles clicking tags when onTagClick is undefined without errors | passed | 126ms |
| ArticleCard Component handles empty or non-array tags gracefully | passed | 50ms |
src/components/ContactModal.test.jsx
| Test | Status | Duration |
|---|---|---|
| ContactModal Component returns null when isOpen is false | passed | 138ms |
| ContactModal Component renders modal dialog when isOpen is true | passed | 417ms |
| ContactModal Component locks body overflow to hidden when opened and restores to auto on unmount | passed | 74ms |
| ContactModal Component locks body overflow when isOpen toggles to true, restores when toggles to false | passed | 49ms |
| ContactModal Component calls onClose when Escape key is pressed | passed | 48ms |
| ContactModal Component does not call onClose when other keys are pressed | passed | 44ms |
| ContactModal Component removes keydown listener when unmounted | passed | 47ms |
| ContactModal Component calls onClose when close button is clicked | passed | 175ms |
| ContactModal Component calls onClose when clicking backdrop directly | passed | 27ms |
| ContactModal Component does not call onClose when clicking modal content | passed | 31ms |
src/components/frameworks/Frameworks.data.test.js
| Test | Status | Duration |
|---|---|---|
| Frameworks.data exports an array of 9 frameworks | passed | 22ms |
| Frameworks.data llmEval has required fields | passed | 25ms |
| Frameworks.data promptfoo has required fields | passed | 13ms |
| Frameworks.data playwright has required fields | passed | 9ms |
| Frameworks.data cypressTs has required fields | passed | 9ms |
| Frameworks.data cypressBdd has required fields | passed | 13ms |
| Frameworks.data openapi has required fields | passed | 10ms |
| Frameworks.data pact has required fields | passed | 13ms |
| Frameworks.data seleniumJunit has required fields | passed | 1ms |
| Frameworks.data seleniumTestng has required fields | passed | 31ms |
| Frameworks.data llmEval has exactly 6 feature icons | passed | 1ms |
| Frameworks.data promptfoo has exactly 6 feature icons | passed | 8ms |
| Frameworks.data playwright has exactly 6 feature icons | passed | 7ms |
| Frameworks.data cypressTs has exactly 6 feature icons | passed | 1ms |
| Frameworks.data cypressBdd has exactly 6 feature icons | passed | 1ms |
| Frameworks.data openapi has exactly 6 feature icons | passed | 10ms |
| Frameworks.data pact has exactly 6 feature icons | passed | 7ms |
| Frameworks.data seleniumJunit has exactly 6 feature icons | passed | 1ms |
| Frameworks.data seleniumTestng has exactly 6 feature icons | passed | 1ms |
| Frameworks.data llmEval has a valid CTA with href and icon | passed | 15ms |
| Frameworks.data promptfoo has a valid CTA with href and icon | passed | 1ms |
| Frameworks.data playwright has a valid CTA with href and icon | passed | 0ms |
| Frameworks.data cypressTs has a valid CTA with href and icon | passed | 0ms |
| Frameworks.data cypressBdd has a valid CTA with href and icon | passed | 1ms |
| Frameworks.data openapi has a valid CTA with href and icon | passed | 0ms |
| Frameworks.data pact has a valid CTA with href and icon | passed | 15ms |
| Frameworks.data seleniumJunit has a valid CTA with href and icon | passed | 1ms |
| Frameworks.data seleniumTestng has a valid CTA with href and icon | passed | 14ms |
| Frameworks.data framework IDs match recognized frameworks | passed | 7ms |
| Frameworks.data contains AI LLM entries | passed | 10ms |
| Frameworks.data contains Contract Testing entries | passed | 3ms |
| Frameworks.data contains Legacy E2E entries | passed | 0ms |
| Frameworks.data all CTA hrefs are unique | passed | 1ms |
| Frameworks.data eight frameworks expose a live report link | passed | 11ms |
| Frameworks.data icons llmEval uses the shared code icon for the View on GitHub CTA | passed | 15ms |
| Frameworks.data icons promptfoo uses the shared code icon for the View on GitHub CTA | passed | 1ms |
| Frameworks.data icons playwright uses the shared code icon for the View on GitHub CTA | passed | 0ms |
| Frameworks.data icons cypressTs uses the shared code icon for the View on GitHub CTA | passed | 13ms |
| Frameworks.data icons cypressBdd uses the shared code icon for the View on GitHub CTA | passed | 1ms |
| Frameworks.data icons openapi uses the shared code icon for the View on GitHub CTA | passed | 0ms |
| Frameworks.data icons pact uses the shared code icon for the View on GitHub CTA | passed | 11ms |
| Frameworks.data icons seleniumJunit uses the shared code icon for the View on GitHub CTA | passed | 0ms |
| Frameworks.data icons seleniumTestng uses the shared code icon for the View on GitHub CTA | passed | 1ms |
| Frameworks.data icons llmEval uses the shared assessment icon for the Live Report CTA | passed | 6ms |
| Frameworks.data icons promptfoo uses the shared assessment icon for the Live Report CTA | passed | 0ms |
| Frameworks.data icons playwright uses the shared assessment icon for the Live Report CTA | passed | 1ms |
| Frameworks.data icons cypressTs uses the shared assessment icon for the Live Report CTA | passed | 0ms |
| Frameworks.data icons cypressBdd uses the shared assessment icon for the Live Report CTA | passed | 8ms |
| Frameworks.data icons openapi uses the shared assessment icon for the Live Report CTA | passed | 0ms |
| Frameworks.data icons pact uses the shared assessment icon for the Live Report CTA | passed | 1ms |
| Frameworks.data icons seleniumTestng uses the shared assessment icon for the Live Report CTA | passed | 0ms |
| Frameworks.data icons every CTA icon across all frameworks is identical | passed | 7ms |
| Frameworks.data icons llmEval feature icons are lowercase material icon ligatures | passed | 1ms |
| Frameworks.data icons promptfoo feature icons are lowercase material icon ligatures | passed | 9ms |
| Frameworks.data icons playwright feature icons are lowercase material icon ligatures | passed | 12ms |
| Frameworks.data icons cypressTs feature icons are lowercase material icon ligatures | passed | 2ms |
| Frameworks.data icons cypressBdd feature icons are lowercase material icon ligatures | passed | 14ms |
| Frameworks.data icons openapi feature icons are lowercase material icon ligatures | passed | 1ms |
| Frameworks.data icons pact feature icons are lowercase material icon ligatures | passed | 13ms |
| Frameworks.data icons seleniumJunit feature icons are lowercase material icon ligatures | passed | 1ms |
| Frameworks.data icons seleniumTestng feature icons are lowercase material icon ligatures | passed | 12ms |
src/components/Shipped.test.jsx
| Test | Status | Duration |
|---|---|---|
| Shipped stages three real project screenshots with their live URL, first one active | passed | 423ms |
| Shipped each step carries the project facts and a deep link to its page | passed | 681ms |
| Shipped switches the staged frame to QA Forge (step 1) when scrolled into view | passed | 226ms |
| Shipped switches the staged frame to HELLGATE (step 2) when scrolled into view | passed | 202ms |
| Shipped renders placeholder gracefully when an image fails to load | passed | 262ms |
src/components/test-results/CoverageMap.test.jsx
| Test | Status | Duration |
|---|---|---|
| CoverageMap renders nothing while loading and an empty state without data | passed | 245ms |
| CoverageMap shows totals and one row per module with layer marks | passed | 862ms |
| CoverageMap filters modules by layer | passed | 777ms |
| CoverageMap hides the mutation column when no mutation data exists | passed | 176ms |
src/components/test-results/A11yScan.test.jsx
| Test | Status | Duration |
|---|---|---|
| A11yScan renders nothing while loading and an empty state without data | passed | 216ms |
| A11yScan shows the issue total, scope, impact breakdown and engine | passed | 271ms |
| A11yScan lists the worst pages with their colour scheme | passed | 475ms |
| A11yScan links every failing rule to its axe documentation in a safe new tab | passed | 236ms |
| A11yScan reports a clean scan without a rules table | passed | 43ms |
src/components/test-results/SectionRail.test.jsx
| Test | Status | Duration |
|---|---|---|
| SectionRail Component renders navigation rail with sections list and initial active state on first section | passed | 673ms |
| SectionRail Component sets up IntersectionObserver with correct rootMargin and observes matching DOM nodes | passed | 130ms |
| SectionRail Component handles missing IntersectionObserver gracefully | passed | 23ms |
| SectionRail Component handles empty sections gracefully without crashing | passed | 55ms |
src/StaticAssets.test.js
| Test | Status | Duration |
|---|---|---|
| Static Assets & Configuration index.html Favicons has apple-touch-icon | passed | 11ms |
| Static Assets & Configuration index.html Favicons has 32x32 PNG favicon | passed | 1ms |
| Static Assets & Configuration index.html Favicons has 16x16 PNG favicon | passed | 14ms |
| Static Assets & Configuration index.html Favicons has webmanifest | passed | 60ms |
| Static Assets & Configuration Performance Optimizations loads no third-party font or icon CSS | passed | 1ms |
| Static Assets & Configuration Performance Optimizations preloads the self-hosted display and icon fonts | passed | 36ms |
| Static Assets & Configuration Performance Optimizations does not include CSP meta tag (CSP is enforced via HTTP headers) | passed | 1ms |
| Static Assets & Configuration SEO Meta Tags has meta description | passed | 11ms |
| Static Assets & Configuration SEO Meta Tags has canonical link | passed | 0ms |
| Static Assets & Configuration SEO Meta Tags has Open Graph tags | passed | 1ms |
| Static Assets & Configuration SEO Meta Tags has Twitter card tags | passed | 3ms |
| Static Assets & Configuration CSS Variables defines core theme colors | passed | 1ms |
src/components/Experience.test.jsx
| Test | Status | Duration |
|---|---|---|
| Experience Component displays compact section header | passed | 967ms |
| Experience Component draws one rail with five year chapters, Board current and first | passed | 238ms |
| Experience Component every chapter carries a logo plate, a real metric and its tools | passed | 308ms |
| Experience Component counts the metric up once the chapter is in view | passed | 274ms |
| Experience Component keeps every row short: no highlight bullets, no tool chips | passed | 194ms |
| Experience Component displays Electronic Arts as the earliest role | passed | 316ms |
| Experience Component links each company to its site in a new tab, exactly once | passed | 391ms |
| Experience Component does not render case study buttons | passed | 214ms |
tests/jest/certificates-min.test.js
| Test | Status | Duration |
|---|---|---|
| certificates.min.js - Minified Version File Verification minified file exists | passed | 27ms |
| certificates.min.js - Minified Version File Verification minified file is smaller than source file | passed | 16ms |
| certificates.min.js - Minified Version File Verification contains expected minified patterns | passed | 1ms |
| certificates.min.js - Minified Version File Verification contains certificate data | passed | 12ms |
| certificates.min.js - Minified Version File Verification contains key functions from source | passed | 20ms |
| certificates.min.js - Minified Version Content Integrity does not contain syntax errors | passed | 12ms |
| certificates.min.js - Minified Version Content Integrity file is not empty | passed | 1ms |
src/components/test-results/useCountUp.test.js
| Test | Status | Duration |
|---|---|---|
| useCountUp hook (test-results/useCountUp) returns null when target is null or undefined | passed | 135ms |
| useCountUp hook (test-results/useCountUp) returns target directly without animating when active is false | passed | 60ms |
| useCountUp hook (test-results/useCountUp) animates progress from 0 to 1 scaling target linearly with eased progress | passed | 55ms |
| useCountUp hook (test-results/useCountUp) returns target directly when user prefers reduced motion | passed | 21ms |
| useCountUp hook (test-results/useCountUp) returns target directly when requestAnimationFrame is missing | passed | 14ms |
| useCountUp hook (test-results/useCountUp) cancels animation frame on unmount | passed | 41ms |
src/components/hooks/useCountUp.test.js
| Test | Status | Duration |
|---|---|---|
| useCountUp hook (hooks/useCountUp) animates value from 0 to target using cubic easing and completes at 1100ms | passed | 170ms |
| useCountUp hook (hooks/useCountUp) defaults active to true and animates | passed | 23ms |
| useCountUp hook (hooks/useCountUp) does not animate when active is false | passed | 14ms |
| useCountUp hook (hooks/useCountUp) does not animate when user prefers reduced motion | passed | 15ms |
| useCountUp hook (hooks/useCountUp) does not animate when requestAnimationFrame is not supported | passed | 8ms |
| useCountUp hook (hooks/useCountUp) cancels animation frame on unmount | passed | 21ms |
tests/jest/test-history.test.js
| Test | Status | Duration |
|---|---|---|
| test history buildHistoryEntry keeps only the compact per-run facts | passed | 14ms |
| test history buildHistoryEntry tolerates missing reports | passed | 10ms |
| test history appendRun replaces a run for the same commit and caps the window | passed | 11ms |
| test history syncHistory only reads when push is off, appends and writes when on | passed | 27ms |
| test history syncHistory keeps the previous history when the write fails | passed | 6ms |
src/components/hooks/useFocusTrap.test.jsx
| Test | Status | Duration |
|---|---|---|
| useFocusTrap should focus the first element when active | passed | 158ms |
| useFocusTrap should not focus the first element when inactive | passed | 24ms |
| useFocusTrap should trap focus inside the container | passed | 67ms |
| useFocusTrap should trap focus when shift-tabbing from first element | passed | 45ms |
| useFocusTrap should do nothing if no focusable elements found | passed | 18ms |
src/components/test-results/Ring.test.jsx
| Test | Status | Duration |
|---|---|---|
| Ring component renders with default muted tone and clamped value | passed | 160ms |
| Ring component renders with custom tone | passed | 23ms |
| Ring component clamps values below 0 to 0 | passed | 30ms |
| Ring component clamps values above 100 to 100 | passed | 28ms |
| Ring component handles zero correctly | passed | 34ms |
| Ring component handles null, undefined, NaN, and non-numeric values as 0 | passed | 73ms |
| Ring component handles string number values correctly | passed | 15ms |
| Ring component renders track and fill circles with correct geometry and attributes | passed | 25ms |
tests/jest/a11y-summary.test.js
| Test | Status | Duration |
|---|---|---|
| a11y summary collectRoutes lists prerendered pages and skips report pages and blog post copies | passed | 30ms |
| a11y summary summarizeA11yScans totals elements by impact and ranks rules by severity | passed | 20ms |
| a11y summary summarizeA11yScans reports a clean run as zero | passed | 12ms |
tests/jest/mutation-summary.test.js
| Test | Status | Duration |
|---|---|---|
| mutation summary countMutants follows the Stryker score definition | passed | 35ms |
| mutation summary summarizeMutationReport orders files by score and lists survivors | passed | 19ms |
| mutation summary summarizeMutationReport survives an empty report | passed | 4ms |
src/components/frameworks/ComingSoonHero.test.jsx
| Test | Status | Duration |
|---|---|---|
| ComingSoonHero Component renders heading and technologies list | passed | 856ms |
| ComingSoonHero Component renders decorative animated elements | passed | 63ms |
| ComingSoonHero Component renders the gradient backdrop and decorative layers | passed | 54ms |
tests/jest/coverage-map.test.js
| Test | Status | Duration |
|---|---|---|
| coverage map e2eSelectorTokens keeps CSS selectors and drops prose, comments and file names | passed | 33ms |
| coverage map e2eVisitedRoutes reads goto targets and pathname assertions | passed | 1ms |
| coverage map routeIndex maps route components to every path they serve | passed | 1ms |
| coverage map importedModules resolves relative imports of a real test file | passed | 17ms |
| coverage map buildCoverageMap classifies the real repository | passed | 188ms |
src/components/frameworks/FrameworkHero.test.jsx
| Test | Status | Duration |
|---|---|---|
| FrameworkHero Component renders framework title, subtitle, and dynamic id class | passed | 977ms |
| FrameworkHero Component renders decorative background and animated shapes | passed | 83ms |
| FrameworkHero Component renders the decorative layers with their animations | passed | 60ms |
src/components/sideprojects/ProjectShowcase.test.jsx
| Test | Status | Duration |
|---|---|---|
| ProjectShowcase Component renders loopBeat project showcase with hero metadata, title, links, and sections | passed | 987ms |
| ProjectShowcase Component renders gameplay section when project has gameplayGifs | passed | 662ms |
| ProjectShowcase Component renders browser mock preview and handles image load failure with placeholder | passed | 290ms |
| ProjectShowcase Component renders without gameplay section and without preview when omitted | passed | 164ms |
src/i18n/detection.test.js
| Test | Status | Duration |
|---|---|---|
| i18n language detection falls back to English when nothing is set | passed | 174ms |
| i18n language detection uses the navigator language when supported | passed | 168ms |
| i18n language detection maps a regional code onto its base language | passed | 226ms |
| i18n language detection a saved localStorage choice wins over the navigator language | passed | 197ms |
| i18n language switching changeLanguage persists the choice to localStorage | passed | 129ms |
| i18n language switching changeLanguage syncs <html lang> to the base language | passed | 192ms |
| i18n language switching <html lang> is set on init from the detected language | passed | 156ms |
| i18n language switching falls back to English content for an unsupported language | passed | 184ms |
tests/jest/report-io.test.js
| Test | Status | Duration |
|---|---|---|
| report-io E2E resolution ensureE2EReportOnDisk copies a discovered summary into the canonical path | passed | 23ms |
| report-io E2E resolution readE2EReport returns null when no summary exists in an empty tree | passed | 6ms |
| report-io E2E resolution resolveE2EBaseUrl maps CI preview hosts to the public site URL | passed | 17ms |
tests/jest/generate-html-reports.test.js
| Test | Status | Duration |
|---|---|---|
| generate-html-reports coverage helpers normalizeCoveragePath strips absolute project paths | passed | 20ms |
| generate-html-reports coverage helpers getCoverageReport prefers raw coverage with file entries | passed | 1ms |
| generate-html-reports coverage helpers getCoverageReport falls back to dashboard coverageFiles when raw files are missing | passed | 18ms |
| generate-html-reports coverage helpers collectCoverageFiles normalizes paths and sorts worst-first | passed | 19ms |
| generate-html-reports coverage helpers isCoverageLikelyIncomplete detects partial instrumentation runs | passed | 10ms |
tests/jest/blog-generator.test.js
| Test | Status | Duration |
|---|---|---|
| Blog Generator & Prerender Pipeline slugify converts title to kebab-case slug | passed | 20ms |
| Blog Generator & Prerender Pipeline parseFrontmatter parses YAML frontmatter blocks correctly | passed | 5ms |
| Blog Generator & Prerender Pipeline parseFrontmatter handles files without frontmatter gracefully | passed | 4ms |
| Blog Generator & Prerender Pipeline generateBlogData scans content/blog/*.md, outputs blogPosts.json and updates sitemap.xml | passed | 678ms |
| Blog Generator & Prerender Pipeline prerender generates dist/blog and dist/blog/:slug directories when dist exists | passed | 31.56s |
tests/jest/css-variables.test.js
| Test | Status | Duration |
|---|---|---|
| CSS Variables & Theming should define core theme colors | passed | 54ms |
| CSS Variables & Theming should use consistent gradient variables | passed | 1ms |
| CSS Variables & Theming should consistency usage of z-index | passed | 25ms |
src/components/Footer.test.jsx
| Test | Status | Duration |
|---|---|---|
| Footer Component renders footer content | passed | 580ms |
| Footer Component renders social links with correct hrefs | passed | 691ms |
| Footer Component renders in-site navigation to every top-level route | passed | 396ms |
| Footer Component renders social links with correct hrefs | passed | 195ms |
| Footer Component back-to-top button scrolls the window to the top | passed | 172ms |
src/App.links.test.jsx
| Test | Status | Duration |
|---|---|---|
| App Integration Tests - Links & Navigation Navigation Bar renders brand logo with correct text | passed | 1.84s |
| App Integration Tests - Links & Navigation Navigation Bar renders main navigation links | passed | 1.93s |
| App Integration Tests - Links & Navigation External Links Security all external links have rel="noopener noreferrer" and target="_blank" | passed | 2.17s |
| App Integration Tests - Links & Navigation Critical Links Presence contains LinkedIn link | passed | 1.84s |
| App Integration Tests - Links & Navigation Critical Links Presence contains Calendly link | passed | 1.60s |
| App Integration Tests - Links & Navigation Critical Links Presence contains Medium/Articles links | passed | 2.81s |
| App Integration Tests - Links & Navigation Internal Navigation internal anchor links start with # | passed | 1.61s |
src/components/test-results/MutationScore.test.jsx
| Test | Status | Duration |
|---|---|---|
| MutationScore renders nothing while loading and an empty state without data | passed | 298ms |
| MutationScore shows the score, the breakdown and the run link | passed | 590ms |
| MutationScore lists lowest-scoring files and surviving mutants | passed | 162ms |
tests/jest/gist.test.js
| Test | Status | Duration |
|---|---|---|
| gist helpers readGistJson uses the raw URL without a token | passed | 23ms |
| gist helpers readGistJson reads file content through the API with a token | passed | 1ms |
| gist helpers readGistJson returns null on HTTP errors and network failures | passed | 1ms |
| gist helpers writeGistJson refuses without a token and PATCHes with one | passed | 10ms |
src/App.scroll.test.jsx
| Test | Status | Duration |
|---|---|---|
| App Scroll Integration App scrolls to element defined in location.state.scrollTo on mount | passed | 2.18s |
| App Scroll Integration App does NOT scroll if location.state.scrollTo is missing | passed | 1.27s |
| App Scroll Integration App does NOT scroll to top when navigating home with scrollTo state | passed | 1.77s |
| App Scroll Integration scrolls to top when navigating to a subpage through the navbar | passed | 1.74s |
tests/jest/icon-font-subset.test.js
| Test | Status | Duration |
|---|---|---|
| Material Icons subset every icon name reachable from src/ ships in the subset | passed | 209ms |
| Material Icons subset the font URL carries the hash of the shipped font in every reference | passed | 10ms |
| Material Icons subset the served font stays a subset, not the full family | passed | 1ms |
src/components/HomeSectionHeader.test.jsx
| Test | Status | Duration |
|---|---|---|
| HomeSectionHeader Component renders title, headingId, and rule with minimal props | passed | 605ms |
| HomeSectionHeader Component renders icon, subtitle, and badge when provided | passed | 131ms |
| HomeSectionHeader Component returns valid JSX when called as a function | passed | 10ms |
tests/jest/env-utils.test.js
| Test | Status | Duration |
|---|---|---|
| env utilities getEnv returns VITE_WEB3FORMS_KEY from the test environment | passed | 77ms |
| env utilities getEnv returns VITE_GIST_USERNAME from the test environment | passed | 1ms |
| env utilities getEnv returns VITE_GIST_ID from the test environment | passed | 1ms |
| env utilities getEnv returns DEV from the test environment | passed | 18ms |
| env utilities getEnv returns PROD from the test environment | passed | 6ms |
| env utilities getEnv returns MODE from the test environment | passed | 1ms |
| env utilities getEnv returns undefined for unknown keys | passed | 10ms |
| env utilities getEnv is case-sensitive for keys | passed | 1ms |
| env utilities isDev returns true when DEV is true | passed | 8ms |
| env utilities isDev returns false when DEV is false or missing | passed | 1ms |
| env utilities isProd returns true when PROD is true | passed | 9ms |
| env utilities isProd returns false when PROD is false | passed | 1ms |
| env utilities isProd defaults to true when PROD is missing | passed | 12ms |
src/components/subpages.i18n.test.jsx
| Test | Status | Duration |
|---|---|---|
| Sub-page i18n Experience page renders translated copy in en | passed | 726ms |
| Sub-page i18n Experience page renders translated copy in pt | passed | 290ms |
| Sub-page i18n Experience page renders translated copy in es | passed | 239ms |
| Sub-page i18n Shipped page renders translated copy in en | passed | 248ms |
| Sub-page i18n Shipped page renders translated copy in pt | passed | 205ms |
| Sub-page i18n Shipped page renders translated copy in es | passed | 122ms |
| Sub-page i18n Stack page renders translated copy in en | passed | 958ms |
| Sub-page i18n Stack page renders translated copy in pt | passed | 742ms |
| Sub-page i18n Stack page renders translated copy in es | passed | 749ms |
| Sub-page i18n Articles page renders translated copy in en | passed | 391ms |
| Sub-page i18n Articles page renders translated copy in pt | passed | 406ms |
| Sub-page i18n Articles page renders translated copy in es | passed | 459ms |
| Sub-page i18n Frameworks page renders translated copy in en | passed | 717ms |
| Sub-page i18n Frameworks page renders translated copy in pt | passed | 860ms |
| Sub-page i18n Frameworks page renders translated copy in es | passed | 731ms |
| Sub-page i18n SideProjects page renders translated copy in en | passed | 270ms |
| Sub-page i18n SideProjects page renders translated copy in pt | passed | 195ms |
| Sub-page i18n SideProjects page renders translated copy in es | passed | 226ms |
| Sub-page i18n TestResults page renders translated copy in en | passed | 1.55s |
| Sub-page i18n TestResults page renders translated copy in pt | passed | 1.33s |
| Sub-page i18n TestResults page renders translated copy in es | passed | 1.35s |
src/components/test-results/historyStats.test.js
| Test | Status | Duration |
|---|---|---|
| historyStats buildSeries derives rates, seconds and failure indices | passed | 57ms |
| historyStats unstableTests counts failures per name across the window | passed | 1ms |
| historyStats handles empty and invalid input | passed | 5ms |
src/components/Stack.test.jsx
| Test | Status | Duration |
|---|---|---|
| Stack lists the production stack by category, every tool with a glyph | passed | 2.24s |
| Stack does not repeat the employer timeline: no company names as group titles | passed | 877ms |
| Stack carries the LinkedIn competencies: IoT hardware, reporters and CI/CD | passed | 781ms |
tests/jest/mutation-shard.test.js
| Test | Status | Duration |
|---|---|---|
| splitShards assigns every file to exactly one shard | passed | 25ms |
| splitShards balances shards by size | passed | 39ms |
| splitShards is deterministic regardless of input order | passed | 10ms |
| mutateFiles applies stryker include and exclude patterns | passed | 231ms |
| mergeReports unions files and testFiles, keeps metadata from the first shard | passed | 7ms |
src/components/hooks/useFetch.test.jsx
| Test | Status | Duration |
|---|---|---|
| useFetch should return data when fetch is successful | passed | 152ms |
| useFetch should return error when fetch fails | passed | 95ms |
| useFetch should return error when fetch throws an exception | passed | 74ms |
src/components/test-results/CodeSample.test.jsx
| Test | Status | Duration |
|---|---|---|
| CodeSample Component renders code with default javascript syntax highlighting | passed | 255ms |
| CodeSample Component renders with custom specified language | passed | 105ms |
| CodeSample Component falls back to javascript grammar when unknown language is provided | passed | 48ms |
src/components/Loading.test.jsx
| Test | Status | Duration |
|---|---|---|
| Loading Component renders loading status message with accessibility attributes | passed | 928ms |
| Loading Component returns valid JSX when called directly | passed | 17ms |
tests/jest/main-chunk-reload.test.js
| Test | Status | Duration |
|---|---|---|
| main.jsx handleChunkError reloads location on first asset load error | passed | 25ms |
| main.jsx handleChunkError prevents infinite reloads on consecutive errors within cooldown window | passed | 12ms |
| main.jsx handleChunkError does not reload for standard non-chunk runtime errors | passed | 26ms |
| main.jsx handleChunkError handles event object with nested error.message | passed | 1ms |
src/i18n/routing.test.js
| Test | Status | Duration |
|---|---|---|
| language routing helpers reads the language prefix from a path | passed | 41ms |
| language routing helpers maps a language onto a router basename | passed | 17ms |
| language routing helpers strips the prefix and keeps the rest of the path | passed | 84ms |
| language routing helpers localizes a path for a language, replacing any existing prefix | passed | 12ms |
src/components/hooks/useInView.test.jsx
| Test | Status | Duration |
|---|---|---|
| useInView falls back to visible when IntersectionObserver is missing | passed | 201ms |
| useInView starts pending once observed and flips to in on intersection, then disconnects | passed | 52ms |
tests/jest/generate-test-data.test.js
| Test | Status | Duration |
|---|---|---|
| generate-test-data coverage helpers normalizeCoveragePath returns project-relative paths | passed | 19ms |
| generate-test-data coverage helpers generateCoverageData splits totals and per-file metrics | passed | 20ms |
| generate-test-data coverage helpers generateCoverageData returns empty shape when report is missing | passed | 12ms |
src/components/Reveal.test.jsx
| Test | Status | Duration |
|---|---|---|
| Reveal shows everything at once when IntersectionObserver is missing | passed | 179ms |
| Reveal moves from pending to in once the node intersects | passed | 42ms |
src/components/blog/blogDate.test.js
| Test | Status | Duration |
|---|---|---|
| formatPostMonth formats dates in default english locale when lang is not passed | passed | 48ms |
| formatPostMonth formats dates with month boundaries correctly | passed | 17ms |
| formatPostMonth capitalizes the first letter and preserves the remainder of the formatted string | passed | 17ms |
| formatPostMonth formats dates in spanish and portuguese locales | passed | 15ms |
src/components/test-results/runStatus.test.js
| Test | Status | Duration |
|---|---|---|
| passRate prefers a provided passRate | passed | 20ms |
| passRate derives the rate from passed and total counts | passed | 6ms |
| passRate returns null without data or tests | passed | 10ms |
| runStatus reports loading before data arrives | passed | 9ms |
| runStatus reports unknown when neither suite has data | passed | 11ms |
| runStatus sums failures across unit and e2e suites | passed | 1ms |
| runStatus reports green when nothing failed | passed | 11ms |
src/components/Security.test.jsx
| Test | Status | Duration |
|---|---|---|
| Security and Performance Checks CertificatesModal renders safely without throwing when disabled/sunsetted | passed | 117ms |
| Security and Performance Checks Footer external links have rel="noopener noreferrer" | passed | 788ms |
src/components/FooterNavigation.test.jsx
| Test | Status | Duration |
|---|---|---|
| Footer Navigation Logic calls onOpenContact when clicking "Send Message" | passed | 800ms |
| Footer Navigation Logic makes "Send Message" the only primary call to action | passed | 126ms |
| Footer Navigation Logic does not throw when "Send Message" clicked without onOpenContact | passed | 224ms |
src/data/certificates.test.js
| Test | Status | Duration |
|---|---|---|
| Certificate Data Validation should have exactly 35 certificates | passed | 15ms |
| Certificate Data Validation all certificates should have required fields | passed | 353ms |
| Certificate Data Validation all certificates should have valid image paths | passed | 51ms |
| Certificate Data Validation all certificates should have valid LinkedIn URLs | passed | 29ms |
src/i18n/i18n.test.js
| Test | Status | Duration |
|---|---|---|
| i18n locale key parity pt has exactly the same keys as en | passed | 25ms |
| i18n locale key parity es has exactly the same keys as en | passed | 20ms |
| i18n locale key parity en has no empty translation values | passed | 18ms |
| i18n locale key parity pt has no empty translation values | passed | 14ms |
| i18n locale key parity es has no empty translation values | passed | 12ms |
src/components/CrossPage.test.jsx
| Test | Status | Duration |
|---|---|---|
| Cross-Page Consistency Home Page renders Navbar with brand logo | passed | 2.85s |
| Cross-Page Consistency Home Page renders Footer | passed | 1.58s |
| Cross-Page Consistency Home Page renders main navigation links | passed | 1.49s |
| Cross-Page Consistency Frameworks Page renders Navbar with brand logo | passed | 1.20s |
| Cross-Page Consistency Frameworks Page renders Footer | passed | 1.36s |
| Cross-Page Consistency Frameworks Page renders main navigation links | passed | 959ms |
| Cross-Page Consistency SideProjects Page renders Navbar with brand logo | passed | 397ms |
| Cross-Page Consistency SideProjects Page renders Footer | passed | 510ms |
| Cross-Page Consistency SideProjects Page renders main navigation links | passed | 599ms |
tests/jest/navbar-responsive-css.test.js
| Test | Status | Duration |
|---|---|---|
| Navbar responsive CSS scoping style.css does not apply small-breakpoint nav rules to nav.main-nav | passed | 24ms |
src/components/frameworks/Frameworks.i18n.test.jsx
| Test | Status | Duration |
|---|---|---|
| Frameworks i18n renders translated page copy in pt | passed | 1.33s |
| Frameworks i18n renders translated page copy in es | passed | 712ms |
| Frameworks i18n renders translated API section labels in Portuguese | passed | 1.59s |
src/components/CertificatesModal.test.jsx
| Test | Status | Duration |
|---|---|---|
| CertificatesModal Component (Disabled) returns null and does not render when isOpen is false | passed | 141ms |
| CertificatesModal Component (Disabled) returns null and does not render when isOpen is true (modal disabled) | passed | 17ms |
| CertificatesModal Component (Disabled) returns literal null when called as a function | passed | 8ms |
src/components/PageHeader.test.jsx
| Test | Status | Duration |
|---|---|---|
| PageHeader renders icon, heading, subtitle and children | passed | 484ms |
| PageHeader omits icon and subtitle when not provided | passed | 18ms |
src/components/hooks/useKeyPress.test.jsx
| Test | Status | Duration |
|---|---|---|
| useKeyPress should call action when matching key is pressed | passed | 105ms |
| useKeyPress should not call action when different key is pressed | passed | 17ms |
| useKeyPress should cleanup event listener on unmount | passed | 48ms |
src/components/hooks/useModal.test.jsx
| Test | Status | Duration |
|---|---|---|
| useModal should initialize with isOpen as false | passed | 65ms |
| useModal should set isOpen to true when openModal is called | passed | 12ms |
| useModal should set isOpen to false when closeModal is called | passed | 17ms |
src/utils/inBrowserTestRunner.insecure.test.js
| Test | Status | Duration |
|---|---|---|
| net-secure-context on a remote http host fails when the context is not secure | passed | 38ms |
| net-secure-context on a remote http host passes when the browser reports a secure context | passed | 5ms |
src/components/Booking.test.jsx
| Test | Status | Duration |
|---|---|---|
| Booking Functionality Footer Booking Button renders booking button with correct attributes | passed | 514ms |
src/components/hooks/index.test.js
| Test | Status | Duration |
|---|---|---|
| hooks index should export useKeyPress | passed | 5ms |
| hooks index should export useFetch | passed | 1ms |
| hooks index should export useModal | passed | 9ms |
| hooks index should export useTheme | passed | 8ms |
src/components/Footer.i18n.test.jsx
| Test | Status | Duration |
|---|---|---|
| Footer i18n renders Spanish connect copy when language is es | passed | 251ms |