Files
textbee/web/components/ui/__tests__/button.test.tsx
isra el c92740c401 test: add vitest + rtl + msw + playwright harness with mocked api
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>
2026-07-11 01:01:05 +03:00

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()
})
})