Files
cv-site/tests/mjs/20-pdf-download-debug.mjs
T
juanatsap 35a802cbd5 fix: Keep sidebar background consistent across themes
Change sidebar background from var(--sidebar-bg) to fixed #d1d4d2
so it remains the same light gray color in both light and dark themes.

The sidebar should provide a consistent visual anchor regardless
of the main content theme.
2025-11-19 14:57:38 +00:00

126 lines
3.6 KiB
JavaScript
Executable File

#!/usr/bin/env bun
/**
* PDF DOWNLOAD DEBUG TEST
* =======================
* Debug why the download button isn't working
*/
import { chromium } from 'playwright';
const URL = "http://localhost:1999";
async function debugPDFDownload() {
console.log('🐛 PDF DOWNLOAD DEBUG TEST\n');
console.log('='.repeat(70));
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage({ viewport: { width: 1920, height: 1080 } });
// Capture console messages
page.on('console', msg => {
console.log(`[BROWSER ${msg.type()}]:`, msg.text());
});
// Capture errors
page.on('pageerror', error => {
console.log('❌ PAGE ERROR:', error.message);
});
console.log("\n1️⃣ Loading page...");
await page.goto(URL);
await page.waitForTimeout(2000);
console.log("\n2️⃣ Opening PDF modal...");
await page.click('.pdf-btn');
await page.waitForTimeout(1000);
console.log("\n3️⃣ Checking button state...");
const buttonState = await page.evaluate(() => {
const btn = document.querySelector('.pdf-download-btn');
return {
exists: !!btn,
disabled: btn?.disabled,
hasClickHandler: btn?.getAttribute('_')?.includes('on click')
};
});
console.log(' Button exists:', buttonState.exists);
console.log(' Button disabled:', buttonState.disabled);
console.log(' Has click handler:', buttonState.hasClickHandler);
console.log("\n4️⃣ Selecting Short CV...");
await page.click('[data-cv-format="short"]');
await page.waitForTimeout(500);
const afterSelection = await page.evaluate(() => {
const btn = document.querySelector('.pdf-download-btn');
return {
disabled: btn?.disabled,
selectedFormat: window._hyperscript?.runtime?.getLocalGlobal?.(':selectedFormat')
};
});
console.log(' Button disabled after selection:', afterSelection.disabled);
console.log(' Selected format:', afterSelection.selectedFormat);
console.log("\n5️⃣ Clicking download button...");
// Listen for navigation
let navigationURL = null;
page.on('framenavigated', (frame) => {
if (frame === page.mainFrame()) {
navigationURL = frame.url();
console.log(' 📍 Navigation to:', navigationURL);
}
});
// Check what happens when we click
const clickResult = await page.evaluate(() => {
const btn = document.querySelector('.pdf-download-btn');
console.log('About to click button');
btn.click();
return 'Clicked';
});
console.log(' Click result:', clickResult);
// Wait to see if navigation happens
await page.waitForTimeout(3000);
if (navigationURL) {
console.log(' ✅ Navigation occurred to:', navigationURL);
} else {
console.log(' ❌ No navigation occurred');
// Check for hyperscript errors
const hyperscriptErrors = await page.evaluate(() => {
return window._hyperscript?.internals?.errors || [];
});
if (hyperscriptErrors.length > 0) {
console.log(' Hyperscript errors:', hyperscriptErrors);
}
}
console.log("\n6️⃣ Checking localStorage...");
const localStorage = await page.evaluate(() => {
return {
length: localStorage.getItem('cv-length'),
icons: localStorage.getItem('cv-icons'),
theme: localStorage.getItem('cv-theme')
};
});
console.log(' localStorage:', localStorage);
console.log('\n' + '='.repeat(70));
console.log('🔍 DEBUG COMPLETE');
console.log('\nBrowser will stay open for manual inspection.');
console.log('Press Ctrl+C when done.');
// Keep browser open
await new Promise(() => {});
}
debugPDFDownload().catch(err => {
console.error('❌ Test failed:', err);
process.exit(1);
});