Each trip gets a checklist whose items group under free-text categories (Documents, Clothing, Toiletries, Health, Electronics, Extras first, then any custom ones alphabetically). Items are either shared — every member sees and can tick them, and checked_by records who — or personal to one member, which nobody else can see or touch. Items carry an optional quantity, drag-reorder within their category, and "Uncheck all" resets the list for the trip home. The "Suggestions" modal is deterministic, offline advice derived from the trip itself (src/server/util/packing.js) — no LLM and no external calls, so it stays unit-testable and works on a self-hosted box. Nights scale clothing quantities, flights add liquids/power-bank/check-in, rentals add licence + IDP, ferries add motion-sickness tablets, tropical stops add sun cream and repellent, and the destination country picks the plug type from a bundled ~50-country table. Every suggestion carries a short reason, and already-added ones are keyed by suggestion_key so they can't be duplicated. Two rules deliberately differ from the naive reading, both regression-tested: a latitude floor stops a December trip to Bangkok being tagged cold as well as tropical, and only a flight segment's arrival airport counts, since the first segment's departure airport is home rather than a destination. checklist_items is a new table, so the existing CREATE TABLE IF NOT EXISTS path creates it on upgrade; no MIGRATIONS entry is needed and existing data is untouched. docs/API.md documents the full contract. 113/113 tests pass.
17 lines
744 B
JavaScript
17 lines
744 B
JavaScript
// Test barrel. The package.json `test` script runs `node --test tests/`, which
|
|
// on this Node build resolves the directory to `tests/index.js` and runs it as
|
|
// a single test file rather than scanning the directory. Importing each test
|
|
// module here registers its tests with the runner. Add new test files below.
|
|
//
|
|
// These run in one process, so each test file scopes its fixtures with
|
|
// top-level beforeEach/afterEach that touch only its own module-level
|
|
// app/tmpDir — keeping the files independent.
|
|
import './api.test.js';
|
|
import './checklist.test.js';
|
|
import './checklist-suggestions.test.js';
|
|
import './costs.test.js';
|
|
import './flights.test.js';
|
|
import './rental.test.js';
|
|
import './stays.test.js';
|
|
import './transport.test.js';
|