import { jsx as _jsx } from "react/jsx-runtime";
/**
 * @license
 * Copyright 2025 Vybestack LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import { ExitCodes } from '@vybestack/llxprt-code-core';
import { renderWithProviders, waitFor } from '../../test-utils/render.js';
import { act } from 'react';
import { vi } from 'vitest';
import { FolderTrustDialog } from './FolderTrustDialog.js';
const mockedExit = vi.hoisted(() => vi.fn());
const mockedCwd = vi.hoisted(() => vi.fn());
vi.mock('node:process', async () => {
    const actual = await vi.importActual('node:process');
    return {
        ...actual,
        exit: mockedExit,
        cwd: mockedCwd,
    };
});
describe('FolderTrustDialog', () => {
    beforeEach(() => {
        vi.clearAllMocks();
        mockedCwd.mockReturnValue('/home/user/project');
    });
    it('should render the dialog with title and description', () => {
        const { lastFrame } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: vi.fn() }));
        expect(lastFrame()).toContain('Do you trust this folder?');
        expect(lastFrame()).toContain('Trusting a folder allows llxprt to execute commands it suggests.');
    });
    it('should display exit message and call process.exit and not call onSelect when escape is pressed', async () => {
        const onSelect = vi.fn();
        const { lastFrame, stdin } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: onSelect, isRestarting: false }));
        act(() => {
            stdin.write('\u001b[27u'); // Press kitty escape key
        });
        await waitFor(() => {
            expect(lastFrame()).toContain('A folder trust level must be selected to continue. Exiting since escape was pressed.');
        });
        await waitFor(() => {
            expect(mockedExit).toHaveBeenCalledWith(ExitCodes.FATAL_CONFIG_ERROR);
        });
        expect(onSelect).not.toHaveBeenCalled();
    });
    it('should display restart message when isRestarting is true', () => {
        const { lastFrame } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: vi.fn(), isRestarting: true }));
        expect(lastFrame()).toContain('To see changes, llxprt must be restarted');
    });
    it('should call process.exit when "r" is pressed and isRestarting is true', async () => {
        const { stdin } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: vi.fn(), isRestarting: true }));
        stdin.write('r');
        await waitFor(() => {
            expect(mockedExit).toHaveBeenCalledWith(ExitCodes.SUCCESS);
        });
    });
    it('should not call process.exit when "r" is pressed and isRestarting is false', async () => {
        const { stdin } = renderWithProviders(_jsx(FolderTrustDialog, { onSelect: vi.fn(), isRestarting: false }));
        act(() => {
            stdin.write('r');
        });
        await waitFor(() => {
            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(_jsx(FolderTrustDialog, { onSelect: vi.fn() }));
            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(_jsx(FolderTrustDialog, { onSelect: vi.fn() }));
            expect(lastFrame()).toContain('Trust parent folder ()');
        });
    });
});
//# sourceMappingURL=FolderTrustDialog.test.js.map