1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-08-06 06:54:03 +00:00
tenancy/tests/Bootstrappers
lukinovec aa9d1d7fcf
Parameter validation and other DB manager improvements (#1459)
### Parameter validation

In `statement()` calls of `TenantDatabaseManager`s, use parameter
binding when possible. When that's not possible, validate the parameters
using `validateParameter()` or `validatePassword()`.

Passwords use a less strict allowlist than other parameters (e.g. DB
names), since passwords tend to use more special characters but we can
afford to be more restrictive in the generic `validateParameter()`.

In `SQLiteDatabaseManager`, names of file-based databases are validated
(in `createDatabase`, `deleteDatabase` and `databaseExists`) using a
similar allowlist to the (non-password) parameters in other DB managers,
with an additional character: `.` (this addition is necessary since
file-based SQLite databases end with `.sqlite`).

### DatabaseTenancyBootstrapper - harden() and the lost test file

While checking for more places that could use validation, I realized
that it's possible to update tenant's db_name to the central DB or the
DB of another tenant. Added the `DatabaseTenancyBootstrapper::$harden`
property -- setting it to true prevents tenants from connecting to the
wrong databases (`RuntimeException` is thrown after connecting to the
wrong database).

Also, the DatabaseTenancyBootstrapper test file was ignored while
running tests because it lacked the `Test` suffix. Added the suffix and
fixed the broken `DATABASE_URL` test in the file.

### SQLiteDatabaseManager - respect static $path property in
makeConnectionConfig()

SQLiteDatabaseManager had a bug in `makeConnectionConfig`: the method
didn't respect the static `$path` property, it used `database_path()`
instead. Added a regression test for that. Also recognizing in-memory
SQLite databases (using `isInMemory()`) is more strict now so that
simply having a db_name with `_tenancy_inmemory_` somewhere in the name
doesn't make a file-based database considered in-memory.

### MySQLDatabaseManager - charset and collation defaulting

Creating databases with `null` charsets and collations resulted in a
`QueryException`, since null isn't a valid charset/collation. To solve
that, in the `CREATE DATABASE` statement in MySQLDatabaseManager, only
add charset/collation to the statement if they are not null.

MySQL defaults to the server's charset and collation, so it's safe to
not pass any charset/collation in the `CREATE DATABASE` statement and
let MySQL choose. Also, if e.g. collation is non-null and charset is
null, MySQL will use a charset compatible with the used collation, and
this works both ways.

---------

Co-authored-by: Samuel Stancl <samuel@archte.ch>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-06-27 19:51:30 -07:00
..
BootstrapperTest.php [4.x] Laravel 12 support (#1321) 2025-02-25 16:26:18 +01:00
BroadcastChannelPrefixBootstrapperTest.php [4.x] Laravel 12 support (#1321) 2025-02-25 16:26:18 +01:00
BroadcastingConfigBootstrapperTest.php Resolve test to-dos (#45) 2024-04-18 00:22:03 +02:00
CacheTagsBootstrapperTest.php [4.x] Support database cache store tenancy (#1290) (resolve #852) 2025-08-08 00:54:01 +02:00
CacheTenancyBootstrapperTest.php Resolve test to-dos (#45) 2024-04-18 00:22:03 +02:00
DatabaseSessionBootstrapperTest.php [4.x] Laravel 12 support (#1321) 2025-02-25 16:26:18 +01:00
DatabaseTenancyBootstrapperTest.php Parameter validation and other DB manager improvements (#1459) 2026-06-27 19:51:30 -07:00
FilesystemTenancyBootstrapperTest.php Change tenant storage listeners into jobs (#1446) 2026-04-22 16:45:54 +02:00
FortifyRouteBootstrapperTest.php [4.x] Resolve testing todos (#1361) 2025-08-03 23:21:03 +02:00
MailConfigBootstrapper.php rename mail bootstrapper test file 2024-09-27 21:03:39 +02:00
RootUrlBootstrapperTest.php [4.x] Improve RootUrl and UrlGenerator bootstrappers (#1294) 2025-01-16 10:30:06 +01:00
UrlGeneratorBootstrapperTest.php TenancyUrlGenerator: override toRoute(), refactor (#1439) 2026-06-06 14:52:37 -07:00