#!/usr/bin/env python3 """Read-only deployed settings/admin browser qualification; no account mutations.""" import json from pathlib import Path from playwright.sync_api import sync_playwright, expect values=json.loads(Path('.runtime/deployment.json').read_text()) with sync_playwright() as p: browser=p.chromium.launch(headless=True) context=browser.new_context(ignore_https_errors=True,viewport={'width':1440,'height':1000}) page=context.new_page();errors=[] page.on('pageerror',lambda e:errors.append(str(e))) page.goto('https://192.168.86.2:9178/',wait_until='networkidle') page.locator('#loginUsername').fill('admin');page.locator('#loginPassword').fill(values['admin_password']);page.locator('#loginSubmit').click() expect(page.locator('#primaryInput')).to_be_enabled(timeout=30000) page.locator('#accountMenuBtn').click();expect(page.locator('#settingsDialog')).to_be_visible() expect(page.locator('#settingsAccountRole')).to_contain_text('Administrator') page.locator('[data-settings-target=appearance]').click();expect(page.locator('#paletteSelect')).to_be_enabled(timeout=15000) page.locator('[data-settings-target=preferences]').click();expect(page.locator('#modelSelect')).to_be_enabled(timeout=30000) expect(page.locator('#voiceList [role=radio]').first).to_be_visible(timeout=30000) page.locator('[data-settings-target=privacy]').click();expect(page.locator('#settingsMemoryStatus')).to_contain_text('saved memory',timeout=30000) page.locator('[data-settings-target=security]').click();expect(page.locator('[data-settings-panel=security]')).to_be_visible() page.locator('#adminBtn').click();expect(page.locator('#usersBody tr').first).to_be_visible(timeout=15000) page.screenshot(path='.runtime/hope-approved-admin-live.png',full_page=True) assert page.evaluate('document.documentElement.scrollWidth<=innerWidth') page.locator('#settingsClose').click();page.set_viewport_size({'width':390,'height':844}) page.locator('#drawerOpen').click();page.locator('#accountMenuBtn').click();expect(page.locator('#settingsDialog')).to_be_visible() assert page.evaluate('document.documentElement.scrollWidth<=innerWidth') page.screenshot(path='.runtime/hope-approved-settings-mobile-live.png',full_page=True) page.locator('#settingsClose').click();assert not errors,errors page.evaluate("HopeAuth.request('/api/auth/logout',{method:'POST'})") context.close();browser.close() print('live_settings_account_appearance_voice_model_memory_security_admin_mobile=PASS; console_errors=0; no_mutations')