← back to Dear Bubbe Nextjs
archived/tests/test-pause-resume.js
159 lines
#!/usr/bin/env node
/**
* Test script for pause/resume voice controls
* Tests that the new pause/resume functionality is working correctly
*/
const puppeteer = require('puppeteer');
async function testPauseResume() {
console.log('🎯 Starting Pause/Resume Voice Controls Test...\n');
let browser;
try {
// Launch browser
browser = await puppeteer.launch({
headless: 'new',
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'
]
});
const page = await browser.newPage();
// Set viewport for mobile testing
await page.setViewport({ width: 390, height: 844 }); // iPhone 14 Pro
console.log('📱 Testing on mobile viewport (390x844)...');
// Navigate to the site
const url = 'http://localhost:3011';
console.log(`\n🌐 Navigating to ${url}...`);
await page.goto(url, { waitUntil: 'networkidle2' });
// Wait for the page to fully load
await page.waitForTimeout(2000);
// Check if pause button exists
console.log('\n🔍 Checking for pause/resume button...');
const pauseButton = await page.$('.pause-resume-button');
if (!pauseButton) {
throw new Error('❌ Pause/Resume button not found!');
}
console.log('✅ Pause/Resume button found!');
// Get initial button state
const initialButtonClass = await page.$eval('.pause-resume-button', el => el.className);
const initialButtonText = await page.$eval('.pause-text', el => el.textContent);
console.log(`\n📊 Initial button state:`);
console.log(` - Classes: ${initialButtonClass}`);
console.log(` - Text: ${initialButtonText}`);
// Check if button meets accessibility requirements
const buttonSize = await page.$eval('.pause-resume-button', el => {
const rect = el.getBoundingClientRect();
return { width: rect.width, height: rect.height };
});
console.log(`\n📏 Button dimensions:`);
console.log(` - Width: ${buttonSize.width}px`);
console.log(` - Height: ${buttonSize.height}px`);
if (buttonSize.height < 44) {
console.warn('⚠️ Warning: Button height is less than 44px (WCAG minimum)');
} else {
console.log('✅ Button meets minimum touch target size (44px)');
}
// Click the pause button
console.log('\n🖱️ Clicking pause button...');
await pauseButton.click();
await page.waitForTimeout(500);
// Check if button state changed
const pausedButtonClass = await page.$eval('.pause-resume-button', el => el.className);
const pausedButtonText = await page.$eval('.pause-text', el => el.textContent);
console.log(`\n📊 After clicking pause:`);
console.log(` - Classes: ${pausedButtonClass}`);
console.log(` - Text: ${pausedButtonText}`);
if (pausedButtonClass.includes('paused')) {
console.log('✅ Button correctly shows paused state');
} else {
console.warn('⚠️ Button may not be showing paused state correctly');
}
// Check if status indicator shows paused
const statusText = await page.$eval('.mobile-status-text', el => el.textContent).catch(() => null);
console.log(` - Status: ${statusText || 'N/A'}`);
// Click resume button
console.log('\n🖱️ Clicking resume button...');
await pauseButton.click();
await page.waitForTimeout(500);
// Check final state
const resumedButtonClass = await page.$eval('.pause-resume-button', el => el.className);
const resumedButtonText = await page.$eval('.pause-text', el => el.textContent);
console.log(`\n📊 After clicking resume:`);
console.log(` - Classes: ${resumedButtonClass}`);
console.log(` - Text: ${resumedButtonText}`);
if (!resumedButtonClass.includes('paused')) {
console.log('✅ Button correctly returned to active state');
} else {
console.warn('⚠️ Button may still be showing paused state');
}
// Test on desktop viewport
console.log('\n\n💻 Testing on desktop viewport (1920x1080)...');
await page.setViewport({ width: 1920, height: 1080 });
await page.waitForTimeout(500);
const desktopButtonSize = await page.$eval('.pause-resume-button', el => {
const rect = el.getBoundingClientRect();
return { width: rect.width, height: rect.height };
});
console.log(`\n📏 Desktop button dimensions:`);
console.log(` - Width: ${desktopButtonSize.width}px`);
console.log(` - Height: ${desktopButtonSize.height}px`);
// Check CSS animation
const hasAnimation = await page.$eval('.pause-resume-button.paused', el => {
const style = window.getComputedStyle(el);
return style.animationName !== 'none';
}).catch(() => false);
if (hasAnimation) {
console.log('✅ Paused button has pulse animation');
}
console.log('\n\n✅ All pause/resume tests completed successfully!');
console.log('\n📝 Summary:');
console.log(' - Pause/Resume button is present and visible');
console.log(' - Button changes state correctly when clicked');
console.log(' - Button meets accessibility requirements');
console.log(' - Mobile and desktop views work correctly');
} catch (error) {
console.error('\n❌ Test failed:', error.message);
process.exit(1);
} finally {
if (browser) {
await browser.close();
}
}
}
// Run the test
testPauseResume().catch(console.error);