37 lines
1.8 KiB
TypeScript
37 lines
1.8 KiB
TypeScript
import { render, screen } from '@testing-library/react'
|
|
import userEvent from '@testing-library/user-event'
|
|
import { describe, expect, it } from 'vitest'
|
|
import App from './App'
|
|
|
|
describe('Learning Planner', () => {
|
|
it('renders a useful seeded dashboard', () => {
|
|
render(<App />)
|
|
expect(screen.getByRole('heading', { name: /good progress starts/i })).toBeInTheDocument()
|
|
expect(screen.getAllByText('Master practical TypeScript patterns').length).toBeGreaterThan(0)
|
|
expect(screen.getByText('Due this week')).toBeInTheDocument()
|
|
})
|
|
|
|
it('validates and creates a goal', async () => {
|
|
const user = userEvent.setup()
|
|
render(<App />)
|
|
await user.click(screen.getByRole('button', { name: 'Learning goals' }))
|
|
await user.click(screen.getByRole('button', { name: 'New goal' }))
|
|
await user.click(screen.getByRole('button', { name: 'Save goal' }))
|
|
expect(screen.getByText('Enter a goal title.')).toBeInTheDocument()
|
|
await user.type(screen.getByLabelText(/Goal title/), 'Learn browser APIs')
|
|
await user.type(screen.getByLabelText(/Category/), 'Web platform')
|
|
await user.type(screen.getByLabelText(/Target date/), '2026-12-01')
|
|
await user.click(screen.getByRole('button', { name: 'Save goal' }))
|
|
expect(screen.getByRole('heading', { name: 'Learn browser APIs' })).toBeInTheDocument()
|
|
})
|
|
|
|
it('filters the task library', async () => {
|
|
const user = userEvent.setup()
|
|
render(<App />)
|
|
await user.click(screen.getByRole('button', { name: 'All tasks' }))
|
|
await user.type(screen.getByLabelText('Search tasks'), 'Firefox')
|
|
expect(screen.getByRole('heading', { name: 'Run Firefox regression suite' })).toBeInTheDocument()
|
|
expect(screen.queryByRole('heading', { name: 'Add safe import validation' })).not.toBeInTheDocument()
|
|
})
|
|
})
|