Files
blackcanyontickets/final-verification-test.cjs
dzinesco dbf4b11e81 fix: Implement comprehensive edit event button functionality and resolve authentication issues
Major fixes and improvements:
- Fixed edit event button functionality with proper event handlers and DOM ready state checking
- Added status column to tickets table via Supabase migration to resolve 500 API errors
- Updated stats API to correctly calculate revenue from decimal price values
- Resolved authentication redirect loops by fixing cookie configuration for Docker environment
- Fixed Permissions-Policy header syntax errors
- Added comprehensive debugging and error handling for event management
- Implemented modal-based event editing with form validation and API integration
- Enhanced event data loading with proper error handling and user feedback

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 18:49:49 -06:00

180 lines
7.3 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const puppeteer = require('puppeteer');
const path = require('path');
async function runFinalVerification() {
const browser = await puppeteer.launch({
headless: false,
defaultViewport: { width: 1200, height: 800 },
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
// Enable console logging
page.on('console', msg => {
const type = msg.type();
if (['error', 'warn'].includes(type)) {
console.log(`[${type.toUpperCase()}] ${msg.text()}`);
}
});
const results = {
login: { status: '❌', errors: [] },
scanner: { status: '❌', errors: [] },
templates: { status: '❌', errors: [] },
calendar: { status: '❌', errors: [] },
eventManagement: { status: '❌', errors: [] }
};
try {
console.log('🚀 Starting Final Verification Test...\n');
// Test 1: Login
console.log('1⃣ Testing Login...');
await page.goto('http://localhost:3000/login');
await page.waitForSelector('form');
await page.type('input[type="email"]', 'tmartinez@gmail.com');
await page.type('input[type="password"]', 'Skittles@420');
await page.screenshot({ path: 'verification-login-form.png' });
await page.click('button[type="submit"]');
await page.waitForNavigation({ waitUntil: 'networkidle0' });
const currentUrl = page.url();
if (currentUrl.includes('/dashboard')) {
results.login.status = '✅';
console.log(' ✅ Login successful - redirected to dashboard');
} else {
results.login.status = '❌';
console.log(` ❌ Login failed - ended up at: ${currentUrl}`);
}
await page.screenshot({ path: 'verification-dashboard.png' });
// Test 2: QR Scanner
console.log('\n2⃣ Testing QR Scanner...');
await page.goto('http://localhost:3000/scan');
await page.waitForSelector('body', { timeout: 5000 });
const scannerContent = await page.content();
if (scannerContent.includes('scanner') || scannerContent.includes('QR') || scannerContent.includes('camera')) {
results.scanner.status = '✅';
console.log(' ✅ Scanner page loads scanner interface');
} else if (scannerContent.includes('Welcome to Black Canyon Tickets')) {
results.scanner.status = '❌';
console.log(' ❌ Scanner redirects to homepage');
} else {
results.scanner.status = '⚠️';
console.log(' ⚠️ Scanner page unclear content');
}
await page.screenshot({ path: 'verification-scanner.png' });
// Test 3: Templates
console.log('\n3⃣ Testing Templates...');
await page.goto('http://localhost:3000/templates');
await page.waitForSelector('body', { timeout: 5000 });
const templatesUrl = page.url();
const templatesContent = await page.content();
if (templatesUrl.includes('/login')) {
results.templates.status = '❌';
console.log(' ❌ Templates redirects to login');
} else if (templatesContent.includes('template') || templatesContent.includes('Templates')) {
results.templates.status = '✅';
console.log(' ✅ Templates page loads properly');
} else {
results.templates.status = '⚠️';
console.log(' ⚠️ Templates page unclear content');
}
await page.screenshot({ path: 'verification-templates.png' });
// Test 4: Calendar
console.log('\n4⃣ Testing Calendar...');
await page.goto('http://localhost:3000/calendar');
await page.waitForSelector('body', { timeout: 5000 });
const calendarContent = await page.content();
const hasCalendarGrid = await page.$('.calendar-grid, .calendar, [class*="calendar"]');
if (hasCalendarGrid || calendarContent.includes('calendar') || calendarContent.includes('Calendar')) {
results.calendar.status = '✅';
console.log(' ✅ Calendar page shows calendar interface');
} else {
results.calendar.status = '❌';
console.log(' ❌ Calendar page shows blank or incorrect content');
}
await page.screenshot({ path: 'verification-calendar.png' });
// Test 5: Event Management
console.log('\n5⃣ Testing Event Management...');
// First, get an event ID from dashboard
await page.goto('http://localhost:3000/dashboard');
await page.waitForSelector('body', { timeout: 5000 });
const eventLink = await page.$('a[href*="/events/"][href*="/manage"]');
if (eventLink) {
const href = await page.evaluate(el => el.href, eventLink);
console.log(` Found event link: ${href}`);
await page.goto(href);
await page.waitForSelector('body', { timeout: 5000 });
const manageContent = await page.content();
const hasStats = manageContent.includes('stats') || manageContent.includes('Revenue') || manageContent.includes('Tickets Sold');
if (hasStats) {
results.eventManagement.status = '✅';
console.log(' ✅ Event management page loads with stats');
} else {
results.eventManagement.status = '❌';
console.log(' ❌ Event management page missing stats');
}
await page.screenshot({ path: 'verification-event-management.png' });
} else {
results.eventManagement.status = '⚠️';
console.log(' ⚠️ No events found to test management page');
await page.screenshot({ path: 'verification-no-events.png' });
}
// Collect console errors
const errors = [];
page.on('pageerror', error => {
errors.push(error.message);
});
console.log('\n📊 FINAL VERIFICATION RESULTS:');
console.log('================================');
console.log(`Login: ${results.login.status}`);
console.log(`QR Scanner: ${results.scanner.status}`);
console.log(`Templates: ${results.templates.status}`);
console.log(`Calendar: ${results.calendar.status}`);
console.log(`Event Management: ${results.eventManagement.status}`);
const successCount = Object.values(results).filter(r => r.status === '✅').length;
const totalTests = Object.keys(results).length;
console.log(`\n🎯 Overall Success Rate: ${successCount}/${totalTests} (${Math.round(successCount/totalTests*100)}%)`);
if (errors.length > 0) {
console.log('\n🚨 Console Errors Found:');
errors.forEach(error => console.log(` - ${error}`));
} else {
console.log('\n✅ No critical console errors detected');
}
} catch (error) {
console.error('❌ Test failed:', error.message);
} finally {
await browser.close();
}
}
runFinalVerification();