Files
bruno/tests/devtools/performance/performance-tab.spec.ts
naman-bruno 43f24ad0f1 redesign: workspace overview (#6361)
* redesign: workspace overview

* fixes

* fix: test
2025-12-10 02:56:28 +05:30

139 lines
5.5 KiB
TypeScript

import { test, expect } from '../../../playwright';
test.describe('DevTools Performance Tab', () => {
test('should display performance metrics when Performance tab is opened', async ({ page }) => {
const devToolsButton = page.locator('button[data-trigger="dev-tools"]');
await expect(devToolsButton).toBeVisible();
await devToolsButton.click();
// Wait for DevTools to open
await expect(page.locator('.console-header')).toBeVisible();
// Click on the Performance tab
const performanceTab = page.locator('.console-tab').filter({ hasText: 'Performance' });
await expect(performanceTab).toBeVisible();
await performanceTab.click();
await expect(performanceTab).toHaveClass(/active/);
await expect(page.locator('.system-resources h2')).toContainText('System Resources');
// Verify all resource cards are present
const resourceCards = page.locator('.resource-card');
await expect(resourceCards).toHaveCount(4);
// Test CPU Usage card
const cpuCard = resourceCards.filter({ has: page.locator('.resource-title', { hasText: 'CPU Usage' }) });
await expect(cpuCard).toBeVisible();
const cpuValue = cpuCard.locator('.resource-value');
await expect(cpuValue).toBeVisible();
// CPU value should match pattern like "0.0%" or "12.5%"
await expect(cpuValue).toContainText(/%/);
const cpuText = await cpuValue.textContent();
expect(cpuText).toMatch(/^\d+\.\d+%$/);
// Test Memory Usage card
const memoryCard = resourceCards.filter({ has: page.locator('.resource-title', { hasText: 'Memory Usage' }) });
await expect(memoryCard).toBeVisible();
const memoryValue = memoryCard.locator('.resource-value');
await expect(memoryValue).toBeVisible();
// Memory value should match pattern like "123.45 MB" or "1.23 GB"
const memoryText = await memoryValue.textContent();
expect(memoryText).toMatch(/^\d+(?:\.\d+)?\s+(Bytes|KB|MB|GB)$/);
// Test Uptime card
const uptimeCard = resourceCards.filter({ has: page.locator('.resource-title', { hasText: 'Uptime' }) });
await expect(uptimeCard).toBeVisible();
const uptimeValue = uptimeCard.locator('.resource-value');
await expect(uptimeValue).toBeVisible();
// Uptime should match patterns like "5s", "1m 30s", or "2h 15m 30s"
const uptimeText = await uptimeValue.textContent();
expect(uptimeText).toMatch(/^(\d+h\s)?(\d+m\s)?\d+s$/);
// Test Process ID card
const pidCard = resourceCards.filter({ has: page.locator('.resource-title', { hasText: 'Process ID' }) });
await expect(pidCard).toBeVisible();
const pidValue = pidCard.locator('.resource-value');
await expect(pidValue).toBeVisible();
// PID should be a number
const pidText = await pidValue.textContent();
expect(pidText).toMatch(/^\d+$/);
});
test('should update performance metrics over time', async ({ page }) => {
await page.locator('button[data-trigger="dev-tools"]').click();
await expect(page.locator('.console-header')).toBeVisible();
await page.locator('.console-tab').filter({ hasText: 'Performance' }).click();
const uptimeCard = page.locator('.resource-card').filter({
has: page.locator('.resource-title', { hasText: 'Uptime' })
});
const uptimeValue = uptimeCard.locator('.resource-value');
const initialUptime = await uptimeValue.textContent();
// Wait for metrics to update (monitoring interval is 2000ms)
await page.waitForTimeout(3000);
// Get updated uptime value
const updatedUptime = await uptimeValue.textContent();
// Verify uptime has increased
expect(updatedUptime).not.toBe(initialUptime);
// Parse and verify uptime increased
const parseUptime = (uptimeStr: string): number => {
let seconds = 0;
const hourMatch = uptimeStr.match(/(\d+)h/);
const minuteMatch = uptimeStr.match(/(\d+)m/);
const secondMatch = uptimeStr.match(/(\d+)s/);
if (hourMatch) seconds += parseInt(hourMatch[1]) * 3600;
if (minuteMatch) seconds += parseInt(minuteMatch[1]) * 60;
if (secondMatch) seconds += parseInt(secondMatch[1]);
return seconds;
};
const initialSeconds = parseUptime(initialUptime || '');
const updatedSeconds = parseUptime(updatedUptime || '');
expect(updatedSeconds).toBeGreaterThan(initialSeconds);
});
test('should stop monitoring when switching away from Performance tab', async ({ page }) => {
await page.locator('button[data-trigger="dev-tools"]').click();
await expect(page.locator('.console-header')).toBeVisible();
const performanceTab = page.locator('.console-tab').filter({ hasText: 'Performance' });
await performanceTab.click();
await expect(performanceTab).toHaveClass(/active/);
await expect(page.locator('.resource-card')).toHaveCount(4);
const consoleTab = page.locator('.console-tab').filter({ hasText: 'Console' });
await consoleTab.click();
await expect(consoleTab).toHaveClass(/active/);
await expect(performanceTab).not.toHaveClass(/active/);
// Verify Console tab content is shown
await expect(page.locator('.console-empty')).toBeVisible();
// Switch back to Performance tab
await performanceTab.click();
await expect(performanceTab).toHaveClass(/active/);
// Verify metrics are still working
const resourceCards = page.locator('.resource-card');
await expect(resourceCards).toHaveCount(4);
// Verify values are being displayed
const cpuValue = resourceCards.first().locator('.resource-value');
await expect(cpuValue).not.toBeEmpty();
});
});