mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-08 06:28:33 +00:00
* feat: add description column to various tables and enhance UI interactions - Introduced a description column in Headers, VarsTable, and other components to allow multi-line descriptions. - Added toggle buttons to show/hide the description column in relevant tables. - Updated EditableTable component to support dynamic row addition with customizable labels. - Enhanced UI for better user experience with consistent button styles and spacing adjustments. * chore: resize fix handles * fix: restrict column check for last index * refactor: remove unwanted style and fix bottom padding of the last child in the table row * tests: improve testability and fix impacted locators * tests: fix locators for value fields * fix: improve newline handling in description prefix * fix: ts changes * chore: remove redundant code and fix description roundtrip * chore: remove redundant check * tests(bru-lang): tests for description and annotation * test: improve locators and tests * tests: descriptions * chore: re-add description setup * fix: re-add description cols * chore: fix the double click reset * fix: account for hidden sidebar in request pane width calculation * refactor: ui/ux fixes for data type toggle * chore: inline common deps into bruno-lang and bruno-schema * chore: tests * chore: fix ux for descriptions * fix: layout for environment vars table * fix: ensure correct row selection for multipart file upload in tests * feat: enhance UID assignment for request headers and variables in collections * chore: simplify * chore: update pkg * chore: abstract the e2e utils * chore: fix exports * tests: fix locators for datatype vars * fix: ux issue with secrets in environment table * tests: update locators for collection headers and vars descriptions * tests: update locators to use data attributes for datatype selectors * chore: update default css width for actions column * chore: remove tooltip for string type warnings * fix: reduce name widths * refactor: update annotation serialization to use single-quote delimiters for descriptions * refactor(tests): simplify description formatting in jsonToEnv tests * feat: add multiline description escaping and unescaping functions with tests * refactor: clean up imports and improve multiline text block handling * refactor: update locators to use new test IDs for environment variable editors * refactor: streamline header input handling and improve environment variable row access * refactor: update e2e-test job to support self-hosted runners * refactor: update E2E test runner configuration to include e2e and macOS environments --------- Co-authored-by: Pragadesh-45 <temporaryg7904@gmail.com>
77 lines
3.2 KiB
TypeScript
77 lines
3.2 KiB
TypeScript
import { test, expect } from '../../../playwright';
|
|
|
|
test.describe('Multiline Variables - Write Test', () => {
|
|
test('should create and use multiline environment variable dynamically', async ({ pageWithUserData: page }) => {
|
|
// open the collection
|
|
const collection = page.getByTestId('collections').locator('#sidebar-collection-name').filter({ hasText: 'multiline-variables' });
|
|
await expect(collection).toBeVisible();
|
|
await collection.click();
|
|
|
|
// open request
|
|
await expect(page.getByTitle('multiline-test', { exact: true })).toBeVisible();
|
|
await page.getByTitle('multiline-test', { exact: true }).dblclick();
|
|
|
|
// open environment dropdown
|
|
await page.locator('div.current-environment').click();
|
|
|
|
// select test environment
|
|
await expect(page.locator('.dropdown-item').filter({ hasText: 'Test' })).toBeVisible();
|
|
await page.locator('.dropdown-item').filter({ hasText: 'Test' }).click();
|
|
await expect(page.locator('.current-environment').filter({ hasText: /Test/ })).toBeVisible();
|
|
|
|
// select configure button from environment dropdown
|
|
await page.locator('div.current-environment').click();
|
|
|
|
// open environment configuration
|
|
await expect(page.getByText('Configure', { exact: true })).toBeVisible();
|
|
await page.getByText('Configure', { exact: true }).click();
|
|
|
|
const envTab = page.locator('.request-tab').filter({ hasText: 'Environments' });
|
|
await expect(envTab).toBeVisible();
|
|
|
|
const emptyRowNameInput = page.locator('tbody tr').last().locator('input[placeholder="Name"]');
|
|
await expect(emptyRowNameInput).toBeVisible();
|
|
await emptyRowNameInput.fill('multiline_data_json');
|
|
|
|
// After filling the name, the table appends a new empty row causing persistent layout shifts.
|
|
// Use force:true to bypass Playwright's stability check on the CodeMirror click.
|
|
const variableRow = page.locator('tbody tr').filter({ has: page.locator('input[value="multiline_data_json"]') });
|
|
await expect(variableRow).toBeVisible();
|
|
const codeMirror = variableRow.getByTestId(/^test-multiline-editor-\d+\.value$/);
|
|
|
|
const jsonValue = `{
|
|
"user": {
|
|
"name": "John Doe",
|
|
"email": "john@example.com",
|
|
"preferences": {
|
|
"theme": "dark",
|
|
"notifications": true
|
|
}
|
|
},
|
|
"metadata": {
|
|
"created": "2025-09-03",
|
|
"version": "1.0"
|
|
}
|
|
}`;
|
|
|
|
await codeMirror.click({ force: true });
|
|
await page.keyboard.insertText(jsonValue);
|
|
|
|
await page.getByTestId('save-env').click();
|
|
|
|
await envTab.hover();
|
|
await envTab.getByTestId('request-tab-close-icon').click({ force: true });
|
|
|
|
await page.getByTestId('send-arrow-icon').click();
|
|
|
|
// wait for response status
|
|
await expect(page.locator('.response-status-code.text-ok')).toBeVisible();
|
|
await expect(page.locator('.response-status-code')).toContainText('200');
|
|
|
|
// verify multiline JSON variable resolution in response
|
|
const expectedBody
|
|
= '{\n "user": {\n "name": "John Doe",\n "email": "john@example.com",\n "preferences": {\n "theme": "dark",\n "notifications": true\n }\n },\n "metadata": {\n "created": "2025-09-03",\n "version": "1.0"\n }\n}';
|
|
await expect(page.locator('.response-pane')).toContainText(`"body": ${JSON.stringify(expectedBody)}`);
|
|
});
|
|
});
|