import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { beforeEach, describe, expect, it, vi } from 'vitest' import { CreatePublishableAPIKeyDialog } from './CreatePublishableAPIKeyDialog' import { CreateSecretAPIKeyDialog } from './CreateSecretAPIKeyDialog' import { SHORTCUT_IDS } from '@/state/shortcuts/registry' const { mockSetVisible, mockShortcut, mockUseQueryState } = vi.hoisted(() => ({ mockSetVisible: vi.fn(), mockShortcut: vi.fn(({ children }: any) =>
{children}
), mockUseQueryState: vi.fn(), })) vi.mock('next/navigation', async () => { const actual = await vi.importActual('next/navigation') return { ...actual, useParams: () => ({ ref: 'project-ref' }), } }) vi.mock('nuqs', async () => { const actual = await vi.importActual('nuqs') return { ...actual, useQueryState: mockUseQueryState, } }) vi.mock('@/components/ui/Shortcut', () => ({ Shortcut: mockShortcut, })) vi.mock('@/data/api-keys/api-key-create-mutation', () => ({ useAPIKeyCreateMutation: () => ({ mutate: vi.fn(), isPending: false }), })) describe('API key create dialogs', () => { beforeEach(() => { vi.clearAllMocks() mockUseQueryState.mockReturnValue(['', mockSetVisible]) }) it('registers and surfaces the publishable key shortcut on the visible trigger', async () => { const user = userEvent.setup() render() expect(mockShortcut).toHaveBeenCalledWith( expect.objectContaining({ id: SHORTCUT_IDS.API_KEYS_NEW_PUBLISHABLE, onTrigger: expect.any(Function), side: 'bottom', }), undefined ) await user.click(screen.getByRole('button', { name: 'New publishable key' })) expect(mockSetVisible).toHaveBeenCalledWith('publishable') }) it('registers and surfaces the publishable key submit shortcut on the primary action', () => { mockUseQueryState.mockReturnValue(['publishable', mockSetVisible]) render() expect(mockShortcut).toHaveBeenCalledWith( expect.objectContaining({ id: SHORTCUT_IDS.API_KEYS_CREATE_PUBLISHABLE, onTrigger: expect.any(Function), options: { enabled: true }, side: 'top', }), undefined ) expect(screen.getByRole('button', { name: 'Create Publishable API key' })).toBeInTheDocument() }) it('registers and surfaces the secret key shortcut on the visible trigger', async () => { const user = userEvent.setup() render() expect(mockShortcut).toHaveBeenCalledWith( expect.objectContaining({ id: SHORTCUT_IDS.API_KEYS_NEW_SECRET, onTrigger: expect.any(Function), side: 'bottom', }), undefined ) await user.click(screen.getByRole('button', { name: 'New secret key' })) expect(mockSetVisible).toHaveBeenCalledWith('secret') }) it('registers and surfaces the secret key submit shortcut on the primary action', () => { mockUseQueryState.mockReturnValue(['secret', mockSetVisible]) render() expect(mockShortcut).toHaveBeenCalledWith( expect.objectContaining({ id: SHORTCUT_IDS.API_KEYS_CREATE_SECRET, onTrigger: expect.any(Function), options: { enabled: true }, side: 'top', }), undefined ) expect(screen.getByRole('button', { name: 'Create API key' })).toBeInTheDocument() }) })