62
Test suites
711
Total tests
711
Passed
0
Failed
100.00%
Pass rate
637.94s
Duration
Test Suites
tests/jest/certificates.test.js
| Test | Status | Duration |
|---|---|---|
| Certificate Data Validation Certificate Count should have exactly 35 certificates | passed | 36ms |
| Certificate Data Validation Certificate Structure all certificates should have required fields | passed | 202ms |
| Certificate Data Validation Certificate Structure all certificate IDs should be unique and sequential | passed | 8ms |
| Certificate Data Validation Certificate Structure all titles should be non-empty strings | passed | 31ms |
| Certificate Data Validation Certificate Structure all categories should be non-empty strings | passed | 29ms |
| Certificate Data Validation File Paths all images should start with "images/" | passed | 24ms |
| Certificate Data Validation File Paths all thumbs should start with "images/thumbs/" | passed | 19ms |
| Certificate Data Validation File Paths image and thumb filenames should match | passed | 16ms |
| Certificate Data Validation File Paths all image files should exist | passed | 26ms |
| Certificate Data Validation File Paths all thumb files should exist | passed | 25ms |
| Certificate Data Validation LinkedIn URL Sources should have certificates from multiple sources | passed | 78ms |
| Certificate Data Validation LinkedIn URL Sources Udemy certificates should have correct URL format | passed | 11ms |
| Certificate Data Validation LinkedIn URL Sources LinkedIn CDN certificates should have correct URL format | passed | 6ms |
| Certificate Data Validation LinkedIn URL Sources Skilljar certificates should have correct URL format | passed | 2ms |
| Certificate Data Validation Certificate Title Uniqueness all certificate titles should be unique | passed | 4ms |
| Certificate Data Validation Category Distribution should have at least 3 different categories | passed | 4ms |
| Certificate Data Validation Category Distribution categories should be properly formatted (capitalized) | passed | 18ms |
| 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 | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #3 - Cybersecurity at Work (2020) | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #4 - Foundations of Building in Board | passed | 8ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #5 - Automated Tests with Cypress - Advanced | passed | 11ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #6 - Design Elements of Automated Tests | passed | 8ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #7 - Playwright UI + API (10h course) | passed | 9ms |
| 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 | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #10 - Best Practices in Test Automation with Cypress | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #11 - E2E Tests With Cypress | passed | 11ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #12 - Playwright Automation | passed | 10ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #13 - GraphQL Essential Training | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #14 - End-to-End JavaScript Testing with Cypress.io | passed | 12ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #15 - API Testing Foundations | passed | 8ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #16 - Gherkin Language - The Master Guide | passed | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #17 - Learning Selenium | passed | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #18 - Test Automation Foundations | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #19 - Working with Difficult People | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #20 - Automation Selenium WebDriver + Java | passed | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #21 - Mobile Automation: Appium Cucumber Android & iOS + Jenkins | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #22 - Agile Management with Scrum | passed | 9ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #23 - Automation Test with Cypress - Basics | passed | 4ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #24 - Automation Test with Cypress - Intermediary | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #25 - Web Design for Beginners: Real World Coding in HTML & CSS | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #26 - Software Testing: Becoming an Expert | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #27 - Postman Introduction | passed | 7ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #28 - The Python Bible⢠| Everything You Need to Program in Python | passed | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #29 - GitHub Intensive Course | passed | 1ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #30 - Regular Expressions | passed | 8ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #31 - Python for Beginners (Python 3) | passed | 5ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #32 - Cypress - Modern Automation Testing from Scratch + Frameworks | passed | 6ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #33 - Swift 5 Programming For Beginners | passed | 18ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #34 - Certified ISTQB Agile Tester Foundation Level | passed | 2ms |
| Certificate Data Validation Individual Certificates (table-driven) Certificate #35 - GitHub Ultimate: Master Git and GitHub - Beginner to Expert | passed | 11ms |
tests/jest/js-certificates-unit.test.js
| Test | Status | Duration |
|---|---|---|
| certificates.js - Unit Tests File Structure and Exports file exists and is readable | passed | 26ms |
| certificates.js - Unit Tests File Structure and Exports contains certificate data array | passed | 6ms |
| certificates.js - Unit Tests File Structure and Exports contains CertificateModal class definition | passed | 5ms |
| certificates.js - Unit Tests File Structure and Exports contains getBasePath function | passed | 1ms |
| certificates.js - Unit Tests File Structure and Exports exports to window object | passed | 6ms |
| certificates.js - Unit Tests Certificate Data Validation has exactly 35 certificates | passed | 6ms |
| certificates.js - Unit Tests Certificate Data Validation all certificates have required properties | passed | 134ms |
| certificates.js - Unit Tests Certificate Data Validation all image paths use relative paths without ../ | passed | 33ms |
| certificates.js - Unit Tests Certificate Data Validation all thumb paths are in thumbs folder | passed | 23ms |
| certificates.js - Unit Tests Certificate Data Validation LinkedIn URLs use HTTPS protocol | passed | 13ms |
| certificates.js - Unit Tests Certificate Data Validation all categories are from valid list | passed | 17ms |
| certificates.js - Unit Tests Input Sanitization Logic escapeHtml properly handles special characters | passed | 1ms |
| certificates.js - Unit Tests Input Sanitization Logic validates inputs before processing | passed | 9ms |
| certificates.js - Unit Tests CertificateModal Class Methods has constructor method | passed | 0ms |
| certificates.js - Unit Tests CertificateModal Class Methods has all required methods | passed | 12ms |
| certificates.js - Unit Tests Navigation Logic uses modulo arithmetic for wrap-around | passed | 1ms |
| certificates.js - Unit Tests Navigation Logic handles both forward and backward navigation | passed | 7ms |
| certificates.js - Unit Tests Navigation Logic prevents negative index with + certificates.length | passed | 2ms |
| certificates.js - Unit Tests Error Handling checks if container exists | passed | 1ms |
| certificates.js - Unit Tests Error Handling logs error when container missing | passed | 12ms |
| certificates.js - Unit Tests Error Handling has early return on error | passed | 10ms |
| certificates.js - Unit Tests Error Handling warns when modal not initialized | passed | 0ms |
| certificates.js - Unit Tests Event Handling handles close button click | passed | 9ms |
| certificates.js - Unit Tests Event Handling handles navigation buttons | passed | 1ms |
| certificates.js - Unit Tests Event Handling implements keyboard navigation | passed | 4ms |
| certificates.js - Unit Tests Event Handling closes modal on background click | passed | 1ms |
| certificates.js - Unit Tests Accessibility includes ARIA labels for buttons | passed | 3ms |
| certificates.js - Unit Tests Accessibility implements lazy loading for images | passed | 1ms |
| certificates.js - Unit Tests Accessibility uses semantic button elements | passed | 11ms |
| certificates.js - Unit Tests UI State Management (Disabled Modal) clears active class for visibility | passed | 2ms |
| certificates.js - Unit Tests UI State Management (Disabled Modal) resets body scroll overflow | passed | 1ms |
| certificates.js - Unit Tests UI State Management (Disabled Modal) switches between grid and viewer display | passed | 1ms |
| certificates.js - Unit Tests Code Quality uses strict equality (===) | passed | 9ms |
| certificates.js - Unit Tests Code Quality uses const for immutable values | passed | 0ms |
| certificates.js - Unit Tests Code Quality uses template literals for HTML generation | passed | 6ms |
| certificates.js - Unit Tests Code Quality includes code documentation comments | passed | 1ms |
| certificates.js - Unit Tests Initialization waits for DOMContentLoaded | passed | 1ms |
| certificates.js - Unit Tests Initialization creates global window reference | passed | 1ms |
| certificates.js - Unit Tests Initialization provides fallback helper function | passed | 0ms |
| certificates.js - Unit Tests Initialization logs initialization messages | passed | 5ms |
| certificates.js - Unit Tests Functional Tests - getBasePath returns empty string for root path | passed | 48ms |
| certificates.js - Unit Tests Functional Tests - getBasePath returns ../ for /pages/ path | passed | 2ms |
| certificates.js - Unit Tests Functional Tests - getBasePath returns ../../ for nested /pages/folder/ path | passed | 1ms |
| certificates.js - Unit Tests Functional Tests - escapeHtml escapes HTML special characters | passed | 15ms |
| 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 | 6ms |
| certificates.js - Unit Tests Image Path Handling generates correct paths for thumbnails | passed | 0ms |
| certificates.js - Unit Tests Image Path Handling generates correct paths for full images | passed | 12ms |
| certificates.js - Unit Tests LinkedIn Integration includes LinkedIn verification links | passed | 2ms |
| certificates.js - Unit Tests LinkedIn Integration handles certificates with LinkedIn URLs | passed | 5ms |
| certificates.js - Unit Tests LinkedIn Integration LinkedIn links open in new tab | passed | 1ms |
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 | 44ms |
| 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 | 18ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality escapeHtml has JSDoc with security note | passed | 2ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality certificates array has JSDoc | passed | 9ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality CertificateModal class has JSDoc | passed | 1ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality constructor has parameter documentation | passed | 11ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality all major methods have JSDoc | passed | 14ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality key public methods marked with @public | passed | 7ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality methods have clear visibility documentation | passed | 10ms |
| Code Documentation and Security Enhancements Certificate Gallery - JSDoc Documentation Quality methods with parameters have @param documentation | passed | 33ms |
| 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 | 9ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization escapeHtml function is defined | passed | 9ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization uses createElement for safe escaping | passed | 1ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization escapeHtml is used in generateCertificateGrid | passed | 2ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization alt attributes use escapeHtml | passed | 15ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization updateViewer uses textContent for XSS safety | passed | 12ms |
| Code Documentation and Security Enhancements XSS Attack Prevention and Input Sanitization does not use innerHTML for user content | passed | 9ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading thumbnail images have loading="lazy" attribute | passed | 1ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading images have decoding="async" for performance | passed | 12ms |
| 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 | 3ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading main viewer image has async decoding | passed | 9ms |
| Code Documentation and Security Enhancements Image Performance Optimization - Lazy Loading all img tags use performance attributes | passed | 1ms |
| Code Documentation and Security Enhancements Code Quality Standards and Best Practices consistent JSDoc formatting | passed | 20ms |
| 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 | 8ms |
| Code Documentation and Security Enhancements Code Quality Standards and Best Practices performance comments are present | passed | 0ms |
| Code Documentation and Security Enhancements Overall Documentation Coverage and Completeness all JavaScript files have JSDoc | passed | 14ms |
| Code Documentation and Security Enhancements Overall Documentation Coverage and Completeness documentation is comprehensive | passed | 10ms |
src/App.test.jsx
| Test | Status | Duration |
|---|---|---|
| App Component renders home route components | passed | 778ms |
| App Component renders articles route | passed | 120ms |
| App Component renders side-projects route | passed | 284ms |
| App Component renders frameworks route | passed | 118ms |
| App Component renders test-results route | passed | 76ms |
| App Component opens and closes Certificates Modal via Navbar | passed | 472ms |
| App Component Background Gradient Effect body has gradient background applied | passed | 639ms |
| App Component Background Gradient Effect gradient contains blue-ish colors | passed | 297ms |
| App Component Background Gradient Effect background attachment is fixed for all routes | passed | 242ms |
| App Component Background Gradient Effect gradient persists across SPA navigation | passed | 237ms |
| App Component Background Gradient Effect App component has minimum height of 100vh | passed | 206ms |
| App Component Background Gradient Effect gradient effect is applied to all page routes | passed | 515ms |
src/components/Navbar.test.jsx
| Test | Status | Duration |
|---|---|---|
| Navbar Component renders brand logo and text | passed | 719ms |
| Navbar Component renders navigation links | passed | 343ms |
| Navbar Component renders social, theme toggle, and CTA links | passed | 236ms |
| Navbar Component toggles theme on click in navbar | passed | 534ms |
| Navbar Component switches language from the compact navbar selector | passed | 1.36s |
| Navbar Component accepts onOpenCertificates callback prop | passed | 169ms |
| Navbar Component calls onOpenContact when Send me a message button is clicked | passed | 188ms |
| Navbar Component renders mobile menu toggle button | passed | 240ms |
| Navbar Component toggles mobile menu on click | passed | 640ms |
| Navbar Component closes mobile menu when a nav link is clicked | passed | 679ms |
| Navbar Component closes mobile menu when backdrop is clicked | passed | 741ms |
| Navbar Component closes mobile menu on Escape key | passed | 655ms |
| Navbar Component calculates and sets navigation height | passed | 262ms |
| Navbar Component applies correct styles to mobile menu and overlay when open | passed | 287ms |
| Navbar Component handles ResizeObserver when available | passed | 129ms |
| Navbar Component home link scroll-to-top scrolls to top when already on home and the page is scrolled down | passed | 316ms |
| Navbar Component home link scroll-to-top leaves navigation alone when the page is at the top | passed | 280ms |
| Navbar Component home link scroll-to-top navigates instead of scrolling when on another route | passed | 267ms |
| Navbar Component handles missing ResizeObserver gracefully | passed | 143ms |
tests/jest/js-certificates-functional.test.js
| Test | Status | Duration |
|---|---|---|
| certificates.js - Module Exports getBasePath function exports getBasePath function | passed | 126ms |
| certificates.js - Module Exports getBasePath function returns empty string for root path | passed | 39ms |
| certificates.js - Module Exports getBasePath function returns ../../ for /pages/something/ path (matches deep regex) | passed | 31ms |
| certificates.js - Module Exports getBasePath function returns ../../ for nested /pages/folder/ path | passed | 38ms |
| certificates.js - Module Exports getBasePath function returns ../ for /pages/ root listing | passed | 30ms |
| certificates.js - Module Exports getBasePath function handles root path with index.html | passed | 40ms |
| certificates.js - Module Exports escapeHtml function exports escapeHtml function | passed | 40ms |
| certificates.js - Module Exports escapeHtml function escapes < and > characters | passed | 30ms |
| certificates.js - Module Exports escapeHtml function escapes complete script tag | passed | 37ms |
| certificates.js - Module Exports escapeHtml function escapes ampersands | passed | 22ms |
| certificates.js - Module Exports escapeHtml function escapes quotes via textContent semantics | passed | 23ms |
| certificates.js - Module Exports escapeHtml function handles empty string | passed | 21ms |
| certificates.js - Module Exports escapeHtml function handles regular text without special chars | passed | 22ms |
| certificates.js - Module Exports escapeHtml function handles multiple special characters | passed | 35ms |
| certificates.js - Module Exports certificates data exports certificates array | passed | 21ms |
| certificates.js - Module Exports certificates data has exactly 35 certificates | passed | 22ms |
| certificates.js - Module Exports certificates data all certificates have required properties | passed | 330ms |
| certificates.js - Module Exports certificates data certificate IDs are sequential from 1 to 35 | passed | 55ms |
| certificates.js - Module Exports certificates data all image paths start with images/ | passed | 76ms |
| certificates.js - Module Exports certificates data all certificates have valid categories | passed | 51ms |
| certificates.js - Module Exports certificates data LinkedURL URLs use HTTPS when present | passed | 92ms |
| certificates.js - Module Exports CertificateModal class exports CertificateModal class | passed | 67ms |
| certificates.js - Module Exports CertificateModal class can instantiate CertificateModal | passed | 55ms |
| certificates.js - Module Exports CertificateModal class CertificateModal has expected methods | passed | 30ms |
| certificates.js - Module Exports CertificateModal class CertificateModal initializes currentIndex to 0 | passed | 22ms |
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 | 1.01s |
| CertificateModal - Instance Behavior open() method (Disabled) does not set body overflow to hidden when modal is disabled | passed | 611ms |
| CertificateModal - Instance Behavior open() method (Disabled) does not call showGrid when modal is disabled | passed | 524ms |
| CertificateModal - Instance Behavior close() method removes active class from container | passed | 409ms |
| CertificateModal - Instance Behavior close() method restores body overflow | passed | 383ms |
| CertificateModal - Instance Behavior showGrid() method displays grid element | passed | 398ms |
| CertificateModal - Instance Behavior showGrid() method hides viewer element | passed | 391ms |
| CertificateModal - Instance Behavior openCertificate(index) method sets currentIndex to provided index | passed | 288ms |
| CertificateModal - Instance Behavior openCertificate(index) method hides grid and displays viewer | passed | 321ms |
| CertificateModal - Instance Behavior openCertificate(index) method calls updateViewer after setting index | passed | 534ms |
| CertificateModal - Instance Behavior navigate(direction) method increments index when direction is 1 | passed | 321ms |
| CertificateModal - Instance Behavior navigate(direction) method decrements index when direction is -1 | passed | 345ms |
| CertificateModal - Instance Behavior navigate(direction) method wraps forward at end (modulo logic) | passed | 485ms |
| CertificateModal - Instance Behavior navigate(direction) method wraps backward at start (modulo logic) | passed | 446ms |
| CertificateModal - Instance Behavior navigate(direction) method calls updateViewer after navigation | passed | 357ms |
| CertificateModal - Instance Behavior navigate(direction) method handles multiple navigations correctly | passed | 405ms |
| CertificateModal - Instance Behavior updateViewer() method updates image src with certificate image path | passed | 336ms |
| CertificateModal - Instance Behavior updateViewer() method updates image alt text with certificate title | passed | 384ms |
| CertificateModal - Instance Behavior updateViewer() method updates title element with certificate title | passed | 397ms |
| CertificateModal - Instance Behavior updateViewer() method updates category element with certificate category | passed | 358ms |
| CertificateModal - Instance Behavior updateViewer() method updates currentCert counter | passed | 342ms |
| CertificateModal - Instance Behavior updateViewer() method shows LinkedIn button when linkedinUrl exists | passed | 437ms |
| CertificateModal - Instance Behavior updateViewer() method hides LinkedIn button when linkedinUrl is missing | passed | 315ms |
| CertificateModal - Instance Behavior updateViewer() method updates viewFullBtn href with certificate image path | passed | 335ms |
| CertificateModal - Instance Behavior updateViewer() method applies basePath to image src and viewFullBtn | passed | 791ms |
| CertificateModal - Instance Behavior Event listener attachment attachEventListeners is called during init | passed | 713ms |
| CertificateModal - Instance Behavior Event listener attachment close button triggers close() | passed | 281ms |
| CertificateModal - Instance Behavior Event listener attachment next button navigates forward | passed | 307ms |
| CertificateModal - Instance Behavior Event listener attachment prev button navigates backward | passed | 296ms |
| CertificateModal - Instance Behavior Event listener attachment backToGrid button shows grid | passed | 348ms |
| CertificateModal - Instance Behavior Event listener attachment clicking modal background closes modal | passed | 372ms |
| CertificateModal - Instance Behavior Event listener attachment Escape key closes active modal | passed | 267ms |
| CertificateModal - Instance Behavior Event listener attachment navigate methods work when called directly | passed | 399ms |
| CertificateModal - Instance Behavior Event listener attachment showGrid method works when called directly | passed | 331ms |
| CertificateModal - Instance Behavior Event listener attachment keyboard events ignored when modal is not active | passed | 387ms |
| CertificateModal - Instance Behavior Render grid view grid items are created for certificates | passed | 296ms |
| CertificateModal - Instance Behavior Render grid view grid items are clickable to open certificate | passed | 373ms |
| CertificateModal - Instance Behavior Constructor edge cases returns early when modal container not found | passed | 372ms |
| CertificateModal - Instance Behavior Constructor edge cases initializes certificates array from module | passed | 314ms |
src/components/SideProjects.test.jsx
| Test | Status | Duration |
|---|---|---|
| SideProjects (tabbed project showcases) renders one tab per project with LoopBeat selected by default | passed | 1.68s |
| SideProjects (tabbed project showcases) shows only the LoopBeat showcase by default | passed | 860ms |
| SideProjects (tabbed project showcases) switches to the QA Forge showcase when its tab is clicked | passed | 925ms |
| SideProjects (tabbed project showcases) switches to the HELLGATE showcase when its tab is clicked | passed | 895ms |
| SideProjects (tabbed project showcases) updates the URL hash when switching projects | passed | 1.08s |
| SideProjects (tabbed project showcases) opens directly on the project named in the URL hash | passed | 295ms |
| SideProjects (tabbed project showcases) moves between projects with arrow keys | passed | 1.24s |
| SideProjects (tabbed project showcases) renders all 6 LoopBeat architecture pillars | passed | 770ms |
| SideProjects (tabbed project showcases) renders all 6 QA Forge tool pillars | passed | 1.02s |
| SideProjects (tabbed project showcases) renders all 6 HELLGATE architecture pillars | passed | 957ms |
| SideProjects (tabbed project showcases) mentions the key services and details of each project | passed | 1.52s |
| SideProjects (tabbed project showcases) renders the LoopBeat live app link opening securely in a new tab | passed | 263ms |
| SideProjects (tabbed project showcases) renders the QA Forge live app link opening securely in a new tab | passed | 605ms |
| SideProjects (tabbed project showcases) renders the HELLGATE live app link opening securely in a new tab | passed | 431ms |
| SideProjects (tabbed project showcases) renders 2 screenshots that fall back to a placeholder on load error | passed | 446ms |
| SideProjects (tabbed project showcases) opens the screenshot gallery when a screenshot is clicked | passed | 522ms |
| SideProjects (tabbed project showcases) hero preview falls back to a placeholder when the image is missing | passed | 274ms |
src/components/Contact.test.jsx
| Test | Status | Duration |
|---|---|---|
| Contact Component renders contact form with correct access key | passed | 1.40s |
| Contact Component handles successful submission | passed | 596ms |
| Contact Component prevents submission if too fast (bot check) | passed | 215ms |
| Contact Component handles API error (success: false) | passed | 494ms |
| Contact Component handles network error | passed | 627ms |
| Contact Component prevents submission if honeypot is filled (bot check) | passed | 262ms |
| Contact Component logs error when Web3Forms key is not configured | passed | 105ms |
src/components/Articles.test.jsx
| Test | Status | Duration |
|---|---|---|
| Articles Component displays Articles banner and themes | passed | 2.51s |
| Articles Component displays article cards including in-depth markdown and external articles | passed | 1.13s |
| Articles Component filters by Home Assistant theme | passed | 1.18s |
| Articles Component filters by Cypress theme | passed | 1.40s |
| Articles Component filters by search input | passed | 977ms |
| Articles Component renders translated follow card copy | passed | 728ms |
| Articles Component Hasura GraphQL Medium article link should be correct | passed | 1.00s |
| Articles Component Auth0 LinkedIn article link should be correct | passed | 785ms |
| Articles Component Cyprompt AI Dev.to article link should be correct | passed | 892ms |
| Articles Component Cyprompt article card should have correct tags | passed | 920ms |
| Articles Component Cyprompt article should have psychology icon | passed | 667ms |
| Articles Component Global Hooks login article link should be correct | passed | 1.05s |
| Articles Component Global Hooks article card should have correct tags | passed | 747ms |
| Articles Component Cypress 16 migration article should render with the correct link and metadata | passed | 736ms |
| Articles Component Home Assistant article points directly to dev.to | passed | 573ms |
| Articles Component Restored Cypress session article points directly to dev.to | passed | 689ms |
src/components/frameworks/AdvancedTesting.test.jsx
| Test | Status | Duration |
|---|---|---|
| AdvancedTesting Shared endpoints card renders "Endpoints Tested" label | passed | 646ms |
| AdvancedTesting Shared endpoints card renders 3 endpoint badges as links | passed | 892ms |
| AdvancedTesting API cards grid renders 3 API cards | passed | 241ms |
| AdvancedTesting k6 card renders title and subtitle | passed | 229ms |
| AdvancedTesting k6 card renders stats | passed | 257ms |
| AdvancedTesting k6 card renders 4 feature tiles | passed | 208ms |
| AdvancedTesting k6 card renders GitHub link | passed | 242ms |
| AdvancedTesting Jest + Supertest card renders title and subtitle | passed | 178ms |
| AdvancedTesting Jest + Supertest card renders stats | passed | 272ms |
| AdvancedTesting Jest + Supertest card renders 4 feature tiles | passed | 120ms |
| AdvancedTesting Jest + Supertest card renders GitHub link | passed | 185ms |
| AdvancedTesting Postman / Newman card renders title and subtitle | passed | 231ms |
| AdvancedTesting Postman / Newman card renders stats | passed | 181ms |
| AdvancedTesting Postman / Newman card renders 4 feature tiles | passed | 198ms |
| AdvancedTesting Postman / Newman card renders GitHub link | passed | 314ms |
| AdvancedTesting All CTA links all 3 API links open in new tab securely | passed | 246ms |
| AdvancedTesting All CTA links all CTA links have primary hover class | passed | 290ms |
| AdvancedTesting All CTA links renders live report links for all API repos | passed | 218ms |
| AdvancedTesting Theme CSS variables no card inlines its own accent, so every card reads as one palette | passed | 135ms |
src/components/hooks/useTheme.test.jsx
| Test | Status | Duration |
|---|---|---|
| useTheme hook defaults to dark theme when no saved preference exists | passed | 155ms |
| useTheme hook respects saved light theme from localStorage | passed | 33ms |
| useTheme hook follows OS prefers-color-scheme: light when nothing is stored | passed | 22ms |
| useTheme hook stays dark when the OS states no preference | passed | 22ms |
| useTheme hook a stored choice outranks the OS preference | passed | 26ms |
| useTheme hook toggles theme and updates localStorage and DOM | passed | 47ms |
| useTheme hook setTheme updates directly to light or dark | passed | 23ms |
| useTheme hook applyThemeToDocument updates meta theme-color tag if present | passed | 8ms |
| useDocumentTheme reads the theme stamped on <html> | passed | 70ms |
| useDocumentTheme falls back to dark when nothing is stamped or stored | passed | 22ms |
| useDocumentTheme re-renders when applyThemeToDocument flips the attribute | passed | 149ms |
| useDocumentTheme stops observing after unmount | passed | 39ms |
src/components/frameworks/FrameworkCard.test.jsx
| Test | Status | Duration |
|---|---|---|
| FrameworkCard renders card title and subtitle from i18n | passed | 432ms |
| FrameworkCard renders the themed icon for playwright | passed | 172ms |
| FrameworkCard renders only the first 3 stats | passed | 135ms |
| FrameworkCard renders only the first 6 highlights | passed | 120ms |
| FrameworkCard renders CTA link with correct attributes | passed | 369ms |
| FrameworkCard renders secondary live report CTA when provided | passed | 220ms |
| FrameworkCard does not render live report CTA when secondaryCta is omitted | passed | 144ms |
| FrameworkCard renders feature icons from framework metadata | passed | 79ms |
| FrameworkCard leaves the accent to the stylesheet instead of inlining a per-card hue | passed | 51ms |
| FrameworkCard themes uses cypress theme for cypress id | passed | 55ms |
| FrameworkCard themes uses selenium theme for selenium id | passed | 80ms |
| FrameworkCard themes falls back to playwright theme for unknown id | passed | 76ms |
| FrameworkCard icons renders the CTA icon inside the View on GitHub link | passed | 117ms |
| FrameworkCard icons renders the secondary CTA icon inside the Live Report link | passed | 86ms |
| FrameworkCard icons renders every feature icon from metadata | passed | 165ms |
| FrameworkCard icons renders all icons as decorative material icons | passed | 102ms |
tests/jest/csp-validation.test.js
| Test | Status | Duration |
|---|---|---|
| CSP Hash Generation should generate csp-hashes.json during build | passed | 31ms |
| CSP Hash Generation should generate correct SHA-256 hash for JSON-LD script | passed | 23ms |
| CSP Hash Generation should inject CSP hash into _headers file | passed | 10ms |
| CSP Hash Generation should NOT contain unsafe-inline in script-src | passed | 13ms |
| CSP Hash Generation should contain required CSP directives | passed | 24ms |
| CSP Hash Generation should allow required external script sources | passed | 2ms |
| CSP Hash Generation should keep fonts and styles first-party | passed | 13ms |
| CSP Hash Generation should temporarily allow unsafe-inline for styles | passed | 7ms |
| CSP Implementation Files should have gtag-init.js in dist/js/ | passed | 1ms |
| CSP Implementation Files should have vite-plugin-csp-hash.js at root | passed | 11ms |
| CSP Implementation Files should have generate-csp-headers.js script | passed | 9ms |
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 | 21ms |
| gtag-init.js - Google Analytics Initialization File Loading and Structure contains CSP compliance comment | passed | 10ms |
| gtag-init.js - Google Analytics Initialization DataLayer Initialization initializes window.dataLayer as empty array when undefined | passed | 28ms |
| gtag-init.js - Google Analytics Initialization DataLayer Initialization preserves existing dataLayer if already defined | passed | 31ms |
| gtag-init.js - Google Analytics Initialization gtag Function creates window.gtag function | passed | 14ms |
| gtag-init.js - Google Analytics Initialization gtag Function gtag pushes arguments to dataLayer | passed | 14ms |
| gtag-init.js - Google Analytics Initialization gtag Function gtag handles multiple calls | passed | 35ms |
| gtag-init.js - Google Analytics Initialization gtag Function gtag preserves all arguments passed to it | passed | 5ms |
| gtag-init.js - Google Analytics Initialization Integration with Google Analytics follows Google Analytics initialization pattern | passed | 4ms |
| gtag-init.js - Google Analytics Initialization Integration with Google Analytics supports event tracking | passed | 12ms |
| gtag-init.js - Google Analytics Initialization Integration with Google Analytics supports custom parameters | passed | 8ms |
| gtag-init.js - Google Analytics Initialization CSP Compliance does not use eval or Function constructor | passed | 12ms |
| gtag-init.js - Google Analytics Initialization CSP Compliance does not contain inline event handlers | passed | 2ms |
src/components/blog/Blog.test.jsx
| Test | Status | Duration |
|---|---|---|
| Blog Components BlogIndex renders blog header and articles | passed | 705ms |
| Blog Components BlogIndex filters articles by search input | passed | 692ms |
| Blog Components BlogIndex shows locale month and reading time on cards | passed | 288ms |
| Blog Components BlogIndex filters articles by tag button | passed | 788ms |
| Blog Components BlogIndex renders brand badges on post cards | passed | 204ms |
| Blog Components BlogPost renders single blog post with content and TOC | passed | 1.71s |
| Blog Components BlogPost renders Home Assistant blog post with cover image and content | passed | 465ms |
| Blog Components BlogPost renders Not Found state for invalid slug or unpublished draft | passed | 83ms |
| Blog Components blogIcons returns Home Assistant brand metadata for homeassistant posts | passed | 15ms |
| Blog Components blogIcons returns Cypress brand metadata for cypress posts | passed | 25ms |
| Blog Components blogIcons returns tag icons for known tags and null for unknown tags | passed | 11ms |
src/components/TestResults.test.jsx
| Test | Status | Duration |
|---|---|---|
| TestResults page renders the page claim and the four numbered sections | passed | 3.10s |
| TestResults page shows the failing count on the status plate and the run metadata | passed | 4.48s |
| TestResults page reports all green when nothing failed | passed | 1.86s |
| TestResults page displays Jest metrics and expands the suite list | passed | 2.26s |
| TestResults page displays E2E metrics computed from steps and expands flows into steps | passed | 2.89s |
| TestResults page displays coverage metrics | passed | 2.17s |
| TestResults page links every report to its static HTML page | passed | 2.02s |
| TestResults page renders four highlighted code samples labelled with their file paths | passed | 1.31s |
| TestResults page falls back to the bundled E2E snapshot when the Gist fetch fails | passed | 1.62s |
| TestResults page shows the empty states when neither Gist nor snapshot has data | passed | 2.18s |
| TestResults page loads test-data.js when the snapshot is not preloaded | passed | 2.02s |
| TestResults page reports a load failure when test-data.js cannot be fetched | passed | 1.19s |
src/components/CookieConsent.test.jsx
| Test | Status | Duration |
|---|---|---|
| CookieConsent Component renders banner when no cookie is present | passed | 723ms |
| CookieConsent Component does not render banner when cookie is already set | passed | 72ms |
| CookieConsent Component sets cookie and initializes GA on accept | passed | 193ms |
| CookieConsent Component sets cookie and does not initialize GA on decline | passed | 82ms |
| CookieConsent Component checks if running in production environment | passed | 71ms |
| CookieConsent Component tracks consent acceptance event with gtag | passed | 109ms |
| CookieConsent Component does not reinitialize analytics if gtag already exists | passed | 163ms |
| CookieConsent Component marks the page while the banner is visible so the report FAB can move up | passed | 82ms |
| CookieConsent Component clears banner offset styles after accepting cookies | passed | 140ms |
| CookieConsent Component clears banner offset styles after declining cookies | passed | 194ms |
src/components/Skills.test.jsx
| Test | Status | Duration |
|---|---|---|
| Skills Component displays blended What I Do & Tech Stack heading | passed | 2.17s |
| Skills Component groups skills into capability bands when "All Capabilities" tab is active | passed | 1.69s |
| Skills Component does NOT display WebAssembly category anywhere | passed | 1.37s |
| Skills Component filters bands when clicking tab buttons including "How I lead" | passed | 3.65s |
| Skills Component shows capability outcome lines alongside the tools | passed | 884ms |
| Skills Component lists Cursor in the GenAI section | passed | 980ms |
| Skills Component shows non-technical Team Leadership & Strategy chips with rich management skills | passed | 1.91s |
| Skills Component displays Programming Languages section | passed | 1.34s |
| Skills Component lists Next.js in the Programming Languages section | passed | 1.13s |
| Skills Component displays E2E Test Automation section | passed | 1.41s |
| Skills Component groups SQL validation under API Testing | passed | 1.26s |
| Skills Component displays CI/CD & DevOps section with Git | passed | 1.37s |
| Skills Component keeps Test Reporting focused on report outputs | passed | 1.24s |
| Skills Component displays Shell & Environment section | passed | 1.27s |
| Skills Component renders skill tiles with brand logos inside color-themed category cards | passed | 1.03s |
| Skills Component renders tablist accessibility container and tab roles correctly | passed | 903ms |
src/components/sideprojects/SideProjects.data.test.js
| Test | Status | Duration |
|---|---|---|
| sideProjectsList lists all showcased projects in order | passed | 13ms |
| sideProjectsList LoopBeat exposes the fields the showcase needs | passed | 60ms |
| sideProjectsList QA Forge exposes the fields the showcase needs | passed | 41ms |
| sideProjectsList HELLGATE exposes the fields the showcase needs | passed | 74ms |
| loopBeatStructure exposes core identity fields | passed | 1ms |
| loopBeatStructure has a primary external link | passed | 12ms |
| loopBeatStructure covers the expected architecture pillars | passed | 5ms |
| loopBeatStructure describes the full storage pipeline | passed | 15ms |
| loopBeatStructure lists app screenshots under public/images/loopbeat | passed | 10ms |
| qaForgeStructure exposes core identity fields | passed | 3ms |
| 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 | 0ms |
| qaForgeStructure lists app screenshots under public/images/qaforge | passed | 9ms |
| hellGateStructure exposes core identity fields | passed | 3ms |
| 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 | 9ms |
| hellGateStructure lists app screenshots under public/images/hellgate | passed | 1ms |
src/components/sideprojects/ScreenshotGallery.test.jsx
| Test | Status | Duration |
|---|---|---|
| ScreenshotGallery renders screenshots as zoomable buttons | passed | 615ms |
| ScreenshotGallery opens a zoomed gallery dialog when a screenshot is clicked | passed | 389ms |
| ScreenshotGallery navigates between screenshots in the gallery | passed | 357ms |
| ScreenshotGallery supports arrow-key navigation inside the gallery | passed | 228ms |
| ScreenshotGallery closes the gallery with Escape, close button, and backdrop click | passed | 581ms |
| ScreenshotGallery falls back to a placeholder and removes the zoom button when an image fails | passed | 190ms |
src/StaticAssets.test.js
| Test | Status | Duration |
|---|---|---|
| Static Assets & Configuration index.html Favicons has apple-touch-icon | passed | 24ms |
| Static Assets & Configuration index.html Favicons has 32x32 PNG favicon | passed | 1ms |
| Static Assets & Configuration index.html Favicons has 16x16 PNG favicon | passed | 11ms |
| Static Assets & Configuration index.html Favicons has webmanifest | passed | 8ms |
| Static Assets & Configuration Performance Optimizations loads no third-party font or icon CSS | passed | 10ms |
| Static Assets & Configuration Performance Optimizations preloads the self-hosted display and icon fonts | passed | 11ms |
| Static Assets & Configuration Performance Optimizations does not include CSP meta tag (CSP is enforced via HTTP headers) | passed | 9ms |
| Static Assets & Configuration SEO Meta Tags has meta description | passed | 0ms |
| Static Assets & Configuration SEO Meta Tags has canonical link | passed | 1ms |
| Static Assets & Configuration SEO Meta Tags has Open Graph tags | passed | 12ms |
| Static Assets & Configuration SEO Meta Tags has Twitter card tags | passed | 1ms |
| Static Assets & Configuration CSS Variables defines core theme colors | passed | 2ms |
src/components/LiveTestRunner.test.jsx
| Test | Status | Duration |
|---|---|---|
| LiveTestRunner Component renders in initial idle state with run button and test stats | passed | 890ms |
| LiveTestRunner Component executes all tests when run button is clicked | passed | 5.63s |
| LiveTestRunner Component filters tests by status pills | passed | 251ms |
| LiveTestRunner Component suite list is hidden until revealed | passed | 745ms |
| LiveTestRunner Component suites start collapsed and toggle on click | passed | 438ms |
| LiveTestRunner Component offers collapse all after a run, then expand all again | passed | 5.12s |
| LiveTestRunner Component running the suite expands every suite | passed | 508ms |
| LiveTestRunner Component passes WAI-ARIA dialog compliance when CookieConsent banner is active in the DOM | passed | 58ms |
src/components/frameworks/Frameworks.data.test.js
| Test | Status | Duration |
|---|---|---|
| Frameworks.data exports an array of 9 frameworks | passed | 26ms |
| Frameworks.data llmEval has required fields | passed | 37ms |
| Frameworks.data promptfoo has required fields | passed | 35ms |
| Frameworks.data playwright has required fields | passed | 80ms |
| Frameworks.data cypressTs has required fields | passed | 21ms |
| Frameworks.data cypressBdd has required fields | passed | 9ms |
| Frameworks.data openapi has required fields | passed | 11ms |
| Frameworks.data pact has required fields | passed | 12ms |
| Frameworks.data seleniumJunit has required fields | passed | 27ms |
| Frameworks.data seleniumTestng has required fields | passed | 21ms |
| Frameworks.data llmEval has exactly 6 feature icons | passed | 14ms |
| Frameworks.data promptfoo has exactly 6 feature icons | passed | 12ms |
| Frameworks.data playwright has exactly 6 feature icons | passed | 11ms |
| Frameworks.data cypressTs has exactly 6 feature icons | passed | 16ms |
| Frameworks.data cypressBdd has exactly 6 feature icons | passed | 2ms |
| Frameworks.data openapi has exactly 6 feature icons | passed | 43ms |
| Frameworks.data pact has exactly 6 feature icons | passed | 12ms |
| Frameworks.data seleniumJunit has exactly 6 feature icons | passed | 2ms |
| Frameworks.data seleniumTestng has exactly 6 feature icons | passed | 10ms |
| Frameworks.data llmEval has a valid CTA with href and icon | passed | 9ms |
| Frameworks.data promptfoo has a valid CTA with href and icon | passed | 0ms |
| Frameworks.data playwright has a valid CTA with href and icon | passed | 13ms |
| Frameworks.data cypressTs has a valid CTA with href and icon | passed | 1ms |
| Frameworks.data cypressBdd has a valid CTA with href and icon | passed | 14ms |
| Frameworks.data openapi has a valid CTA with href and icon | passed | 1ms |
| Frameworks.data pact has a valid CTA with href and icon | passed | 1ms |
| Frameworks.data seleniumJunit has a valid CTA with href and icon | passed | 12ms |
| Frameworks.data seleniumTestng has a valid CTA with href and icon | passed | 0ms |
| Frameworks.data framework IDs match recognized frameworks | passed | 12ms |
| Frameworks.data contains AI LLM entries | passed | 2ms |
| Frameworks.data contains Contract Testing entries | passed | 16ms |
| Frameworks.data contains Legacy E2E entries | passed | 1ms |
| Frameworks.data all CTA hrefs are unique | passed | 1ms |
| Frameworks.data eight frameworks expose a live report link | passed | 20ms |
| Frameworks.data icons llmEval uses the shared code icon for the View on GitHub CTA | passed | 1ms |
| 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 | 14ms |
| Frameworks.data icons cypressTs uses the shared code icon for the View on GitHub CTA | passed | 0ms |
| 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 | 14ms |
| Frameworks.data icons pact uses the shared code icon for the View on GitHub CTA | passed | 16ms |
| Frameworks.data icons seleniumJunit uses the shared code icon for the View on GitHub CTA | passed | 1ms |
| 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 | 0ms |
| Frameworks.data icons promptfoo uses the shared assessment icon for the Live Report CTA | passed | 1ms |
| Frameworks.data icons playwright uses the shared assessment icon for the Live Report CTA | passed | 10ms |
| 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 | 1ms |
| Frameworks.data icons openapi uses the shared assessment icon for the Live Report CTA | passed | 4ms |
| 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 | 1ms |
| Frameworks.data icons every CTA icon across all frameworks is identical | passed | 16ms |
| Frameworks.data icons llmEval feature icons are lowercase material icon ligatures | passed | 10ms |
| Frameworks.data icons promptfoo feature icons are lowercase material icon ligatures | passed | 14ms |
| Frameworks.data icons playwright feature icons are lowercase material icon ligatures | passed | 1ms |
| Frameworks.data icons cypressTs feature icons are lowercase material icon ligatures | passed | 13ms |
| Frameworks.data icons cypressBdd feature icons are lowercase material icon ligatures | passed | 2ms |
| Frameworks.data icons openapi feature icons are lowercase material icon ligatures | passed | 9ms |
| Frameworks.data icons pact feature icons are lowercase material icon ligatures | passed | 12ms |
| Frameworks.data icons seleniumJunit feature icons are lowercase material icon ligatures | passed | 2ms |
| Frameworks.data icons seleniumTestng feature icons are lowercase material icon ligatures | passed | 11ms |
src/components/Hero.test.jsx
| Test | Status | Duration |
|---|---|---|
| Hero Component Profile Section displays profile image with correct attributes | passed | 574ms |
| Hero Component Profile Section displays correct name | passed | 657ms |
| Hero Component Profile Section displays professional title | passed | 200ms |
| Hero Component Profile Section displays location | passed | 191ms |
| Hero Component Hero pitch and CTAs renders the portrait without an overlaid stat badge | passed | 240ms |
| Hero Component Hero pitch and CTAs renders primary homepage CTAs | passed | 507ms |
| Hero Component Hero pitch and CTAs calls onOpenContact when send message is clicked | passed | 479ms |
| Hero Component Hero pitch and CTAs renders live test links that lead to the Test Results page | passed | 373ms |
| Hero Component Quick Impact Metrics displays Quick Impact Metrics heading | passed | 190ms |
| Hero Component Quick Impact Metrics displays supporting metrics | passed | 198ms |
| Hero portrait follows the document theme uses the white-backdrop headshot when <html data-theme="light"> | passed | 86ms |
| Hero portrait follows the document theme swaps the headshot live when the theme toggles | passed | 251ms |
src/components/Frameworks.test.jsx
| Test | Status | Duration |
|---|---|---|
| Frameworks Component renders main title and description | passed | 1.70s |
| Frameworks Component Shared saucedemo.com target card renders saucedemo.com badge | passed | 804ms |
| Frameworks Component Shared saucedemo.com target card saucedemo.com badge links to the site | passed | 1.74s |
| Frameworks Component Shared saucedemo.com target card renders Testing label | passed | 683ms |
| Frameworks Component renders correct number of framework cards renders 9 framework cards and 12 total GitHub links across all sections | passed | 1.17s |
| Frameworks Component renders correct number of framework cards renders 11 live report links for repos that publish HTML reports | passed | 1.07s |
| Frameworks Component renders correct number of framework cards selenium JUnit card omits live report CTA | passed | 944ms |
| Frameworks Component Playwright Section renders card title and subtitle | passed | 896ms |
| Frameworks Component Playwright Section renders stat badges | passed | 893ms |
| Frameworks Component Playwright Section renders all 6 highlights | passed | 1.09s |
| Frameworks Component Playwright Section renders View on GitHub CTA link with correct href | passed | 888ms |
| Frameworks Component Cypress TypeScript Section renders card title and subtitle | passed | 661ms |
| Frameworks Component Cypress TypeScript Section renders stat badges | passed | 819ms |
| Frameworks Component Cypress TypeScript Section renders all 6 highlights | passed | 1.11s |
| Frameworks Component Cypress TypeScript Section renders CTA link with correct href | passed | 1.16s |
| Frameworks Component Cypress BDD Section renders card title and subtitle | passed | 614ms |
| Frameworks Component Cypress BDD Section renders stat badges | passed | 652ms |
| Frameworks Component Cypress BDD Section renders all 6 highlights | passed | 972ms |
| Frameworks Component Cypress BDD Section renders CTA link with correct href | passed | 984ms |
| Frameworks Component Selenium JUnit Section renders card title and subtitle | passed | 646ms |
| Frameworks Component Selenium JUnit Section renders stat badges | passed | 566ms |
| Frameworks Component Selenium JUnit Section renders all 6 highlights | passed | 859ms |
| Frameworks Component Selenium JUnit Section renders CTA link with correct href | passed | 814ms |
| Frameworks Component Selenium TestNG Section renders card title and subtitle | passed | 476ms |
| Frameworks Component Selenium TestNG Section renders stat badges | passed | 697ms |
| Frameworks Component Selenium TestNG Section renders all 6 highlights | passed | 1.30s |
| Frameworks Component Selenium TestNG Section renders CTA link with correct href | passed | 1.13s |
| Frameworks Component API & Performance Testing Section renders section header and description | passed | 697ms |
| Frameworks Component API & Performance Testing Section renders shared endpoints card with label | passed | 539ms |
| Frameworks Component API & Performance Testing Section renders endpoint badges as links with correct hrefs | passed | 1.08s |
| Frameworks Component API & Performance Testing Section renders k6 card title, subtitle, stats, and highlights | passed | 1.13s |
| Frameworks Component API & Performance Testing Section renders Supertest card title, subtitle, stats, and highlights | passed | 925ms |
| Frameworks Component API & Performance Testing Section renders Postman card title, subtitle, stats, and highlights | passed | 1.64s |
| Frameworks Component API & Performance Testing Section renders View on GitHub links for all 3 API repos with correct hrefs | passed | 525ms |
| Frameworks Component API & Performance Testing Section all API CTA links open in new tab | passed | 539ms |
| Frameworks Component AI & LLM Testing Section renders section header and AI LLM cards | passed | 649ms |
| Frameworks Component AI & LLM Testing Section renders correct GitHub repository and Live Report links for AI LLM examples | passed | 1.26s |
| Frameworks Component Contract Testing Section renders section header and Contract Testing cards | passed | 800ms |
| Frameworks Component Contract Testing Section renders correct GitHub repository and Live Report links for Contract Testing examples | passed | 1.06s |
| Frameworks Component Legacy E2E Testing Examples Section renders Legacy E2E section header and moved Selenium cards | passed | 516ms |
tests/jest/certificates-min.test.js
| Test | Status | Duration |
|---|---|---|
| certificates.min.js - Minified Version File Verification minified file exists | passed | 16ms |
| certificates.min.js - Minified Version File Verification minified file is smaller than source file | passed | 12ms |
| certificates.min.js - Minified Version File Verification contains expected minified patterns | passed | 7ms |
| certificates.min.js - Minified Version File Verification contains certificate data | passed | 1ms |
| certificates.min.js - Minified Version File Verification contains key functions from source | passed | 12ms |
| certificates.min.js - Minified Version Content Integrity does not contain syntax errors | passed | 6ms |
| certificates.min.js - Minified Version Content Integrity file is not empty | passed | 5ms |
src/components/hooks/useFocusTrap.test.jsx
| Test | Status | Duration |
|---|---|---|
| useFocusTrap should focus the first element when active | passed | 194ms |
| useFocusTrap should not focus the first element when inactive | passed | 22ms |
| useFocusTrap should trap focus inside the container | passed | 77ms |
| useFocusTrap should trap focus when shift-tabbing from first element | passed | 44ms |
| useFocusTrap should do nothing if no focusable elements found | passed | 15ms |
tests/jest/report-io.test.js
| Test | Status | Duration |
|---|---|---|
| report-io E2E resolution ensureE2EReportOnDisk copies a discovered summary into the canonical path | passed | 42ms |
| report-io E2E resolution readE2EReport returns null when no summary exists in an empty tree | passed | 13ms |
| report-io E2E resolution resolveE2EBaseUrl maps CI preview hosts to the public site URL | passed | 17ms |
src/i18n/detection.test.js
| Test | Status | Duration |
|---|---|---|
| i18n language detection falls back to English when nothing is set | passed | 122ms |
| i18n language detection uses the navigator language when supported | passed | 135ms |
| i18n language detection maps a regional code onto its base language | passed | 144ms |
| i18n language detection a saved localStorage choice wins over the navigator language | passed | 259ms |
| i18n language switching changeLanguage persists the choice to localStorage | passed | 165ms |
| i18n language switching changeLanguage syncs <html lang> to the base language | passed | 234ms |
| i18n language switching <html lang> is set on init from the detected language | passed | 206ms |
| i18n language switching falls back to English content for an unsupported language | passed | 159ms |
src/components/skills/skillsData.test.js
| Test | Status | Duration |
|---|---|---|
| skillsData exports a non-empty array of skill categories | passed | 17ms |
| skillsData does not contain the WebAssembly (wasm) category | passed | 10ms |
| skillsData contains expanded non-technical Team Leadership & Strategy category | passed | 24ms |
| skillsData ensures all category i18nKeys are unique | passed | 9ms |
| skillsData validates structure of each category | passed | 181ms |
| skillsData validates structure and icons of each skill item | passed | 429ms |
tests/jest/generate-html-reports.test.js
| Test | Status | Duration |
|---|---|---|
| generate-html-reports coverage helpers normalizeCoveragePath strips absolute project paths | passed | 28ms |
| generate-html-reports coverage helpers getCoverageReport prefers raw coverage with file entries | passed | 8ms |
| generate-html-reports coverage helpers getCoverageReport falls back to dashboard coverageFiles when raw files are missing | passed | 3ms |
| generate-html-reports coverage helpers collectCoverageFiles normalizes paths and sorts worst-first | passed | 12ms |
| generate-html-reports coverage helpers isCoverageLikelyIncomplete detects partial instrumentation runs | passed | 3ms |
tests/jest/css-variables.test.js
| Test | Status | Duration |
|---|---|---|
| CSS Variables & Theming should define core theme colors | passed | 61ms |
| CSS Variables & Theming should use consistent gradient variables | passed | 1ms |
| CSS Variables & Theming should consistency usage of z-index | passed | 23ms |
src/components/Footer.test.jsx
| Test | Status | Duration |
|---|---|---|
| Footer Component renders footer content | passed | 609ms |
| Footer Component renders social links with correct hrefs | passed | 645ms |
| Footer Component renders in-site navigation to every top-level route | passed | 414ms |
| Footer Component renders social links with correct hrefs | passed | 293ms |
| Footer Component back-to-top button scrolls the window to the top | passed | 218ms |
tests/jest/env-utils.test.js
| Test | Status | Duration |
|---|---|---|
| env utilities getEnv returns VITE_WEB3FORMS_KEY from the test environment | passed | 20ms |
| env utilities getEnv returns VITE_GIST_USERNAME from the test environment | passed | 6ms |
| env utilities getEnv returns VITE_GIST_ID from the test environment | passed | 5ms |
| env utilities getEnv returns DEV from the test environment | passed | 3ms |
| env utilities getEnv returns PROD from the test environment | passed | 2ms |
| env utilities getEnv returns MODE from the test environment | passed | 5ms |
| env utilities getEnv returns undefined for unknown keys | passed | 20ms |
| env utilities getEnv is case-sensitive for keys | passed | 3ms |
| env utilities isDev returns true when DEV is true | passed | 3ms |
| env utilities isDev returns false when DEV is false or missing | passed | 3ms |
| env utilities isProd returns true when PROD is true | passed | 39ms |
| env utilities isProd returns false when PROD is false | passed | 9ms |
| env utilities isProd defaults to true when PROD is missing | passed | 7ms |
src/components/UnifiedShowcase.test.jsx
| Test | Status | Duration |
|---|---|---|
| UnifiedShowcase Component renders unified showcase title and subtitle | passed | 2.61s |
| UnifiedShowcase Component renders all master navigation tabs | passed | 1.23s |
| UnifiedShowcase Component switches active tab when clicked | passed | 2.02s |
| UnifiedShowcase Component renders accordion dropdown triggers for all sections | passed | 1.90s |
| UnifiedShowcase Component toggles accordion section on click | passed | 1.80s |
| UnifiedShowcase Component toggles all sections via the Expand/Collapse all button | passed | 2.08s |
src/App.scroll.test.jsx
| Test | Status | Duration |
|---|---|---|
| App Scroll Integration App scrolls to element defined in location.state.scrollTo on mount | passed | 2.73s |
| App Scroll Integration App does NOT scroll if location.state.scrollTo is missing | passed | 2.01s |
| App Scroll Integration App does NOT scroll to top when navigating home with scrollTo state | passed | 2.66s |
| App Scroll Integration scrolls to top when navigating to a subpage through the navbar | passed | 2.71s |
src/components/Experience.test.jsx
| Test | Status | Duration |
|---|---|---|
| Experience Component displays compact section header | passed | 1.05s |
| Experience Component renders a timeline with Board International first | passed | 152ms |
| Experience Component displays Board International experience | passed | 166ms |
| Experience Component displays Electronic Arts as the earliest role | passed | 274ms |
| Experience Component links each company to its site in a new tab | passed | 313ms |
| Experience Component does not render case study buttons | passed | 200ms |
src/App.links.test.jsx
| Test | Status | Duration |
|---|---|---|
| App Integration Tests - Links & Navigation Navigation Bar renders brand logo with correct text | passed | 2.70s |
| App Integration Tests - Links & Navigation Navigation Bar renders main navigation links | passed | 1.54s |
| App Integration Tests - Links & Navigation External Links Security all external links have rel="noopener noreferrer" and target="_blank" | passed | 2.32s |
| App Integration Tests - Links & Navigation Critical Links Presence contains LinkedIn link | passed | 2.31s |
| App Integration Tests - Links & Navigation Critical Links Presence contains Calendly link | passed | 2.40s |
| App Integration Tests - Links & Navigation Critical Links Presence contains Medium/Articles links | passed | 3.78s |
| App Integration Tests - Links & Navigation Internal Navigation internal anchor links start with # | passed | 2.44s |
src/components/skills/SkillCategory.test.jsx
| Test | Status | Duration |
|---|---|---|
| SkillCategory & SkillTile Subcomponents renders category header, outcome, and list of skill tiles | passed | 575ms |
| SkillCategory & SkillTile Subcomponents renders skill-category--soft when skills array is empty | passed | 9ms |
src/components/subpages.i18n.test.jsx
| Test | Status | Duration |
|---|---|---|
| Sub-page i18n Skills page renders translated copy in en | passed | 2.17s |
| Sub-page i18n Skills page renders translated copy in pt | passed | 1.56s |
| Sub-page i18n Skills page renders translated copy in es | passed | 1.41s |
| Sub-page i18n Articles page renders translated copy in en | passed | 809ms |
| Sub-page i18n Articles page renders translated copy in pt | passed | 423ms |
| Sub-page i18n Articles page renders translated copy in es | passed | 577ms |
| Sub-page i18n Frameworks page renders translated copy in en | passed | 822ms |
| Sub-page i18n Frameworks page renders translated copy in pt | passed | 858ms |
| Sub-page i18n Frameworks page renders translated copy in es | passed | 656ms |
| Sub-page i18n SideProjects page renders translated copy in en | passed | 341ms |
| Sub-page i18n SideProjects page renders translated copy in pt | passed | 335ms |
| Sub-page i18n SideProjects page renders translated copy in es | passed | 458ms |
| Sub-page i18n TestResults page renders translated copy in en | passed | 1.42s |
| Sub-page i18n TestResults page renders translated copy in pt | passed | 1.04s |
| Sub-page i18n TestResults page renders translated copy in es | passed | 677ms |
src/components/hooks/useFetch.test.jsx
| Test | Status | Duration |
|---|---|---|
| useFetch should return data when fetch is successful | passed | 234ms |
| useFetch should return error when fetch fails | passed | 67ms |
| useFetch should return error when fetch throws an exception | passed | 71ms |
tests/jest/main-chunk-reload.test.js
| Test | Status | Duration |
|---|---|---|
| main.jsx handleChunkError reloads location on first asset load error | passed | 55ms |
| main.jsx handleChunkError prevents infinite reloads on consecutive errors within cooldown window | passed | 10ms |
| main.jsx handleChunkError does not reload for standard non-chunk runtime errors | passed | 4ms |
| main.jsx handleChunkError handles event object with nested error.message | passed | 5ms |
tests/jest/icon-font-subset.test.js
| Test | Status | Duration |
|---|---|---|
| Material Icons subset every icon name reachable from src/ ships in the subset | passed | 281ms |
| Material Icons subset the served font stays a subset, not the full family | passed | 10ms |
tests/jest/blog-generator.test.js
| Test | Status | Duration |
|---|---|---|
| Blog Generator & Prerender Pipeline slugify converts title to kebab-case slug | passed | 25ms |
| Blog Generator & Prerender Pipeline parseFrontmatter parses YAML frontmatter blocks correctly | passed | 13ms |
| Blog Generator & Prerender Pipeline parseFrontmatter handles files without frontmatter gracefully | passed | 22ms |
| Blog Generator & Prerender Pipeline generateBlogData scans content/blog/*.md, outputs blogPosts.json and updates sitemap.xml | passed | 1.34s |
| Blog Generator & Prerender Pipeline prerender generates dist/blog and dist/blog/:slug directories when dist exists | passed | 33.89s |
src/i18n/routing.test.js
| Test | Status | Duration |
|---|---|---|
| language routing helpers reads the language prefix from a path | passed | 63ms |
| language routing helpers maps a language onto a router basename | passed | 4ms |
| language routing helpers strips the prefix and keeps the rest of the path | passed | 3ms |
| language routing helpers localizes a path for a language, replacing any existing prefix | passed | 11ms |
tests/jest/generate-test-data.test.js
| Test | Status | Duration |
|---|---|---|
| generate-test-data coverage helpers normalizeCoveragePath returns project-relative paths | passed | 29ms |
| generate-test-data coverage helpers generateCoverageData splits totals and per-file metrics | passed | 33ms |
| generate-test-data coverage helpers generateCoverageData returns empty shape when report is missing | passed | 2ms |
src/components/ErrorBoundary.test.jsx
| Test | Status | Duration |
|---|---|---|
| ErrorBoundary renders children when there is no error | passed | 219ms |
| ErrorBoundary renders error UI when there is an error | passed | 1.09s |
| ErrorBoundary error UI contains error icon | passed | 149ms |
src/components/Security.test.jsx
| Test | Status | Duration |
|---|---|---|
| Security and Performance Checks CertificatesModal renders safely without throwing when disabled/sunsetted | passed | 60ms |
| Security and Performance Checks Footer external links have rel="noopener noreferrer" | passed | 960ms |
src/data/certificates.test.js
| Test | Status | Duration |
|---|---|---|
| Certificate Data Validation should have exactly 35 certificates | passed | 19ms |
| Certificate Data Validation all certificates should have required fields | passed | 425ms |
| Certificate Data Validation all certificates should have valid image paths | passed | 61ms |
| Certificate Data Validation all certificates should have valid LinkedIn URLs | passed | 34ms |
src/i18n/i18n.test.js
| Test | Status | Duration |
|---|---|---|
| i18n locale key parity pt has exactly the same keys as en | passed | 49ms |
| i18n locale key parity es has exactly the same keys as en | passed | 36ms |
| i18n locale key parity en has no empty translation values | passed | 25ms |
| i18n locale key parity pt has no empty translation values | passed | 12ms |
| i18n locale key parity es has no empty translation values | passed | 12ms |
tests/jest/navbar-responsive-css.test.js
| Test | Status | Duration |
|---|---|---|
| Navbar responsive CSS scoping style.min.css does not apply small-breakpoint nav rules to nav.main-nav | passed | 26ms |
src/components/skills/brandColor.test.js
| Test | Status | Duration |
|---|---|---|
| brandColor - toDarkSurface returns high contrast hex values unchanged | passed | 18ms |
| brandColor - toDarkSurface lifts pure black and near-black colors to neutral light grey for dark surface visibility | passed | 10ms |
| brandColor - toDarkSurface handles 3-digit hex format correctly | passed | 1ms |
| brandColor - toDarkSurface returns original string when input is invalid hex | passed | 8ms |
src/components/frameworks/Frameworks.i18n.test.jsx
| Test | Status | Duration |
|---|---|---|
| Frameworks i18n renders translated page copy in pt | passed | 1.44s |
| Frameworks i18n renders translated page copy in es | passed | 817ms |
| Frameworks i18n renders translated API section labels in Portuguese | passed | 1.65s |
src/components/hooks/useKeyPress.test.jsx
| Test | Status | Duration |
|---|---|---|
| useKeyPress should call action when matching key is pressed | passed | 140ms |
| useKeyPress should not call action when different key is pressed | passed | 46ms |
| useKeyPress should cleanup event listener on unmount | passed | 36ms |
src/components/CrossPage.test.jsx
| Test | Status | Duration |
|---|---|---|
| Cross-Page Consistency Home Page renders Navbar with brand logo | passed | 4.06s |
| Cross-Page Consistency Home Page renders Footer | passed | 1.82s |
| Cross-Page Consistency Home Page renders main navigation links | passed | 2.06s |
| Cross-Page Consistency Frameworks Page renders Navbar with brand logo | passed | 1.38s |
| Cross-Page Consistency Frameworks Page renders Footer | passed | 1.61s |
| Cross-Page Consistency Frameworks Page renders main navigation links | passed | 1.05s |
| Cross-Page Consistency SideProjects Page renders Navbar with brand logo | passed | 804ms |
| Cross-Page Consistency SideProjects Page renders Footer | passed | 554ms |
| Cross-Page Consistency SideProjects Page renders main navigation links | passed | 568ms |
src/components/FooterNavigation.test.jsx
| Test | Status | Duration |
|---|---|---|
| Footer Navigation Logic calls onOpenContact when clicking "Send Message" | passed | 811ms |
| Footer Navigation Logic does not throw when "Send Message" clicked without onOpenContact | passed | 251ms |
src/components/hooks/useModal.test.jsx
| Test | Status | Duration |
|---|---|---|
| useModal should initialize with isOpen as false | passed | 71ms |
| useModal should set isOpen to true when openModal is called | passed | 19ms |
| useModal should set isOpen to false when closeModal is called | passed | 13ms |
src/components/Booking.test.jsx
| Test | Status | Duration |
|---|---|---|
| Booking Functionality Footer Booking Button renders booking button with correct attributes | passed | 602ms |
src/components/Footer.i18n.test.jsx
| Test | Status | Duration |
|---|---|---|
| Footer i18n renders Spanish connect copy when language is es | passed | 522ms |
src/components/CertificatesModal.test.jsx
| Test | Status | Duration |
|---|---|---|
| CertificatesModal Component (Disabled) returns null and does not render when isOpen is false | passed | 174ms |
| CertificatesModal Component (Disabled) returns null and does not render when isOpen is true (modal disabled) | passed | 19ms |
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 | 3ms |
| hooks index should export useTheme | passed | 0ms |