Files
cv-site/tests/mjs/48-mobile-landscape-and-blur-test.mjs
T
juanatsap dc5bb3d4f3 fix: Show photo at 50% size in landscape mode instead of hiding
Changed landscape orientation behavior to display profile photo
at reduced size (50% width, max 80px) instead of hiding it completely.

Changes:
- static/css/05-responsive/_breakpoints.css: Changed from display:none to width:50%
- tests/mjs/48-mobile-landscape-and-blur-test.mjs: Updated test to verify photo visibility

Test Results:
 Photo visible in landscape: YES
 Photo width: 80px (max: 80px)
 Landscape mode optimized with visible photo

Screenshot: tests/screenshots/mobile-landscape-optimized.png
2025-11-23 08:24:59 +00:00

125 lines
4.8 KiB
JavaScript

#!/usr/bin/env node
import { chromium } from 'playwright';
const PORTRAIT = { width: 375, height: 667 }; // iPhone SE portrait
const LANDSCAPE = { width: 667, height: 375 }; // iPhone SE landscape
(async () => {
const browser = await chromium.launch({ headless: true });
console.log('🧪 Testing Mobile Portrait & Landscape Views\n');
// TEST 1: Portrait with Blur Bar
console.log('📱 TEST 1: Portrait Mode with iOS Blur Bar\n');
const portraitContext = await browser.newContext({ viewport: PORTRAIT });
const portraitPage = await portraitContext.newPage();
await portraitPage.goto('http://localhost:1999/?lang=en&view=extended');
await portraitPage.waitForLoadState('networkidle');
// Check for blur backdrop
const blurBackdrop = await portraitPage.locator('.fixed-buttons-backdrop');
const backdropExists = await blurBackdrop.count() > 0;
console.log(`📊 Blur Backdrop:`);
console.log(` • Element exists: ${backdropExists ? '✅' : '❌'}`);
if (backdropExists) {
const backdropStyles = await blurBackdrop.evaluate(el => {
const computed = window.getComputedStyle(el);
return {
position: computed.position,
bottom: computed.bottom,
height: computed.height,
backdropFilter: computed.backdropFilter,
background: computed.background,
borderTop: computed.borderTop,
zIndex: computed.zIndex
};
});
console.log(` • Position: ${backdropStyles.position}`);
console.log(` • Bottom: ${backdropStyles.bottom}`);
console.log(` • Height: ${backdropStyles.height}`);
console.log(` • Backdrop filter: ${backdropStyles.backdropFilter}`);
console.log(` • Border top: ${backdropStyles.borderTop}`);
console.log(` • Z-index: ${backdropStyles.zIndex}`);
const hasBlur = backdropStyles.backdropFilter.includes('blur');
const isFixed = backdropStyles.position === 'fixed';
const atBottom = backdropStyles.bottom === '0px';
console.log(`\n✅ Blur Bar Check:`);
console.log(` • Fixed position: ${isFixed ? '✅' : '❌'}`);
console.log(` • At bottom: ${atBottom ? '✅' : '❌'}`);
console.log(` • Has blur effect: ${hasBlur ? '✅' : '❌'}`);
}
await portraitPage.screenshot({
path: 'tests/screenshots/mobile-portrait-blur-bar.png',
fullPage: true
});
console.log('\n📸 Screenshot: tests/screenshots/mobile-portrait-blur-bar.png');
await portraitContext.close();
// TEST 2: Landscape Orientation
console.log('\n📱 TEST 2: Landscape Mode\n');
const landscapeContext = await browser.newContext({ viewport: LANDSCAPE });
const landscapePage = await landscapeContext.newPage();
await landscapePage.goto('http://localhost:1999/?lang=en&view=extended');
await landscapePage.waitForLoadState('networkidle');
// Check landscape-specific styles
const cvName = await landscapePage.locator('.cv-name');
const cvPhoto = await landscapePage.locator('.cv-photo');
const actionBar = await landscapePage.locator('.action-bar');
const nameStyles = await cvName.evaluate(el => {
const computed = window.getComputedStyle(el);
return {
fontSize: computed.fontSize,
marginBottom: computed.marginBottom
};
});
const photoStyles = await cvPhoto.evaluate(el => {
const computed = window.getComputedStyle(el);
return {
display: computed.display,
width: computed.width,
maxWidth: computed.maxWidth
};
});
const actionBarPadding = await actionBar.evaluate(el => {
return window.getComputedStyle(el).padding;
});
console.log(`📊 Landscape Optimizations:`);
console.log(` • Name font size: ${nameStyles.fontSize} (should be ~1.2rem)`);
console.log(` • Photo visible: ${photoStyles.display !== 'none' ? '✅ YES' : '❌ NO'}`);
console.log(` • Photo width: ${photoStyles.width} (max: ${photoStyles.maxWidth})`);
console.log(` • Action bar compact: ${actionBarPadding}`);
const isOptimized = photoStyles.display !== 'none' &&
parseFloat(photoStyles.maxWidth) <= 80 &&
parseFloat(nameStyles.fontSize) < 20;
console.log(`\n${isOptimized ? '✅' : '❌'} Landscape mode ${isOptimized ? 'IS' : 'is NOT'} optimized`);
await landscapePage.screenshot({
path: 'tests/screenshots/mobile-landscape-optimized.png',
fullPage: true
});
console.log('\n📸 Screenshot: tests/screenshots/mobile-landscape-optimized.png');
await landscapeContext.close();
console.log('\n✅ All tests completed!\n');
await browser.close();
})();