Websocket fixes.

This commit is contained in:
2026-01-11 00:46:49 -06:00
parent d4855040d8
commit 174abb7f56
32 changed files with 2770 additions and 32 deletions

View File

@ -0,0 +1,100 @@
import { test, expect } from '@playwright/test';
test('Debug WebSocket connection', async ({ page }) => {
const consoleMessages: string[] = [];
const wsMessages: string[] = [];
// Capture all console messages
page.on('console', msg => {
const text = `[${msg.type()}] ${msg.text()}`;
consoleMessages.push(text);
if (msg.text().includes('WebSocket')) {
console.log(text);
}
});
// Capture page errors
page.on('pageerror', error => {
console.log('Page error:', error.message);
});
// Navigate to event page
await page.goto('/events/1', { waitUntil: 'networkidle' });
await page.waitForTimeout(3000);
// Check console for WebSocket messages
console.log('\n=== All Console Messages ===');
consoleMessages.forEach(msg => console.log(msg));
// Take screenshot
await page.screenshot({ path: 'test-results/websocket-debug.png', fullPage: true });
// Check for WebSocket related logs
const wsLogs = consoleMessages.filter(m => m.toLowerCase().includes('websocket') || m.toLowerCase().includes('ws://') || m.toLowerCase().includes('wss://'));
console.log('\n=== WebSocket Related Logs ===');
wsLogs.forEach(msg => console.log(msg));
});
test('Check WebSocket URL configuration', async ({ page }) => {
// Navigate and check what WS_URL is being used
await page.goto('/events/1');
const wsUrl = await page.evaluate(() => {
// @ts-ignore
return window.__WS_URL__ || 'not exposed';
});
console.log('WS_URL from window:', wsUrl);
// Check environment variables
const envCheck = await page.evaluate(() => {
return {
// @ts-ignore
VITE_WS_URL: import.meta?.env?.VITE_WS_URL,
// @ts-ignore
VITE_API_URL: import.meta?.env?.VITE_API_URL,
};
});
console.log('Environment variables:', envCheck);
});
test('Test WebSocket endpoint directly', async ({ page, request }) => {
// First check if backend is running
try {
const healthCheck = await request.get('http://localhost:8000/api/v1/sport-events');
console.log('Backend health check status:', healthCheck.status());
} catch (e) {
console.log('Backend not reachable:', e);
}
// Try to connect to WebSocket from browser
await page.goto('/events/1');
const wsResult = await page.evaluate(async () => {
return new Promise((resolve) => {
const ws = new WebSocket('ws://localhost:8000/api/v1/ws?token=guest&event_id=1');
ws.onopen = () => {
resolve({ status: 'connected', readyState: ws.readyState });
ws.close();
};
ws.onerror = (e) => {
resolve({ status: 'error', error: 'Connection failed' });
};
ws.onclose = (e) => {
if (e.code !== 1000) {
resolve({ status: 'closed', code: e.code, reason: e.reason });
}
};
// Timeout after 5 seconds
setTimeout(() => {
resolve({ status: 'timeout', readyState: ws.readyState });
ws.close();
}, 5000);
});
});
console.log('WebSocket connection result:', wsResult);
});