Files
cv-site/tests/mjs/45-mobile-modal-comprehensive-test.mjs
T

85 lines
3.2 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
/**
* Comprehensive test: Info Modal Font Sizes Across Device Sizes
* Purpose: Verify font scaling works correctly from mobile to tablet to desktop
* Date: 2025-11-27
*/
import { launch } from 'puppeteer';
const BASE_URL = process.env.CV_TEST_URL || 'http://localhost:1999';
const VIEWPORTS = [
{ name: 'iPhone SE', width: 375, height: 667 },
{ name: 'iPhone 12 Pro', width: 390, height: 844 },
{ name: 'iPad Mini', width: 768, height: 1024 },
{ name: 'iPad Pro', width: 1024, height: 1366 },
{ name: 'Desktop', width: 1440, height: 900 }
];
async function testModalAcrossDevices() {
console.log('🧪 Testing Info Modal Font Sizes Across Devices...\n');
const browser = await launch({ headless: true });
for (const viewport of VIEWPORTS) {
const page = await browser.newPage();
await page.setViewport({
width: viewport.width,
height: viewport.height,
isMobile: viewport.width < 768
});
try {
await page.goto(`${BASE_URL}?lang=en`, { waitUntil: 'networkidle0' });
await page.waitForSelector('#info-button', { visible: true });
await page.click('#info-button');
await page.waitForSelector('#info-modal[open]', { visible: true, timeout: 3000 });
await new Promise(resolve => setTimeout(resolve, 500));
const metrics = await page.evaluate(() => {
const getFontSize = (selector) => {
const element = document.querySelector(selector);
if (!element) return null;
return window.getComputedStyle(element).fontSize;
};
const modalRect = document.querySelector('#info-modal').getBoundingClientRect();
return {
title: getFontSize('.info-modal-header h2'),
cvTitle: getFontSize('.info-modal-cv-title'),
description: getFontSize('.info-modal-description'),
techItem: getFontSize('.info-tech-item span'),
githubButton: getFontSize('.info-modal-github'),
modalWidth: Math.round(modalRect.width),
modalHeight: Math.round(modalRect.height),
fitsInViewport: modalRect.width <= window.innerWidth && modalRect.height <= window.innerHeight
};
});
console.log(`📱 ${viewport.name} (${viewport.width}x${viewport.height})`);
console.log(` Title: ${metrics.title}`);
console.log(` CV Title: ${metrics.cvTitle}`);
console.log(` Description: ${metrics.description}`);
console.log(` Tech Items: ${metrics.techItem}`);
console.log(` GitHub Button: ${metrics.githubButton}`);
console.log(` Modal Size: ${metrics.modalWidth}x${metrics.modalHeight}`);
console.log(` Fits in Viewport: ${metrics.fitsInViewport ? '✅' : '❌'}`);
console.log('');
} catch (error) {
console.error(` ❌ Error testing ${viewport.name}:`, error.message);
}
await page.close();
}
await browser.close();
console.log('✅ Test completed for all devices');
}
testModalAcrossDevices();