diff --git a/CHANGELOG.md b/CHANGELOG.md index faae1581a..bedb06684 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ All historical references to "CFWheels" in this changelog have been preserved fo ### Fixed +- `tools/test-local.sh` silently aborted with `EXIT=1` (no `/tmp/wheels-test-server.log` written, no diagnostic printed) on every install since the `lucli` → `wheels` rebrand window closed — i.e. anyone whose `~/.lucli/express/` directory never existed. Line 81 ran `LUCEE_LIB=$(find ~/.wheels/express ~/.lucli/express -path "*/lib/ext" -type d 2>/dev/null | head -1)` under `set -euo pipefail`; `find` exits non-zero whenever any path argument doesn't exist (stderr suppressed via `2>/dev/null`, but the exit status survives), `pipefail` propagated it through `head -1`, and the assignment tripped `set -e`. The cleanup trap then fired with no server to clean up, leaving the user staring at "Starting Wheels CLI server on port 8080…" with no further output. Dropped the now-dead `~/.lucli/express` fallback (the rename landed in 3.0 and recent CLI releases extract Lucee Express to `~/.wheels/express/` only) and added `|| true` for defense in depth so a missing directory (e.g. a truly fresh install before `wheels start` has ever run) leaves `LUCEE_LIB` empty and the downstream `[ -n "$LUCEE_LIB" ]` guard skips the JDBC pre-install cleanly (#2796) - Routes registered inside `.namespace("foo")` (or equivalent `.scope()` / `.package()`) with a redundant namespace prefix in the controller path — e.g. `to="foo/dashboard##index"` instead of `to="dashboard##index"` — previously silently produced a `foo.foo/dashboard` lookup that downstream flattened to a `Foodashboard`-style class name with an opaque `Wheels.ViewNotFound` error. The Mapper now rejects this at route-registration time with `Wheels.MapperArgumentInvalid`, naming the namespace and the offending value and pointing at the correct shorter form, so users can find the bad route definition instead of chasing the symptom (#2791) - `WheelsTest` auto-bind missed user-defined global helpers added via `include` in `app/global/functions.cfm`. The pseudo-constructor used `getMetaData(application.wo).functions`, which only enumerates methods declared directly on the CFC and skips symbols merged in via `cfinclude`. Specs that called custom helpers (e.g. `can()`, `hasRole()`) had to manually rebind each one in `beforeAll()`. The auto-bind now iterates `application.wo` as a struct and binds every UDF via `isCustomFunction()`, preserving the existing public-only filter for declared methods (#2790) - Model layer SELECT clause builder now routes column identifiers through the adapter's `$quoteIdentifier`, so reserved-word column names (e.g. `key`, `order`, `group`) survive on every supported dialect instead of breaking `findAll` / `findOne` / dynamic finders with cryptic SQL syntax errors. The WHERE / ORDER BY paths already quoted columns; `$createSQLFieldList` and the empty-pagination column-list extraction in `read.cfc` now match. diff --git a/tools/test-local.sh b/tools/test-local.sh index 8a3ca5222..b4fad747c 100755 --- a/tools/test-local.sh +++ b/tools/test-local.sh @@ -6,8 +6,8 @@ # Wheels is built on the LuCLI runtime; we ship the runtime under the # `wheels` brand. There is no separate `lucli` binary on a normal install. # - Java 21+ installed -# - SQLite JDBC driver in ~/.wheels/express/*/lib/ext/ (auto-installed by recent -# Wheels CLI releases; older releases may use ~/.lucli/express/*/lib/ext/) +# - SQLite JDBC driver in ~/.wheels/express/*/lib/ext/ (auto-installed by +# recent Wheels CLI releases) # # Usage: # bash tools/test-local.sh # run all core tests @@ -75,10 +75,11 @@ if curl -s -o /dev/null --connect-timeout 2 --max-time 3 "http://localhost:${POR else echo "Starting Wheels CLI server on port ${PORT}..." - # Ensure SQLite JDBC is installed. Recent Wheels CLI releases extract - # Lucee Express to ~/.wheels/express/; older releases used ~/.lucli/express/. - # Search both so this script keeps working through the rename. - LUCEE_LIB=$(find ~/.wheels/express ~/.lucli/express -path "*/lib/ext" -type d 2>/dev/null | head -1) + # Locate Lucee Express's lib/ext so we can drop the SQLite JDBC there. + # `|| true` keeps `set -e` from killing the script when the directory is + # missing — `find` exits non-zero on missing path args (stderr suppressed + # via 2>/dev/null but the exit status survives pipefail). + LUCEE_LIB=$(find ~/.wheels/express -path "*/lib/ext" -type d 2>/dev/null | head -1 || true) if [ -n "$LUCEE_LIB" ] && ! ls "$LUCEE_LIB"/sqlite-jdbc*.jar 1>/dev/null 2>&1; then echo "Downloading SQLite JDBC driver..." curl -sL "https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.49.1.0/sqlite-jdbc-3.49.1.0.jar" \