Some checks are pending
Go Benchmark / Performance Regression Check (push) Waiting to run
Cerberus Integration / Cerberus Security Stack Integration (push) Waiting to run
Upload Coverage to Codecov / Backend Codecov Upload (push) Waiting to run
Upload Coverage to Codecov / Frontend Codecov Upload (push) Waiting to run
CodeQL - Analyze / CodeQL analysis (go) (push) Waiting to run
CodeQL - Analyze / CodeQL analysis (javascript-typescript) (push) Waiting to run
CrowdSec Integration / CrowdSec Bouncer Integration (push) Waiting to run
Docker Build, Publish & Test / build-and-push (push) Waiting to run
Docker Build, Publish & Test / Security Scan PR Image (push) Blocked by required conditions
Quality Checks / Auth Route Protection Contract (push) Waiting to run
Quality Checks / Codecov Trigger/Comment Parity Guard (push) Waiting to run
Quality Checks / Backend (Go) (push) Waiting to run
Quality Checks / Frontend (React) (push) Waiting to run
Rate Limit integration / Rate Limiting Integration (push) Waiting to run
Security Scan (PR) / Trivy Binary Scan (push) Waiting to run
Supply Chain Verification (PR) / Verify Supply Chain (push) Waiting to run
WAF integration / Coraza WAF Integration (push) Waiting to run
122 lines
4.7 KiB
TypeScript
Executable File
122 lines
4.7 KiB
TypeScript
Executable File
import { test } from './fixtures/test';
|
|
import { waitForLoadingComplete } from './utils/wait-helpers';
|
|
|
|
test('DEBUG: DNS Providers page state', async ({ page, baseURL, context }) => {
|
|
console.log(`\n🔍 TEST CONTEXT INFO:`);
|
|
console.log(` Base URL: ${baseURL}`);
|
|
console.log(` Page URL before goto: ${page.url()}`);
|
|
|
|
// Check cookies before navigation
|
|
const cookiesBefore = await context.cookies();
|
|
console.log(` Cookies before navigation: ${cookiesBefore.length} total`);
|
|
cookiesBefore.forEach(c => {
|
|
console.log(` - ${c.name}: domain="${c.domain}", httpOnly=${c.httpOnly}`);
|
|
});
|
|
|
|
// Monitor API requests
|
|
const apiCalls: { url: string; status: number; method: string }[] = [];
|
|
page.on('response', async (response) => {
|
|
if (response.url().includes('/api/')) {
|
|
apiCalls.push({
|
|
url: response.url(),
|
|
status: response.status(),
|
|
method: response.request().method(),
|
|
});
|
|
console.log(` API: ${response.request().method()} ${response.url()} → ${response.status()}`);
|
|
|
|
// If it's an auth check, show response body
|
|
if (response.url().includes('/auth/') || response.url().includes('/users/me')) {
|
|
try {
|
|
const body = await response.text();
|
|
console.log(` Response: ${body.substring(0, 200)}`);
|
|
} catch (e) {
|
|
console.log(` (Could not read response body)`);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
await page.goto('/dns/providers');
|
|
console.log(` Page URL after goto: ${page.url()}`);
|
|
|
|
// Wait for API calls to complete
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
console.log(`\n 📊 API Calls Summary: ${apiCalls.length} total`);
|
|
|
|
// Check cookies after navigation
|
|
const cookiesAfter = await context.cookies();
|
|
console.log(` Cookies after navigation: ${cookiesAfter.length} total`);
|
|
cookiesAfter.forEach(c => {
|
|
console.log(` - ${c.name}: domain="${c.domain}", value="${c.value.substring(0, 20)}..."`);
|
|
});
|
|
|
|
await waitForLoadingComplete(page);
|
|
|
|
console.log('--- PAGE STATE AFTER INITIAL LOAD ---');
|
|
|
|
// Log all buttons
|
|
const buttons = await page.getByRole('button').all();
|
|
console.log(`\nFound ${buttons.length} buttons:`);
|
|
for (const btn of buttons) {
|
|
const text = await btn.textContent();
|
|
const visible = await btn.isVisible();
|
|
const ariaLabel = await btn.getAttribute('aria-label');
|
|
console.log(`- "${text}" (visible: ${visible}, aria-label: "${ariaLabel}")`);
|
|
}
|
|
|
|
// Log page content around "provider" text
|
|
console.log('\n--- SEARCHING FOR PROVIDER-RELATED TEXT ---');
|
|
const providerText = await page.getByText(/provider/i).all();
|
|
console.log(`Found ${providerText.length} elements with "provider" text:`);
|
|
for (let i = 0; i < Math.min(providerText.length, 10); i++) {
|
|
const text = await providerText[i].textContent();
|
|
const visible = await providerText[i].isVisible();
|
|
const tagName = await providerText[i].evaluate(el => el.tagName);
|
|
console.log(` ${i+1}. <${tagName}> "${text?.substring(0, 50)}" (visible: ${visible})`);
|
|
}
|
|
|
|
// Log Outlet rendering
|
|
console.log('\n--- CHECKING NESTED ROUTING ---');
|
|
const outlet = page.locator('[data-outlet], .bg-surface-elevated.border.border-border.rounded-lg.p-6');
|
|
const outletVisible = await outlet.isVisible();
|
|
console.log(`Outlet container visible: ${outletVisible}`);
|
|
|
|
if (outletVisible) {
|
|
const outletContent = await outlet.textContent();
|
|
console.log(`Outlet content preview: ${outletContent?.substring(0, 200)}`);
|
|
}
|
|
|
|
// Wait a bit longer and check again
|
|
console.log('\n--- AFTER 2 SECOND WAIT ---');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const buttonsAfterWait = await page.getByRole('button').all();
|
|
console.log(`\nButtons after wait: ${buttonsAfterWait.length}`);
|
|
for (const btn of buttonsAfterWait) {
|
|
const text = await btn.textContent();
|
|
const visible = await btn.isVisible();
|
|
console.log(`- "${text}" (visible: ${visible})`);
|
|
}
|
|
|
|
// Check for specific button patterns
|
|
console.log('\n--- SPECIFIC LOCATORS ---');
|
|
const addProviderByText = page.getByRole('button', { name: /add.*provider/i });
|
|
console.log(`getByRole('button', {name: /add.*provider/i}): ${await addProviderByText.count()} found`);
|
|
|
|
const addProviderFirst = addProviderByText.first();
|
|
const addProviderVisible = await addProviderFirst.isVisible().catch(() => false);
|
|
console.log(`First button visible: ${addProviderVisible}`);
|
|
|
|
if (addProviderVisible) {
|
|
const text = await addProviderFirst.textContent();
|
|
console.log(`First button text: "${text}"`);
|
|
}
|
|
|
|
// Log HTML snippet
|
|
console.log('\n--- PAGE HTML SNIPPET ---');
|
|
const mainContent = page.locator('main, [role="main"], .space-y-6').first();
|
|
const html = await mainContent.innerHTML().catch(() => 'Could not get HTML');
|
|
console.log(html.substring(0, 1000));
|
|
});
|