Repository navigation
Fixes
- TestCases: render the case view correctly on its early-return paths instead of falling through to a 500. (#51)
- Migrations: fix actions that broke when the Migrations plugin is installed — an array-to-string in
index/confirm, a fatal function redeclaration in the drift-check view on re-render, and a 500 when the temp-database flow runs on a non-MySQL driver (now degrades gracefully). (#64) - Wrap the page-header row on phones so the action buttons stay on screen.
- Lighten the form placeholder color so it isn't mistaken for real content.
Improvements
- New — Association ↔ DB foreign-key audit (
/test-helper/associations): a symmetric diff between a table's declared associations (belongsTo/hasMany/hasOne/belongsToMany) and the database's actual foreign keys, with a copy-paste fix on every finding. It flags associations with no DB constraint, DB foreign keys with no association, target/column mismatches, and*_idcolumns that look like foreign keys but have neither. App and first-party plugin tables are scanned by default (vendor opt-in), via a color-coded summary matrix, per-table detail, and a flat scan. (#44) - On top of that constraint diff, the audit adds several cross-cutting layers:
- Key type — flags a foreign key whose column type disagrees with the referenced key (e.g.
integerreferencinguuid) or is narrower than it (e.g.integer→biginteger); matching non-integer keys are an info hint. Suggests achangeColumn()fix; silence the info viaTestHelper.associationAudit.preferIntegerKeys. (#46, #47) - Cascade rules — compares a
hasMany/hasOnedependentintent against the matching foreign key'sON DELETErule, with a fix for either side. (#53) - Index presence — flags foreign-key-style columns that are not the leading column of any index (so joins and lookups table-scan); info-level, gated by
TestHelper.associationAudit.checkIndexes(defaulttrue). Especially useful on PostgreSQL, where a foreign-key constraint does not auto-create an index on the referencing column. (#58) - Composite foreign keys are now diffed instead of skipped, and the summary matrix gained dedicated
Key type,Cascade, andIndexcolumns. (#53, #58)
- Key type — flags a foreign key whose column type disagrees with the referenced key (e.g.
- Findings are sorted worst-first, and the flat scan has topic filter chips to mute whole categories at once. (#45, #50)
- Add an optional "back to app" link in the TestHelper navbar. (#56)
Full Changelog: 2.8.4...2.9.0