mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-15 16:41:11 -07:00
fix(trust): Update config.isTrustedFolder (#7373)
This commit is contained in:
@@ -39,6 +39,7 @@ describe('validateAuthMethod', () => {
|
||||
});
|
||||
|
||||
it('should return an error message if GEMINI_API_KEY is not set', () => {
|
||||
vi.stubEnv('GEMINI_API_KEY', '');
|
||||
expect(validateAuthMethod(AuthType.USE_GEMINI)).toBe(
|
||||
'GEMINI_API_KEY environment variable not found. Add that to your environment and try again (no reload needed if using .env)!',
|
||||
);
|
||||
|
||||
@@ -2004,28 +2004,16 @@ describe('loadCliConfig trustedFolder', () => {
|
||||
description:
|
||||
'feature disabled, folderTrust false, workspace trusted -> behave as trusted',
|
||||
},
|
||||
|
||||
// Cases where folderTrustFeature is true but folderTrust setting is false
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
folderTrust: false,
|
||||
isWorkspaceTrusted: true,
|
||||
expectedFolderTrust: false,
|
||||
expectedIsTrustedFolder: true,
|
||||
description:
|
||||
'feature on, folderTrust false, workspace trusted -> behave as trusted',
|
||||
},
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
folderTrustFeature: false,
|
||||
folderTrust: false,
|
||||
isWorkspaceTrusted: false,
|
||||
expectedFolderTrust: false,
|
||||
expectedIsTrustedFolder: true,
|
||||
description:
|
||||
'feature on, folderTrust false, workspace not trusted -> behave as trusted',
|
||||
'feature disabled, folderTrust false, workspace not trusted -> behave as trusted',
|
||||
},
|
||||
|
||||
// Cases where feature is fully enabled (folderTrustFeature and folderTrust are true)
|
||||
// Cases where folderTrustFeature is true (feature enabled)
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
folderTrust: true,
|
||||
@@ -2033,7 +2021,7 @@ describe('loadCliConfig trustedFolder', () => {
|
||||
expectedFolderTrust: true,
|
||||
expectedIsTrustedFolder: true,
|
||||
description:
|
||||
'feature on, folderTrust on, workspace trusted -> is trusted',
|
||||
'feature enabled, folderTrust true, workspace trusted -> behave as trusted',
|
||||
},
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
@@ -2042,28 +2030,46 @@ describe('loadCliConfig trustedFolder', () => {
|
||||
expectedFolderTrust: true,
|
||||
expectedIsTrustedFolder: false,
|
||||
description:
|
||||
'feature on, folderTrust on, workspace NOT trusted -> is NOT trusted',
|
||||
'feature enabled, folderTrust true, workspace not trusted -> behave as not trusted',
|
||||
},
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
folderTrust: true,
|
||||
isWorkspaceTrusted: undefined,
|
||||
expectedFolderTrust: true,
|
||||
expectedIsTrustedFolder: undefined,
|
||||
expectedIsTrustedFolder: true,
|
||||
description:
|
||||
'feature on, folderTrust on, workspace trust unknown -> is unknown',
|
||||
'feature enabled, folderTrust false, workspace trust unknown -> behave as trusted',
|
||||
},
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
folderTrust: false,
|
||||
isWorkspaceTrusted: true,
|
||||
expectedFolderTrust: false,
|
||||
expectedIsTrustedFolder: true,
|
||||
description:
|
||||
'feature enabled, folderTrust false, workspace trusted -> behave as trusted',
|
||||
},
|
||||
{
|
||||
folderTrustFeature: true,
|
||||
folderTrust: false,
|
||||
isWorkspaceTrusted: false,
|
||||
expectedFolderTrust: false,
|
||||
expectedIsTrustedFolder: true,
|
||||
description:
|
||||
'feature enabled, folderTrust false, workspace not trusted -> behave as trusted',
|
||||
},
|
||||
];
|
||||
|
||||
for (const {
|
||||
folderTrustFeature,
|
||||
folderTrust,
|
||||
isWorkspaceTrusted: mockTrustValue,
|
||||
isWorkspaceTrusted: isWorkspaceTrustedValue,
|
||||
expectedFolderTrust,
|
||||
expectedIsTrustedFolder,
|
||||
description,
|
||||
} of testCases) {
|
||||
it(`should be correct for: ${description}`, async () => {
|
||||
it(`should correctly set folderTrust and isTrustedFolder when ${description}`, async () => {
|
||||
(isWorkspaceTrusted as Mock).mockImplementation((settings: Settings) => {
|
||||
const folderTrustFeature =
|
||||
settings.security?.folderTrust?.featureEnabled ?? false;
|
||||
@@ -2074,7 +2080,7 @@ describe('loadCliConfig trustedFolder', () => {
|
||||
if (!folderTrustEnabled) {
|
||||
return true;
|
||||
}
|
||||
return mockTrustValue; // This is the part that comes from the test case
|
||||
return isWorkspaceTrustedValue; // This is the part that comes from the test case
|
||||
});
|
||||
const argv = await parseArguments({} as Settings);
|
||||
const settings: Settings = {
|
||||
|
||||
@@ -107,6 +107,7 @@ import { appEvents, AppEvent } from '../utils/events.js';
|
||||
import { isNarrowWidth } from './utils/isNarrowWidth.js';
|
||||
import { useWorkspaceMigration } from './hooks/useWorkspaceMigration.js';
|
||||
import { WorkspaceMigrationDialog } from './components/WorkspaceMigrationDialog.js';
|
||||
import { isWorkspaceTrusted } from '../config/trustedFolders.js';
|
||||
|
||||
const CTRL_EXIT_PROMPT_DURATION_MS = 1000;
|
||||
// Maximum number of queued messages to display in UI to prevent performance issues
|
||||
@@ -204,7 +205,7 @@ const App = ({ config, settings, startupWarnings = [], version }: AppProps) => {
|
||||
const [footerHeight, setFooterHeight] = useState<number>(0);
|
||||
const [corgiMode, setCorgiMode] = useState(false);
|
||||
const [isTrustedFolderState, setIsTrustedFolder] = useState(
|
||||
config.isTrustedFolder(),
|
||||
isWorkspaceTrusted(settings.merged),
|
||||
);
|
||||
const [currentModel, setCurrentModel] = useState(config.getModel());
|
||||
const [shellModeActive, setShellModeActive] = useState(false);
|
||||
|
||||
@@ -143,24 +143,6 @@ describe('ToolConfirmationMessage', () => {
|
||||
expect(lastFrame()).toContain(alwaysAllowText);
|
||||
});
|
||||
|
||||
it('should show "allow always" when folder trust is undefined', () => {
|
||||
const mockConfig = {
|
||||
isTrustedFolder: () => undefined,
|
||||
getIdeMode: () => false,
|
||||
} as unknown as Config;
|
||||
|
||||
const { lastFrame } = renderWithProviders(
|
||||
<ToolConfirmationMessage
|
||||
confirmationDetails={details}
|
||||
config={mockConfig}
|
||||
availableTerminalHeight={30}
|
||||
terminalWidth={80}
|
||||
/>,
|
||||
);
|
||||
|
||||
expect(lastFrame()).toContain(alwaysAllowText);
|
||||
});
|
||||
|
||||
it('should NOT show "allow always" when folder is untrusted', () => {
|
||||
const mockConfig = {
|
||||
isTrustedFolder: () => false,
|
||||
|
||||
@@ -56,7 +56,7 @@ export const ToolConfirmationMessage: React.FC<
|
||||
onConfirm(outcome);
|
||||
};
|
||||
|
||||
const isTrustedFolder = config.isTrustedFolder() !== false;
|
||||
const isTrustedFolder = config.isTrustedFolder();
|
||||
|
||||
useKeypress(
|
||||
(key) => {
|
||||
|
||||
Reference in New Issue
Block a user