Files
tolaria/src/components/GitRequiredModal.test.tsx
Test 635d793d32 feat: show blocking modal when vault has no git repo, offer auto-init
When opening a vault without a .git directory, a blocking modal prevents
app use until the user either creates a repository (git init + add +
commit) or chooses another vault. The check runs via is_git_repo Tauri
command; browser mode fails open.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 11:30:39 +02:00

52 lines
2.2 KiB
TypeScript

import { render, screen, fireEvent, waitFor } from '@testing-library/react'
import { describe, it, expect, vi } from 'vitest'
import { GitRequiredModal } from './GitRequiredModal'
describe('GitRequiredModal', () => {
it('renders title and explanation', () => {
render(<GitRequiredModal onCreateRepo={vi.fn()} onChooseVault={vi.fn()} />)
expect(screen.getByText('Git repository required')).toBeInTheDocument()
expect(screen.getByText(/track changes/)).toBeInTheDocument()
})
it('renders both action buttons', () => {
render(<GitRequiredModal onCreateRepo={vi.fn()} onChooseVault={vi.fn()} />)
expect(screen.getByText('Create repository')).toBeInTheDocument()
expect(screen.getByText('Choose another vault')).toBeInTheDocument()
})
it('calls onCreateRepo when primary button clicked', async () => {
const onCreateRepo = vi.fn().mockResolvedValue(undefined)
render(<GitRequiredModal onCreateRepo={onCreateRepo} onChooseVault={vi.fn()} />)
fireEvent.click(screen.getByText('Create repository'))
expect(onCreateRepo).toHaveBeenCalledOnce()
})
it('calls onChooseVault when secondary button clicked', () => {
const onChooseVault = vi.fn()
render(<GitRequiredModal onCreateRepo={vi.fn()} onChooseVault={onChooseVault} />)
fireEvent.click(screen.getByText('Choose another vault'))
expect(onChooseVault).toHaveBeenCalledOnce()
})
it('disables buttons and shows spinner while creating', async () => {
let resolve: () => void
const onCreateRepo = vi.fn().mockReturnValue(new Promise<void>(r => { resolve = r }))
render(<GitRequiredModal onCreateRepo={onCreateRepo} onChooseVault={vi.fn()} />)
fireEvent.click(screen.getByText('Create repository'))
await waitFor(() => {
expect(screen.getByText('Creating…')).toBeInTheDocument()
})
resolve!()
})
it('shows error message when creation fails', async () => {
const onCreateRepo = vi.fn().mockRejectedValue(new Error('Permission denied'))
render(<GitRequiredModal onCreateRepo={onCreateRepo} onChooseVault={vi.fn()} />)
fireEvent.click(screen.getByText('Create repository'))
await waitFor(() => {
expect(screen.getByText(/Permission denied/)).toBeInTheDocument()
})
})
})