mirror of
https://github.com/vernu/textbee.git
synced 2026-07-31 09:28:14 -04:00
Establish the testing safety net for the web dashboard before refactoring. - Vitest + React Testing Library + jsdom for unit/component tests - MSW node server mocks the API; unhandled requests throw so tests can never reach a real backend - Playwright e2e boots the real Next app but intercepts every /api/v1 call with shared fixtures, and mints a NextAuth session cookie to run authed - Shared fixtures in test/fixtures.ts back both layers - Seed tests: Button unit tests, MSW sanity checks, and a dashboard e2e happy path plus an auth-guard redirect Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
import { Button } from '@/components/ui/button'
|
|
import { render, screen, userEvent } from '@/test/render'
|
|
|
|
describe('Button', () => {
|
|
it('renders its children', () => {
|
|
render(<Button>Send SMS</Button>)
|
|
expect(screen.getByRole('button', { name: 'Send SMS' })).toBeInTheDocument()
|
|
})
|
|
|
|
it('applies the destructive variant classes', () => {
|
|
render(<Button variant='destructive'>Delete</Button>)
|
|
expect(screen.getByRole('button', { name: 'Delete' })).toHaveClass(
|
|
'bg-destructive'
|
|
)
|
|
})
|
|
|
|
it('fires onClick when pressed', async () => {
|
|
const onClick = vi.fn()
|
|
render(<Button onClick={onClick}>Click</Button>)
|
|
await userEvent.click(screen.getByRole('button', { name: 'Click' }))
|
|
expect(onClick).toHaveBeenCalledOnce()
|
|
})
|
|
|
|
it('does not fire onClick when disabled', async () => {
|
|
const onClick = vi.fn()
|
|
render(
|
|
<Button disabled onClick={onClick}>
|
|
Disabled
|
|
</Button>
|
|
)
|
|
await userEvent.click(screen.getByRole('button', { name: 'Disabled' }))
|
|
expect(onClick).not.toHaveBeenCalled()
|
|
})
|
|
})
|