mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-11 09:51:30 +00:00
* feat(snippet-generator): implement encodeUrl setting to control URL encoding in generated snippets * refactor(snippet-generator): rename and enhance URL encoding logic for better clarity and functionality * feat(snippet-generator): enhance raw URL handling to preserve user encoding choices and improve snippet generation * test(snippet-generator): add tests for URL fragment handling based on encodeUrl setting * test(snippet-generator): improve comments on URL fragment handling to clarify RFC compliance * feat(url): enhance interpolateUrlPathParams to support raw URL handling, preserving user encoding choices for snippet generation * fix(url): ensure URLs are prefixed with http:// if missing in interpolateUrlPathParams function * refactor(snippet-generator): streamline URL handling logic to improve snippet generation and ensure proper encoding based on settings * feat(url): add stripOrigin utility to simplify URL processing in snippet generation * test(snippet-generator): add test for double-encoding of pre-encoded URLs when encodeUrl is true * feat(encoding): implement URL encoding settings and add tests for encoding behavior * fix: address PR review comments (#7187) - Remove unnecessary no-op jest.mock for @usebruno/common/utils - Add length guard to prevent catastrophic replaceAll('/') on root-path URLs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * empty commit * fix(tests): update interpolateUrlPathParams tests to use correct parameter structure * empty commit --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
86 lines
3.3 KiB
TypeScript
86 lines
3.3 KiB
TypeScript
import { test, expect } from '../../../playwright';
|
|
import { openCollection } from '../../utils/page';
|
|
import { buildCommonLocators } from '../../utils/page/locators';
|
|
|
|
test.describe('Code Generation URL Encoding', () => {
|
|
test.describe('when encodeUrl is true', () => {
|
|
test('should encode unencoded URL (spaces to %20)', async ({ pageWithUserData: page }) => {
|
|
const { sidebar, request, modal } = buildCommonLocators(page);
|
|
|
|
await openCollection(page, 'encoding-test');
|
|
await sidebar.request('encode-url-unencoded').click();
|
|
|
|
await request.generateCodeButton().click();
|
|
await expect(page.getByRole('dialog')).toBeVisible();
|
|
|
|
const codeEditor = page.locator('.editor-content .CodeMirror').first();
|
|
await expect(codeEditor).toBeVisible();
|
|
|
|
const generatedCode = await codeEditor.textContent();
|
|
expect(generatedCode).toContain('http://base.source?name=John%20Doe');
|
|
|
|
await modal.closeButton().click();
|
|
await modal.closeButton().waitFor({ state: 'hidden' });
|
|
});
|
|
|
|
test('should double-encode pre-encoded URL (%20 to %2520)', async ({ pageWithUserData: page }) => {
|
|
const { sidebar, request, modal } = buildCommonLocators(page);
|
|
|
|
await openCollection(page, 'encoding-test');
|
|
await sidebar.request('encode-url-preencoded').click();
|
|
|
|
await request.generateCodeButton().click();
|
|
await expect(page.getByRole('dialog')).toBeVisible();
|
|
|
|
const codeEditor = page.locator('.editor-content .CodeMirror').first();
|
|
await expect(codeEditor).toBeVisible();
|
|
|
|
const generatedCode = await codeEditor.textContent();
|
|
expect(generatedCode).toContain('http://base.source?name=John%2520Doe');
|
|
|
|
await modal.closeButton().click();
|
|
await modal.closeButton().waitFor({ state: 'hidden' });
|
|
});
|
|
});
|
|
|
|
test.describe('when encodeUrl is false', () => {
|
|
test('should preserve unencoded URL as-is (spaces kept)', async ({ pageWithUserData: page }) => {
|
|
const { sidebar, request, modal } = buildCommonLocators(page);
|
|
|
|
await openCollection(page, 'encoding-test');
|
|
await sidebar.request('raw-url-unencoded').click();
|
|
|
|
await request.generateCodeButton().click();
|
|
await expect(page.getByRole('dialog')).toBeVisible();
|
|
|
|
const codeEditor = page.locator('.editor-content .CodeMirror').first();
|
|
await expect(codeEditor).toBeVisible();
|
|
|
|
const generatedCode = await codeEditor.textContent();
|
|
expect(generatedCode).toContain('http://base.source?name=John Doe');
|
|
|
|
await modal.closeButton().click();
|
|
await modal.closeButton().waitFor({ state: 'hidden' });
|
|
});
|
|
|
|
test('should preserve pre-encoded URL as-is', async ({ pageWithUserData: page }) => {
|
|
const { sidebar, request, modal } = buildCommonLocators(page);
|
|
|
|
await openCollection(page, 'encoding-test');
|
|
await sidebar.request('raw-url-preencoded').click();
|
|
|
|
await request.generateCodeButton().click();
|
|
await expect(page.getByRole('dialog')).toBeVisible();
|
|
|
|
const codeEditor = page.locator('.editor-content .CodeMirror').first();
|
|
await expect(codeEditor).toBeVisible();
|
|
|
|
const generatedCode = await codeEditor.textContent();
|
|
expect(generatedCode).toContain('http://base.source?name=John%20Doe');
|
|
|
|
await modal.closeButton().click();
|
|
await modal.closeButton().waitFor({ state: 'hidden' });
|
|
});
|
|
});
|
|
});
|