Files
bruno/tests/runner/collection-run.ts
gopu-bruno c2de480091 feat: revamp Runner UI with Timings and Filters sections (#7505)
* feat: revamp Runner UI with Timings and Filters sections

* fix: use configurable radio name for runner tags

* fix: update Run Collection modal ui

* refactor: improve runner radios accessibility and ux

* fix: address runner review nits

* fix: update tag list hover styling

* fix: add data-testid for runner button

* fix: preserve runner delay when updating request selection config

* fix: preserve runner requestItemsOrder on run

---------

Co-authored-by: naman-bruno <naman@usebruno.com>
2026-03-27 19:38:36 +05:30

68 lines
3.0 KiB
TypeScript

import { test, expect } from '../../playwright';
import { setSandboxMode, runCollection, validateRunnerResults } from '../utils/page/index';
test.describe.parallel('Collection Run', () => {
test('Run bruno-testbench in Developer Mode', async ({ pageWithUserData: page }) => {
test.setTimeout(2 * 60 * 1000);
// Set up developer mode
await setSandboxMode(page, 'bruno-testbench', 'developer');
// Select environment
await page.locator('.environment-selector').nth(1).click();
await page.locator('.dropdown-item').getByText('Prod').click();
// Run the collection
await runCollection(page, 'bruno-testbench');
// Validate test results
await validateRunnerResults(page, {
failed: 0
});
});
test.fixme('Run bruno-testbench in Safe Mode', async ({ pageWithUserData: page }) => {
test.setTimeout(2 * 60 * 1000);
await page.getByText('bruno-testbench').click();
await page.locator('.environment-selector').nth(1).click();
await page.locator('.dropdown-item').getByText('Prod').click();
const collectionContainer = page.getByTestId('collections').locator('.collection-name').filter({ hasText: 'bruno-testbench' });
await collectionContainer.hover();
await collectionContainer.locator('.collection-actions .icon').waitFor({ state: 'visible' });
await collectionContainer.locator('.collection-actions .icon').click();
await page.getByText('Run', { exact: true }).click();
// Wait for the runner tab to open
// If there are existing results, reset first, otherwise wait for Run Collection button
const resetButton = page.getByRole('button', { name: 'Reset' });
const runCollectionButton = page.getByTestId('runner-run-button');
// Check if Reset button is visible (means there are existing results)
const resetVisible = await resetButton.isVisible().catch(() => false);
if (resetVisible) {
await resetButton.click();
// Wait a bit for the reset to complete
await page.waitForTimeout(500);
}
// Now wait for and click Run Collection button
await runCollectionButton.waitFor({ state: 'visible', timeout: 10000 });
await runCollectionButton.click();
await page.getByRole('button', { name: 'Run Again' }).waitFor({ timeout: 2 * 60 * 1000 });
// Parse and validate test results from filter buttons
const allButton = page.locator('button').filter({ hasText: /^All/ });
const passedButton = page.locator('button').filter({ hasText: /^Passed/ });
const failedButton = page.locator('button').filter({ hasText: /^Failed/ });
const skippedButton = page.locator('button').filter({ hasText: /^Skipped/ });
const totalRequests = parseInt(await allButton.locator('span').innerText());
const passed = parseInt(await passedButton.locator('span').innerText());
const failed = parseInt(await failedButton.locator('span').innerText());
const skipped = parseInt(await skippedButton.locator('span').innerText());
await expect(failed).toBe(0);
await expect(passed).toBe(totalRequests - skipped - failed);
});
});