From 421f989fafab5634e08bbededddc9cd38d36d66e Mon Sep 17 00:00:00 2001 From: hritan <48129645+hritan@users.noreply.github.com> Date: Fri, 29 Aug 2025 19:01:06 +0000 Subject: [PATCH] fix: show parent name in trust folder confirmation (#7331) Co-authored-by: Hriday Taneja --- .../ui/components/FolderTrustDialog.test.tsx | 30 ++++++++++++++++--- .../src/ui/components/FolderTrustDialog.tsx | 5 +++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/ui/components/FolderTrustDialog.test.tsx b/packages/cli/src/ui/components/FolderTrustDialog.test.tsx index 362e9b3c05..c583617aae 100644 --- a/packages/cli/src/ui/components/FolderTrustDialog.test.tsx +++ b/packages/cli/src/ui/components/FolderTrustDialog.test.tsx @@ -8,19 +8,23 @@ import { renderWithProviders } from '../../test-utils/render.js'; import { waitFor } from '@testing-library/react'; import { vi } from 'vitest'; import { FolderTrustDialog, FolderTrustChoice } from './FolderTrustDialog.js'; -import * as process from 'node:process'; + +const mockedExit = vi.hoisted(() => vi.fn()); +const mockedCwd = vi.hoisted(() => vi.fn()); vi.mock('process', async () => { const actual = await vi.importActual('process'); return { ...actual, - exit: vi.fn(), + exit: mockedExit, + cwd: mockedCwd, }; }); describe('FolderTrustDialog', () => { beforeEach(() => { vi.clearAllMocks(); + mockedCwd.mockReturnValue('/home/user/project'); }); it('should render the dialog with title and description', () => { @@ -78,7 +82,7 @@ describe('FolderTrustDialog', () => { stdin.write('r'); await waitFor(() => { - expect(process.exit).toHaveBeenCalledWith(0); + expect(mockedExit).toHaveBeenCalledWith(0); }); }); @@ -90,7 +94,25 @@ describe('FolderTrustDialog', () => { stdin.write('r'); await waitFor(() => { - expect(process.exit).not.toHaveBeenCalled(); + expect(mockedExit).not.toHaveBeenCalled(); + }); + }); + + describe('parentFolder display', () => { + it('should correctly display the parent folder name for a nested directory', () => { + mockedCwd.mockReturnValue('/home/user/project'); + const { lastFrame } = renderWithProviders( + , + ); + expect(lastFrame()).toContain('Trust parent folder (user)'); + }); + + it('should correctly display an empty parent folder name for a directory directly under root', () => { + mockedCwd.mockReturnValue('/project'); + const { lastFrame } = renderWithProviders( + , + ); + expect(lastFrame()).toContain('Trust parent folder ()'); }); }); }); diff --git a/packages/cli/src/ui/components/FolderTrustDialog.tsx b/packages/cli/src/ui/components/FolderTrustDialog.tsx index 3b82727910..0060187925 100644 --- a/packages/cli/src/ui/components/FolderTrustDialog.tsx +++ b/packages/cli/src/ui/components/FolderTrustDialog.tsx @@ -11,6 +11,7 @@ import type { RadioSelectItem } from './shared/RadioButtonSelect.js'; import { RadioButtonSelect } from './shared/RadioButtonSelect.js'; import { useKeypress } from '../hooks/useKeypress.js'; import * as process from 'node:process'; +import * as path from 'node:path'; export enum FolderTrustChoice { TRUST_FOLDER = 'trust_folder', @@ -45,13 +46,15 @@ export const FolderTrustDialog: React.FC = ({ { isActive: !!isRestarting }, ); + const parentFolder = path.basename(path.dirname(process.cwd())); + const options: Array> = [ { label: 'Trust folder', value: FolderTrustChoice.TRUST_FOLDER, }, { - label: 'Trust parent folder', + label: `Trust parent folder (${parentFolder})`, value: FolderTrustChoice.TRUST_PARENT, }, {