Add a real pytest suite, gating the CI build
64 tests covering: auth/setup and the CSRF gate, the "owner adds their own data, anyone linked can mute it" permission pattern shared across calendar-select/tasks-source/whiteboard-source, migration correctness (fresh install, idempotent re-run, expected columns), battery estimate outlier rejection, calendar_feed's fetch/merge/partial-failure handling, webdav_client's fetch/list-directory, the whiteboard force-refresh throttle bypass and browse endpoint, and render-size invariants across calendar views/orientations. No DB/HTTP fixtures need Docker, Node, or a real Immich/CalDAV/WebDAV server -- a fresh temp SQLite file plus a couple of small local HTTP servers as test doubles cover it all. Table data is wiped and reseeded between tests rather than relying on SQLAlchemy's transaction-rollback isolation pattern, which needs a pysqlite event-listener workaround app/db.py's engine doesn't have and has no reason to gain just for tests. Wired into .gitea/workflows/server-docker-build.yml as its own job that build-and-push now depends on, so a failing suite blocks the image push rather than just running alongside it for show.
This commit is contained in:
@@ -303,3 +303,19 @@ CONFIG_PATH=./data/config.json uvicorn app.main:app --reload --host 0.0.0.0 --po
|
||||
`--host 0.0.0.0` matters here: without it, uvicorn defaults to
|
||||
`127.0.0.1` (localhost-only), which the ESP32 can't reach over the LAN.
|
||||
The Docker image already binds `0.0.0.0` by default.
|
||||
|
||||
## Running tests
|
||||
|
||||
```
|
||||
pip install -r requirements-dev.txt
|
||||
pytest
|
||||
```
|
||||
|
||||
Runs against a fresh temp SQLite database (`tests/conftest.py` sets
|
||||
`DATABASE_URL` before anything imports `app.db`), with every table wiped
|
||||
and reseeded (frame #1 + server settings, same as a real fresh install)
|
||||
between tests -- no Docker, Node, or a real Immich/CalDAV/WebDAV server
|
||||
needed; a few tests spin up small local HTTP servers as fixtures to
|
||||
stand in for those. Also runs as its own job in
|
||||
`.gitea/workflows/server-docker-build.yml`, gating the image build/push
|
||||
-- a failing test suite blocks the push, not just decorates it.
|
||||
|
||||
Reference in New Issue
Block a user