Files
tkmind_go/ui/desktop/src/components/ToolApprovalButtons.test.tsx
T

69 lines
2.1 KiB
TypeScript

import { render, type RenderOptions, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { resolveAcpPermissionRequest } from '../acp/permissionRequests';
import { IntlTestWrapper } from '../i18n/test-utils';
import ToolApprovalButtons from './ToolApprovalButtons';
vi.mock('../acp/permissionRequests', () => ({
resolveAcpPermissionRequest: vi.fn(),
}));
const renderWithIntl = (ui: React.ReactElement, options?: RenderOptions) =>
render(ui, { wrapper: IntlTestWrapper, ...options });
const resolveAcpPermissionRequestMock = vi.mocked(resolveAcpPermissionRequest);
describe('ToolApprovalButtons', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('marks the approval accepted when the ACP request resolves', async () => {
resolveAcpPermissionRequestMock.mockReturnValueOnce(true);
renderWithIntl(
<ToolApprovalButtons
data={{
id: 'tool-call-approved',
toolName: 'developer__shell',
sessionId: 'session-1',
}}
/>
);
await userEvent.click(screen.getByRole('button', { name: 'Allow Once' }));
expect(resolveAcpPermissionRequestMock).toHaveBeenCalledWith(
'session-1',
'tool-call-approved',
'allow_once'
);
expect(screen.getByText('developer__shell - Allowed once')).toBeInTheDocument();
});
it('shows a stale request error when ACP has no pending request', async () => {
resolveAcpPermissionRequestMock.mockReturnValueOnce(false);
renderWithIntl(
<ToolApprovalButtons
data={{
id: 'tool-call-rerun',
toolName: 'developer__shell',
sessionId: 'session-1',
}}
/>
);
await userEvent.click(screen.getByRole('button', { name: 'Allow Once' }));
expect(resolveAcpPermissionRequestMock).toHaveBeenCalledWith(
'session-1',
'tool-call-rerun',
'allow_once'
);
expect(screen.getByText('This approval request is no longer active.')).toBeInTheDocument();
expect(screen.queryByText('developer__shell - Allowed once')).not.toBeInTheDocument();
});
});