Files
cv-site/tests/mjs/24-course-inline-icons.test.mjs
juanatsap 43414b79ac fix: Override inline icon sizes to 1.2em across all sections
Problem: Inline icons embedded in responsibilities, courses, and
projects had explicit width='60' height='60' attributes that made
them too large (60px instead of ~16px).

Solution:
- Added CSS with !important to override inline width/height attributes
- Targeted inline icons in:
  * Course responsibilities and descriptions
  * Project descriptions and technologies
  * Experience responsibilities (within divs)
- Preserved large icons (80px) for main company/course/project logos

Changes:
- static/css/03-components/_courses.css: Override to 1.2em
- static/css/03-components/_projects.css: Override to 1.2em
- static/css/03-components/_cv-section.css: Override to 1.2em

Test Results:
 7 course inline icons: 16px × 16px
 Main company icons: 80px × 80px (preserved)
2025-11-19 16:30:18 +00:00

113 lines
3.7 KiB
JavaScript
Executable File

#!/usr/bin/env bun
/**
* Test: Course inline icon styling
*
* Verifies:
* 1. Inline icons within course descriptions have proper sizing
* 2. Icons have vertical alignment
* 3. Icons have proper spacing
* 4. Icon colors are preserved
*/
import { chromium } from 'playwright';
const BASE_URL = 'http://localhost:1999';
async function testCourseInlineIcons() {
console.log('\n📚 Course Inline Icons Test\n');
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
try {
await page.goto(BASE_URL, { waitUntil: 'networkidle' });
await page.waitForSelector('.cv-container', { timeout: 5000 });
// Test: Find inline icons within course sections
console.log('📱 Test 1: Inline icon styling');
const iconStyles = await page.evaluate(() => {
// Try to find inline icons in responsibilities lists first
let icon = document.querySelector('.course-item .responsibilities li iconify-icon');
let parent = null;
let location = 'responsibilities';
// If not found in responsibilities, try course-desc
if (!icon) {
icon = document.querySelector('.course-desc iconify-icon');
parent = document.querySelector('.course-desc');
location = 'course-desc';
} else {
parent = icon.closest('li');
}
if (!icon) return { error: 'No inline icon found in course section' };
if (!parent) return { error: 'No parent element found' };
const styles = window.getComputedStyle(icon);
return {
location,
fontSize: styles.fontSize,
verticalAlign: styles.verticalAlign,
marginLeft: styles.marginLeft,
marginRight: styles.marginRight,
color: styles.color,
// Get parent font size for comparison
parentFontSize: window.getComputedStyle(parent).fontSize,
};
});
if (iconStyles.error) {
console.log(` ⚠️ ${iconStyles.error}`);
console.log(' (This is OK if there are no inline icons in course sections)');
await browser.close();
return;
}
console.log(` Found icon in: ${iconStyles.location}`);
console.log(` Icon font-size: ${iconStyles.fontSize}`);
console.log(` Parent font-size: ${iconStyles.parentFontSize}`);
console.log(` Vertical align: ${iconStyles.verticalAlign}`);
console.log(` Margin left: ${iconStyles.marginLeft}`);
console.log(` Margin right: ${iconStyles.marginRight}`);
// Verify font-size is 1.2em (approximately 1.2x parent size)
const iconSize = parseFloat(iconStyles.fontSize);
const parentSize = parseFloat(iconStyles.parentFontSize);
const ratio = iconSize / parentSize;
if (Math.abs(ratio - 1.2) < 0.1) {
console.log(' ✅ Icon size is 1.2em (1.2x parent size)');
} else {
console.log(` ⚠️ Icon size ratio is ${ratio.toFixed(2)}x (expected ~1.2x)`);
}
// Verify vertical alignment
if (iconStyles.verticalAlign === 'middle') {
console.log(' ✅ Vertical alignment is middle');
} else {
console.log(` ⚠️ Vertical alignment is ${iconStyles.verticalAlign} (expected middle)`);
}
// Verify margins
const marginLeft = parseFloat(iconStyles.marginLeft);
const marginRight = parseFloat(iconStyles.marginRight);
if (marginLeft > 0 && marginRight > 0) {
console.log(' ✅ Icons have proper spacing (margins on both sides)');
} else {
console.log(` ⚠️ Margins: left=${marginLeft}px, right=${marginRight}px`);
}
console.log('\n✅ Course inline icon test completed!\n');
await browser.close();
} catch (error) {
console.error('\n❌ Test failed:', error.message);
await browser.close();
process.exit(1);
}
}
testCourseInlineIcons();