/** * Settings Page UI Test * * Comprehensive test of the settings page loading functionality. Monitors all API * calls including available models, search engines, and settings. Validates that * all setting form elements load correctly. * * Prerequisites: Web server running on http://127.0.0.1:5000 * * Usage: node tests/ui_tests/test_settings_page.js */ const puppeteer = require('puppeteer'); const AuthHelper = require('./auth_helper'); const { getPuppeteerLaunchOptions } = require('./puppeteer_config'); async function testSettingsPage() { const browser = await puppeteer.launch(getPuppeteerLaunchOptions()); const page = await browser.newPage(); const authHelper = new AuthHelper(page); // Monitor network requests await page.setRequestInterception(true); page.on('request', request => { console.log('REQUEST:', request.method(), request.url()); request.continue(); }); page.on('response', response => { console.log('RESPONSE:', response.status(), response.url()); }); let failed = false; try { // Ensure authentication first console.log('🔐 Ensuring authentication...'); await authHelper.ensureAuthenticatedWithTimeout(); console.log('Navigating to settings page...'); await page.goto('http://127.0.0.1:5000/settings/', { waitUntil: 'domcontentloaded', timeout: 30000 }); // Wait for settings to load await new Promise(resolve => setTimeout(resolve, 3000)); // Check if settings are loaded const settingsElements = await page.$$('.setting-item, .form-group, input[type="text"], select'); console.log(`Found ${settingsElements.length} setting elements`); if (settingsElements.length > 0) { console.log('✅ Settings page loaded successfully with setting elements'); } else { console.log('❌ No setting elements found'); // Take screenshot for debugging (skip in CI — diagnostic only) if (!process.env.CI) { await page.screenshot({ path: 'settings_page_debug.png' }); } } } catch (error) { console.error('Error during test:', error); failed = true; } finally { await browser.close(); process.exit(failed ? 1 : 0); } } testSettingsPage().catch(err => { console.error(err); process.exit(1); });