fix(dev): run the local e2e tier against the app CI runs
Two specs failed locally and passed in CI, which is the least useful direction for a disagreement to point. **`dev-headless.sh` was the only launcher not stubbing out the catalog.** `seed-sandbox.sh` and `ci.yml` both send `YJ_CORE_INDEX_URL` to a dead address; the dev launcher did not, so the app downloaded and built the real ~1M-row Explore catalog into the run's YJ_HOME and every local `make e2e` after that ran against a world CI never sees. Found by reading the failure screenshot: the spec had searched Explore for its fixture album and the page was full of real ones. It defaults to the dead address now and takes an explicit one for exploring by hand. **And the shared backend carries spec state between runs.** `explore-shelves` staged its catalog only `IfEmpty`, so one album row left behind by `requested-badge` satisfied that gate: the shelves were drawn from a single foreign row and the artist card the spec clicks did not exist. It failed on the *second* local run and passed on the first, and never in CI, where every run gets a fresh home. "Is the catalog empty" was the wrong question and "are my rows there" is the right one, so staging is unconditional (INSERT OR IGNORE keyed on the MBID) and the assertion moved from *this insert wrote a row* to *every fixture row is present*. That is both idempotent and stronger: an MBID that fails CHECK(length(mbid) = 16) is silently dropped by OR IGNORE, which the old per-insert count caught only on a cold catalog and the new one catches always. Verified by running the whole suite twice against one app: 97/3 before, 100 passed both times after.
This commit is contained in:
@@ -157,7 +157,22 @@ fi
|
||||
# YJ_TESTCTL mounts backend/testctl's /__test/ endpoints. It is opt-in
|
||||
# rather than implied by the dev build so that a human's `make dev` does
|
||||
# not carry an arbitrary-SQL endpoint on a listening port.
|
||||
#
|
||||
# YJ_CORE_INDEX_URL points at a dead address, which is what
|
||||
# seed-sandbox.sh and ci.yml already do and what this script was the
|
||||
# only one *not* doing. Without it the app downloads and builds the
|
||||
# real ~1M-row Explore catalog into the run's YJ_HOME, so a local `make
|
||||
# e2e` runs against a different world than CI: the specs that stage
|
||||
# their own catalog rows (requested-badge) then search a catalog full
|
||||
# of real albums, fail to find their fixture, and report it as a
|
||||
# regression in whatever was last changed. A spec tier whose result
|
||||
# depends on what a previous run downloaded is not a result -- the same
|
||||
# rule as the emulator's `-no-snapshot`.
|
||||
#
|
||||
# Set YJ_CORE_INDEX_URL yourself to opt back in, for exploring Explore
|
||||
# by hand.
|
||||
YJ_TESTCTL=1 \
|
||||
YJ_CORE_INDEX_URL="${YJ_CORE_INDEX_URL:-http://127.0.0.1:1/none.tar.zst}" \
|
||||
WAILS_SERVER_PORT="$PORT" \
|
||||
YJ_LOG_LEVEL="$LOG_LEVEL" setsid dbus-run-session -- \
|
||||
"$BIN" \
|
||||
|
||||
Reference in New Issue
Block a user