125 lines
4.2 KiB
TypeScript
125 lines
4.2 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
||
import { Wallet } from 'ethers';
|
||
import { createWalletContext } from '../setup/wallet-provider';
|
||
import { getStackConfig, validateStackHealthy } from '../setup/stack';
|
||
|
||
const ACCOUNT_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
|
||
const STACK_CONFIG = getStackConfig();
|
||
const STACK_RPC_URL = STACK_CONFIG.rpcUrl;
|
||
const STACK_WEBAPP_URL = STACK_CONFIG.webAppUrl;
|
||
const STACK_GRAPHQL_URL = STACK_CONFIG.graphqlUrl;
|
||
|
||
test.describe('GraphQL URL Verification', () => {
|
||
test.beforeAll(async () => {
|
||
await validateStackHealthy(STACK_CONFIG);
|
||
});
|
||
|
||
test('should load staking page without errors and use correct GraphQL endpoint', async ({ browser }) => {
|
||
console.log('[TEST] Creating wallet context...');
|
||
const context = await createWalletContext(browser, {
|
||
privateKey: ACCOUNT_PRIVATE_KEY,
|
||
rpcUrl: STACK_RPC_URL,
|
||
});
|
||
|
||
const page = await context.newPage();
|
||
|
||
const consoleErrors: string[] = [];
|
||
const consoleWarnings: string[] = [];
|
||
const consoleLogs: string[] = [];
|
||
const networkRequests: Array<{ url: string; status: number }> = [];
|
||
const allNetworkActivity: Array<{ url: string; status: number }> = [];
|
||
|
||
// Capture all console messages
|
||
page.on('console', msg => {
|
||
const text = msg.text();
|
||
if (msg.type() === 'error') {
|
||
consoleErrors.push(text);
|
||
} else if (msg.type() === 'warning') {
|
||
consoleWarnings.push(text);
|
||
} else if (text.includes('load') || text.includes('graphql') || text.includes('chain') || text.includes('DEBUG')) {
|
||
consoleLogs.push(text);
|
||
}
|
||
});
|
||
|
||
// Capture all network requests
|
||
page.on('response', response => {
|
||
const url = response.url();
|
||
const status = response.status();
|
||
|
||
allNetworkActivity.push({ url, status });
|
||
|
||
if (url.includes('graphql')) {
|
||
networkRequests.push({ url, status });
|
||
}
|
||
});
|
||
|
||
try {
|
||
console.log('[TEST] Navigating to staking page...');
|
||
await page.goto(`${STACK_WEBAPP_URL}/app/#/stake`, { waitUntil: 'domcontentloaded' });
|
||
|
||
// Wait for page to fully load and settle
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
// Give more time for Vue components to mount and composables to initialize
|
||
console.log('[TEST] Waiting for composables to initialize...');
|
||
await page.waitForTimeout(5000);
|
||
|
||
// Log findings
|
||
console.log('\n=== Console Errors ===');
|
||
if (consoleErrors.length === 0) {
|
||
console.log('✅ No console errors');
|
||
} else {
|
||
console.log('❌ Found console errors:');
|
||
consoleErrors.forEach(err => console.log(` - ${err}`));
|
||
}
|
||
|
||
console.log('\n=== Console Warnings ===');
|
||
if (consoleWarnings.length > 0) {
|
||
consoleWarnings.slice(0, 5).forEach(warn => console.log(` - ${warn}`));
|
||
}
|
||
|
||
console.log('\n=== Relevant Console Logs ===');
|
||
if (consoleLogs.length > 0) {
|
||
consoleLogs.forEach(log => console.log(` - ${log}`));
|
||
}
|
||
|
||
console.log('\n=== GraphQL Requests ===');
|
||
if (networkRequests.length === 0) {
|
||
console.log('⚠️ No GraphQL requests detected');
|
||
} else {
|
||
networkRequests.forEach(req => {
|
||
const isCorrect = req.url === STACK_GRAPHQL_URL;
|
||
const icon = isCorrect ? '✅' : '❌';
|
||
console.log(`${icon} ${req.url} (Status: ${req.status})`);
|
||
});
|
||
}
|
||
|
||
console.log('\n=== Sample Network Activity ===');
|
||
allNetworkActivity.slice(0, 10).forEach(req => {
|
||
console.log(` ${req.status} ${req.url}`);
|
||
});
|
||
|
||
// Assertions
|
||
const incorrectRequests = networkRequests.filter(
|
||
req => req.url.includes('/app/graphql')
|
||
);
|
||
|
||
// No console errors
|
||
expect(consoleErrors.length).toBe(0);
|
||
|
||
// No requests to /app/graphql
|
||
expect(incorrectRequests.length).toBe(0);
|
||
|
||
// If there were GraphQL requests, they should go to the correct endpoint
|
||
if (networkRequests.length > 0) {
|
||
const correctRequests = networkRequests.filter(req => req.url === STACK_GRAPHQL_URL);
|
||
expect(correctRequests.length).toBeGreaterThan(0);
|
||
} else {
|
||
console.log('\n⚠️ WARNING: No GraphQL requests detected - composables may not be initializing');
|
||
}
|
||
} finally {
|
||
await page.close();
|
||
await context.close();
|
||
}
|
||
});
|
||
});
|