Add a persisted test suite
`bundle exec rake test` (minitest, a default gem but pinned in Gemfile for reproducibility) now covers what ad-hoc scripts kept re-verifying by hand during development: Gpx/Fit/TrackStats parsing, GpxStore/LiveTrackStore file/TTL logic, LiveTrackClient's payload parsing, and app.rb's routes end to end via Rack::MockRequest. MAPTOOL_DATA_DIR (new, app.rb) lets the suite point GPX_STORE/ LIVETRACK_STORE at a throwaway directory instead of real data/ — without it every run would leave uploaded test files behind. Each lib file's old `if __FILE__ == $0` self-check is now redundant with real tests covering the same ground, so removed rather than kept as a second copy of the same assertions. Wired into ci.yml so it isn't just a local convenience.
This commit is contained in:
1 parent
a3c31ace06
commit
cd4eef342b
19 files changed
+706
-174
No files matched your search
+27
-3
@@ -91,13 +91,37 @@ gpsd -N -n tcp://127.0.0.1:5001
|
||||
`GET /api/gnss/position` should then report the fake fix (Bratislava
|
||||
Castle, in the sentences above) within a couple of seconds.
|
||||
|
||||
== Tests
|
||||
|
||||
`bundle exec rake test` runs the whole suite (`test/test_*.rb`,
|
||||
Minitest — a default gem, but pinned in the `Gemfile`'s `:test` group
|
||||
for reproducibility, same reasoning as `rake` itself). `test_app.rb`
|
||||
drives `app.rb`'s routes end to end through `Rack::MockRequest` rather
|
||||
than a real server; everything else tests one `lib/maptool/` module in
|
||||
isolation. `MAPTOOL_DATA_DIR` (see `app.rb`) is pointed at a throwaway
|
||||
`Dir.mktmpdir` by `test/test_helper.rb` before `app.rb` loads, so
|
||||
running the suite never touches real `data/` — the app-level tests
|
||||
also wipe that directory between each test (see `AppTestHelper#teardown`),
|
||||
since `GPX_STORE`/`LIVETRACK_STORE` are process-wide constants shared
|
||||
by every test in the run.
|
||||
|
||||
`LiveTrackClient`'s own tests use a synthetic fixture (no network) —
|
||||
its parsing was checked against real Garmin sessions by hand during
|
||||
development, not by the suite, since that needs a live, unexpired
|
||||
session token to fetch. `Fit`'s tests likewise build a minimal FIT
|
||||
file by hand rather than shipping a real device fixture; correctness
|
||||
against real files (position/altitude fields, definition-message
|
||||
framing, compressed-timestamp headers) was checked by hand against
|
||||
`python-fitparse`'s test fixtures during development — see
|
||||
`docs/architecture.adoc`.
|
||||
|
||||
== Continuous integration
|
||||
|
||||
`.gitea/workflows/ci.yml` runs on every push/PR against a self-hosted
|
||||
Gitea Actions runner: `ruby -c` on every `.rb` file, a `require_relative
|
||||
"app"` smoke check that the app loads without error, and `node --check`
|
||||
on every file under `public/js/`. There is no test suite yet — these
|
||||
are cheap syntax/load checks, not behavioral tests.
|
||||
"app"` smoke check that the app loads without error, `bundle exec rake
|
||||
test` (see above), and `node --check` on every file under
|
||||
`public/js/` — no JS test suite, just a syntax check.
|
||||
|
||||
`.gitea/workflows/renovate.yml` runs
|
||||
https://docs.renovatebot.com[Renovate] (the `renovate/renovate` image)
|
||||
|
||||
Reference in new issue
Block a user