#!/usr/bin/env python3 """ Knowledge Graph Cache Fix - E2E Test Script (v5) Better console log capture and verification. """ import time from playwright.sync_api import sync_playwright BASE_URL = 'https://archief.support' TEST_QUERY = 'Welke archieven zijn er in Den Haag?' LOGIN_EMAIL = 'scott@bronhouder.nl' LOGIN_PASSWORD = 'Olivi@1985' def run_test(): print('šŸš€ Starting Knowledge Graph Cache Test\n') with sync_playwright() as p: browser = p.chromium.launch(headless=False, slow_mo=100) context = browser.new_context() page = context.new_page() all_logs = [] def capture_log(msg): text = msg.text all_logs.append(text) # Print important logs immediately if any(kw in text for kw in ['ChatPage', 'Cache', 'Restored', 'extractGraph', 'KnowledgeGraph']): print(f' šŸ”µ {text[:200]}') page.on('console', capture_log) try: # Navigate and login print('Step 1: Navigating and logging in...') page.goto(BASE_URL) page.wait_for_load_state('networkidle') if page.locator('button:has-text("Inloggen")').is_visible(timeout=3000): page.locator('input[type="email"]').fill(LOGIN_EMAIL) page.locator('input[type="password"]').fill(LOGIN_PASSWORD) page.locator('button[type="submit"]').click() page.wait_for_url(lambda url: '/login' not in url, timeout=15000) page.wait_for_load_state('networkidle') time.sleep(2) print(' āœ… Ready\n') # FIRST QUERY print('=' * 70) print('FIRST QUERY - Creating cache entry') print('=' * 70) all_logs.clear() input_field = page.locator('.MuiOutlinedInput-input').first input_field.fill(TEST_QUERY) page.locator('button[type="submit"]').first.click() print('Waiting for response...') page.wait_for_selector('.MuiPaper-root', timeout=120000) time.sleep(5) # Filter for relevant logs chat_logs_1 = [l for l in all_logs if '[ChatPage]' in l] print(f'\nFound {len(chat_logs_1)} ChatPage logs:') for log in chat_logs_1: print(f' {log[:150]}') # Open debug panel and check KG debug_btn = page.locator('button').filter(has_text='Debug') kg_tab = page.locator('button, [role="tab"]').filter(has_text='Kennisgraaf') no_data = page.locator('text="Geen graafdata beschikbaar"') try: debug_btn.first.click() time.sleep(0.5) kg_tab.first.click() time.sleep(1) except: pass has_kg_1 = not (no_data.is_visible(timeout=2000) if no_data.count() > 0 else False) print(f'\nšŸ“Š First response KG has data: {has_kg_1}') page.screenshot(path='/tmp/archief-kg-first.png') # NEW CONVERSATION print('\n' + '=' * 70) print('SECOND QUERY - Should hit cache') print('=' * 70) # Start new conversation new_btn = page.locator('button').filter(has_text='Nieuw') try: new_btn.first.click() time.sleep(2) except: page.reload() page.wait_for_load_state('networkidle') time.sleep(2) all_logs.clear() # Submit same query input_field = page.locator('.MuiOutlinedInput-input').first input_field.fill(TEST_QUERY) page.locator('button[type="submit"]').first.click() print('Waiting for response...') page.wait_for_selector('.MuiPaper-root', timeout=30000) time.sleep(3) # Get logs chat_logs_2 = [l for l in all_logs if '[ChatPage]' in l] print(f'\nFound {len(chat_logs_2)} ChatPage logs:') for log in chat_logs_2: print(f' {log[:150]}') # Analyze cache_hit = any('Cache HIT' in l for l in all_logs) cache_miss = any('Cache MISS' in l for l in all_logs) restored = any('Restored' in l for l in all_logs) print(f'\nšŸ“Š Analysis:') print(f' Cache HIT: {cache_hit}') print(f' Cache MISS: {cache_miss}') print(f' Restored: {restored}') # Check KG on second response try: debug_btn.first.click() time.sleep(0.5) kg_tab.first.click() time.sleep(1) except: pass has_kg_2 = not (no_data.is_visible(timeout=2000) if no_data.count() > 0 else False) print(f' Second KG: {has_kg_2}') page.screenshot(path='/tmp/archief-kg-second.png') # RESULTS print('\n' + '=' * 70) print('FINAL RESULTS') print('=' * 70) if cache_hit and restored: print('\nāœ…āœ… PERFECT: Cache hit AND results restored!') print(' The Knowledge Graph cache fix is working correctly.') elif cache_hit and not restored: print('\nāš ļø WARNING: Cache hit but NO results restored') print(' Check if retrievedResults is in the cached data.') elif has_kg_2: print('\nāœ… PASSED: Knowledge Graph has data on cached response') print(' (Even if cache hit not detected in logs)') else: print('\nāŒ FAILED: Knowledge Graph shows no data on second response') if not chat_logs_2: print('\nāš ļø NOTE: No console logs captured. This might be because:') print(' - The app uses a different logging mechanism') print(' - Console logs are filtered in production build') # Print all logs for debugging print('\nšŸ“‹ All captured logs (last 30):') for log in all_logs[-30:]: if len(log) < 300: print(f' {log}') print('\nšŸ“Œ Browser stays open for 60 seconds...') time.sleep(60) except Exception as e: print(f'\nāŒ Error: {e}') import traceback traceback.print_exc() page.screenshot(path='/tmp/archief-error.png') finally: browser.close() if __name__ == '__main__': run_test()