Document the test suite in the command and setup docs.
`package.json` has had a `test` script since the interior-polish work landed, and 12 files under `server/__tests__/` now guard hall geometry, clearance, brightness, window styles and the movement-links validators. Nothing outside `data-and-images.md` said the suite existed, and no document said how to run it — despite Bible.md requiring tests to be written before the code. FAC.md gains a Tests section between Verify and Build frontend: the command, what the suite covers by area, and the two properties that make it cheap to run — no test framework (Node's built-in runner) and no database or server, since the tests read the client's style and geometry modules from disk. setup.md lists `npm test` first in the Run table and notes on the Node prerequisite that the script depends on `node --test` expanding `**` itself. README.md gets the command beside the dev-server ones, and the interiors section of data-and-images.md now points at the suite that enforces its rules. Docs only; no source changes. Verified by running the suite (15 suites, 41 tests, all passing) and by confirming from PowerShell — which does not expand globs — that the runner does its own pattern matching. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9f96b3835d
commit
72fe45fa52
4 files changed
+34
-1
No files matched your search
@@ -286,6 +286,28 @@ docker login gitea.mysuperlab.netcraze.pro
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
npm test # whole suite
|
||||||
|
node --test server/__tests__/floor-brightness.test.js # one file
|
||||||
|
```
|
||||||
|
|
||||||
|
Runs `node --test server/__tests__/**/*.test.js` — **15 suites, 41 tests, ~1 s**. No test framework is installed: this is Node's built-in runner, and `node --test` expands the `**` pattern itself, so the command behaves the same from PowerShell, cmd and bash.
|
||||||
|
|
||||||
|
The suite needs **no database and no running server** — the tests read the client's style and geometry modules from disk and call the server's validators directly.
|
||||||
|
|
||||||
|
| Area | Test files |
|
||||||
|
|---|---|
|
||||||
|
| Hang geometry and clearance | `painting-column-clearance`, `doorway-clearance` |
|
||||||
|
| Period interiors | `abex-loft-interior`, `baroque-panels`, `dada-interior`, `high-renaissance-interior`, `mannerist-columns`, `neoclassical-interior`, `surrealist-interior` |
|
||||||
|
| Brightness and windows | `floor-brightness`, `no-factory-windows` |
|
||||||
|
| Movement links and lineage | `movement-lineage-service` |
|
||||||
|
|
||||||
|
**Write the test before the code it covers** — see [Bible.md](Bible.md). The interior rules this suite enforces are described in [data-and-images.md](data-and-images.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Build frontend
|
## Build frontend
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
|
|||||||
@@ -326,6 +326,8 @@ Wing layout lives in `client/src/utils/movementHallLayout.ts` (up to 55 works pe
|
|||||||
|
|
||||||
**Paintings must not sit in front of mid-wall bay columns/pilasters.** Column Z centres use the same `bayPositions` formula as the period modules. Keep-out half-widths per `details` kind live in `client/src/utils/sideColumnKeepOuts.ts` (`SIDE_WALL_COLUMN_RHYTHMS`: gothic, roman, quattrocento, cinquecento, mannerist, neoclassical, gothic-revival, art-nouveau). Side-wall hang packs into the gaps between those keep-outs and **grows hall depth** when needed; columns are never moved. Windows also treat column keep-outs as occupied so they do not land on shafts. Regression: `server/__tests__/painting-column-clearance.test.js`.
|
**Paintings must not sit in front of mid-wall bay columns/pilasters.** Column Z centres use the same `bayPositions` formula as the period modules. Keep-out half-widths per `details` kind live in `client/src/utils/sideColumnKeepOuts.ts` (`SIDE_WALL_COLUMN_RHYTHMS`: gothic, roman, quattrocento, cinquecento, mannerist, neoclassical, gothic-revival, art-nouveau). Side-wall hang packs into the gaps between those keep-outs and **grows hall depth** when needed; columns are never moved. Windows also treat column keep-outs as occupied so they do not land on shafts. Regression: `server/__tests__/painting-column-clearance.test.js`.
|
||||||
|
|
||||||
|
Run `npm test` after touching any interior module, hall layout or tint: the rules above are covered by 15 suites under `server/__tests__/` that parse these source files directly — see [FAC.md](FAC.md) § Tests.
|
||||||
|
|
||||||
The same U-hang applies to artist halls and guided tours (artist halls have no period bay columns). Hall lighting is **shared** (no per-painting spotlights) so `MeshStandardMaterial` walls stay within WebGL light limits — see [basics.md](basics.md) § Shared 3D behaviour. To change a movement’s look, edit its entry in `movement-interior-styles.ts` and rebuild the client.
|
The same U-hang applies to artist halls and guided tours (artist halls have no period bay columns). Hall lighting is **shared** (no per-painting spotlights) so `MeshStandardMaterial` walls stay within WebGL light limits — see [basics.md](basics.md) § Shared 3D behaviour. To change a movement’s look, edit its entry in `movement-interior-styles.ts` and rebuild the client.
|
||||||
|
|
||||||
## Historical event markers (frontend timeline)
|
## Historical event markers (frontend timeline)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- **Node.js** 20+
|
- **Node.js** 20+ (verified on 24.19; `npm test` relies on `node --test` expanding `**` itself, which older majors may not do)
|
||||||
- **PostgreSQL** reachable from the app host
|
- **PostgreSQL** reachable from the app host
|
||||||
- Network access to Wikipedia / Wikimedia (for biographies, seeding, and on-demand image fetch)
|
- Network access to Wikipedia / Wikimedia (for biographies, seeding, and on-demand image fetch)
|
||||||
|
|
||||||
@@ -107,6 +107,7 @@ Image fetch can take hours if you run it for the entire catalog. The first line
|
|||||||
|
|
||||||
| Command | Purpose |
|
| Command | Purpose |
|
||||||
|---------|---------|
|
|---------|---------|
|
||||||
|
| `npm test` | **Test suite** — 15 suites / 41 tests on Node’s built-in runner; no database or server needed |
|
||||||
| `npm run dev:web` | **Public dev stack** — Vite `:5173`, API `:3451` (Keenetic → devgallery…) |
|
| `npm run dev:web` | **Public dev stack** — Vite `:5173`, API `:3451` (Keenetic → devgallery…) |
|
||||||
| `npm run prod:docker:publish` | Build + push prod image to Gitea |
|
| `npm run prod:docker:publish` | Build + push prod image to Gitea |
|
||||||
| `npm run devtoprod:images` | Copy `data/images/` → TrueNAS via SMB `Gallery` share |
|
| `npm run devtoprod:images` | Copy `data/images/` → TrueNAS via SMB `Gallery` share |
|
||||||
|
|||||||
@@ -86,6 +86,14 @@ Operator guide: [Documentation/environments.md](Documentation/environments.md).
|
|||||||
npm run dev:web # Vite :5173, API :3451
|
npm run dev:web # Vite :5173, API :3451
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Tests** (Node’s built-in runner — no database or server needed):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm test # 15 suites, 41 tests
|
||||||
|
```
|
||||||
|
|
||||||
|
Per [Documentation/Bible.md](Documentation/Bible.md), write the test before the code it covers.
|
||||||
|
|
||||||
**Local HMR:**
|
**Local HMR:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in new issue
Block a user