Files
lunarfront-app/docs/testing.md
Ryan Moon 9400828f62 Rename Forte to LunarFront, generalize for any small business
Rebrand from Forte (music-store-specific) to LunarFront (any small business):
- Package namespace @forte/* → @lunarfront/*
- Database forte/forte_test → lunarfront/lunarfront_test
- Docker containers, volumes, connection strings
- UI branding, localStorage keys, test emails
- All documentation and planning docs

Generalize music-specific terminology:
- instrumentDescription → itemDescription
- instrumentCount → itemCount
- instrumentType → itemCategory (on service templates)
- New migration 0027_generalize_terminology for column renames
- Seed data updated with generic examples
- RBAC descriptions updated
2026-03-30 08:51:54 -05:00

82 lines
2.2 KiB
Markdown

# Testing
## API Integration Tests
The primary test suite lives at `packages/backend/api-tests/`. It uses a custom runner that:
1. Creates/migrates a `lunarfront_api_test` database
2. Seeds company, lookup tables, RBAC permissions/roles
3. Starts the backend on port 8001
4. Registers a test user with admin role
5. Runs test suites via HTTP requests
6. Tears down the server
### Running
```bash
cd packages/backend
source .env # needs DB credentials
bun run api-test
```
### Filtering
```bash
bun run api-test --suite accounts # run only the accounts suite
bun run api-test --tag crud # run tests tagged 'crud'
```
### Suites
| Suite | Tests | Coverage |
|-------|-------|----------|
| `accounts` | 17 | CRUD, search, pagination, sort, billing mode |
| `members` | 19 | CRUD, search, move, isMinor, address inheritance |
| `files` | 7 | Upload, list, get, delete, validation, profile pictures |
| `rbac` | 21 | Permission enforcement, role CRUD, user status, pagination |
### Writing Tests
Tests are defined in `api-tests/suites/`. Each file exports a suite:
```typescript
import { suite } from '../lib/context.js'
suite('MyDomain', { tags: ['domain'] }, (t) => {
t.test('does something', { tags: ['crud'] }, async () => {
const res = await t.api.post('/v1/endpoint', { name: 'Test' })
t.assert.status(res, 201)
t.assert.equal(res.data.name, 'Test')
})
})
```
Available on `t`:
- `t.api` — HTTP client (`get`, `post`, `patch`, `del`) with auth token
- `t.token` — JWT token string
- `t.baseUrl` — Backend URL
- `t.assert` — Assertion helpers (`status`, `equal`, `ok`, `includes`, `greaterThan`, etc.)
### Assert Methods
| Method | Description |
|--------|-------------|
| `status(res, code)` | Check HTTP status |
| `equal(a, b)` | Strict equality |
| `notEqual(a, b)` | Strict inequality |
| `ok(value)` | Truthy check |
| `includes(arr, value)` | Array includes |
| `contains(str, sub)` | String contains |
| `greaterThan(a, b)` | Numeric comparison |
## Unit Tests
Unit tests use `bun:test` and live alongside the code or in `__tests__/`:
```bash
cd packages/backend
bun run test
```
Current unit test coverage: shared utils (date helpers, currency formatting, state normalization).