From caf073c185eb6db7a505bd2e4ce611b2c82d4b1d Mon Sep 17 00:00:00 2001 From: Pooja Date: Tue, 3 Mar 2026 19:12:59 +0530 Subject: [PATCH] fix: file extension for clone and rename request (#7278) * fix: file extension for clone and rename request * fix --- .../CloneCollectionItem/index.js | 5 ++- .../RenameCollectionItem/index.js | 6 ++- tests/sidebar/rename-collection-item.spec.ts | 45 +++++++++++++++++++ 3 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 tests/sidebar/rename-collection-item.spec.ts diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CloneCollectionItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CloneCollectionItem/index.js index 31e328dd2..427042fb4 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CloneCollectionItem/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CloneCollectionItem/index.js @@ -3,7 +3,7 @@ import toast from 'react-hot-toast'; import { useFormik } from 'formik'; import * as Yup from 'yup'; import Modal from 'components/Modal'; -import { useDispatch } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import { isItemAFolder } from 'utils/tabs'; import { cloneItem } from 'providers/ReduxStore/slices/collections/actions'; import { IconArrowBackUp, IconEdit, IconCaretDown } from '@tabler/icons'; @@ -18,6 +18,7 @@ import Button from 'ui/Button'; const CloneCollectionItem = ({ collectionUid, item, onClose }) => { const dispatch = useDispatch(); + const collection = useSelector((state) => state.collections.collections?.find((c) => c.uid === collectionUid)); const isFolder = isItemAFolder(item); const inputRef = useRef(); const [isEditing, toggleEditing] = useState(false); @@ -168,7 +169,7 @@ const CloneCollectionItem = ({ collectionUid, item, onClose }) => { onChange={formik.handleChange} value={formik.values.filename || ''} /> - {itemType !== 'folder' && .bru} + {itemType !== 'folder' && .{collection?.format || 'bru'}} ) : (
diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js index 9103c2189..73c2ddc03 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem/index.js @@ -2,7 +2,7 @@ import React, { useRef, useEffect, useState, forwardRef } from 'react'; import { useFormik } from 'formik'; import * as Yup from 'yup'; import Modal from 'components/Modal'; -import { useDispatch } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import { isItemAFolder } from 'utils/tabs'; import { renameItem, saveRequest, closeTabs } from 'providers/ReduxStore/slices/collections/actions'; import path from 'utils/common/path'; @@ -18,6 +18,7 @@ import Button from 'ui/Button'; const RenameCollectionItem = ({ collectionUid, item, onClose }) => { const dispatch = useDispatch(); + const collection = useSelector((state) => state.collections.collections?.find((c) => c.uid === collectionUid)); const isFolder = isItemAFolder(item); const inputRef = useRef(); const [isEditing, toggleEditing] = useState(false); @@ -168,6 +169,7 @@ const RenameCollectionItem = ({ collectionUid, item, onClose }) => { size={16} strokeWidth={1.5} onClick={() => toggleEditing(true)} + data-testid="rename-request-edit-icon" /> )}
@@ -186,7 +188,7 @@ const RenameCollectionItem = ({ collectionUid, item, onClose }) => { onChange={formik.handleChange} value={formik.values.filename || ''} /> - {itemType !== 'folder' && .bru} + {itemType !== 'folder' && .{collection?.format || 'bru'}} ) : (
diff --git a/tests/sidebar/rename-collection-item.spec.ts b/tests/sidebar/rename-collection-item.spec.ts new file mode 100644 index 000000000..44eaa3ef4 --- /dev/null +++ b/tests/sidebar/rename-collection-item.spec.ts @@ -0,0 +1,45 @@ +import { test, expect } from '../../playwright'; +import { buildCommonLocators, createCollection, createRequest, closeAllCollections } from '../utils/page'; + +test.describe('Rename Collection Item - File Extension', () => { + test.afterEach(async ({ page }) => { + await closeAllCollections(page); + }); + + test('should show .yml extension for OpenCollection format when renaming a request', async ({ page, createTmpDir }) => { + const locators = buildCommonLocators(page); + const testDir = await createTmpDir('yml-rename-test'); + + // Create a collection with OpenCollection (YAML) format + await test.step('Create collection with OpenCollection format', async () => { + await createCollection(page, 'YML Rename Test', testDir); + }); + + // Create a request inside the collection + await createRequest(page, 'Test Request', 'YML Rename Test'); + + // Open rename dialog via context menu + await test.step('Open rename dialog and verify .yml extension', async () => { + await locators.sidebar.request('Test Request').hover(); + await locators.actions.collectionItemActions('Test Request').click(); + await locators.dropdown.item('Rename').click(); + + const renameModal = page.locator('.bruno-modal').filter({ hasText: 'Rename Request' }); + await renameModal.waitFor({ state: 'visible' }); + + // Show filesystem name via Options dropdown + await renameModal.locator('.btn-advanced').click(); + await page.locator('.dropdown-item').filter({ hasText: 'Show Filesystem Name' }).click(); + + // Click the IconEdit SVG to enable filename editing + await renameModal.getByTestId('rename-request-edit-icon').click(); + + // Verify the extension shows .yml, not .bru + const extensionLabel = renameModal.locator('.file-extension'); + await expect(extensionLabel).toHaveText('.yml'); + + // Close the rename modal + await renameModal.getByRole('button', { name: 'Cancel' }).click(); + }); + }); +});