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

2.2 KiB

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

cd packages/backend
source .env    # needs DB credentials
bun run api-test

Filtering

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:

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__/:

cd packages/backend
bun run test

Current unit test coverage: shared utils (date helpers, currency formatting, state normalization).