* Refactor cloning action, update tests
* Delete redundant "should not be cloned" part from shouldBeCloned()
* Use 'clone' instead of a universal route in tenant parameter removal test
* Improve comment
* Add test for cloneRoutesWithMiddleware(), correct existing tests
* Allow cloning specific routes by name
* Fix typo in CloneActionTest
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* clean up CloneRoutesAsTenant, add a todo
* phpstan
* Add test for handling 'clone' in MW groups
* Improve regression test
* Improve regression test
* Handle nested cloning flags in CloneRoutesAsTenant
* Ignore routes that are already considered tenant routes from cloning, update test accordingly
* Clarify cloning logic
* CloneRoutesAsTenant cleanup
* Rewrite clone action annotation, fix fluent usage bug
* Improve tests (comments, use $tenant->id instead of $tenant->getTenantKey())
* Test that the clone action can be used fluently without issues now (could serve as a regression test for the routesToClone change in previous commit)
* Minor annotation improvements
* Improve route cloning action docblock
* Add note about clearing the $routesToClone property
* improve docblock
* clean up tests
* fix typo
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Samuel Štancl <samuel@archte.ch>
* Add test for syncable models with global scopes
* minor fixes
* Make test clearer
* Improve test name
* Clarify scopeGetModelQuery test, document edge case
* Fix assertion
* Delete extra newline
* Update the scopeGetModelQuery test so that it tests a realistic case
* Clarify test
* cleanup
* Try simplifying the tests
* Revert change to test adding unnecessary complexity
* Make test clear, extensively commented and as simple as possible
* Delete unused import
* Make test clearer
* Polish comments
* Improve comment
* Explicitly reset global scopes on models in beforeEach()
* Simplify comments in test
* Revert changes in test
* add assertion
* add global scope reset to afterEach
---------
Co-authored-by: Samuel Štancl <samuel@archte.ch>
* Add `$forceRls` static property to tenants:rls
* Set `$forceRls` in tests where scoping is tested, add non-superuser, non-bypassrls table owner test
* Move DROP TABLE statement
* Remove try/catch
* Put DROP OWNED BY into try/catch
* Static property cleanup in afterEach
* Make with() matrix syntax more clear by using with() multiple times
* Fix typo, improve comment
* Move and update force RLS comment
* Add test for `$forceRls = false`, refactor BYPASSRLS test
* Update link in test comment
* Add a dataset for `$forceRls` in the table owner test, fix BYPASSRLS test
* Correct PR link comment
* minor fixes
* Add test that makes the bypassrls/forceRls behavior clear
* Delete redundant test
* cleanup
* Update tests/RLS/TableManagerTest.php
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Samuel Štancl <samuel@archte.ch>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Test that route model binding works with path identification (closure-based routes)
* Correct test name
* Update tests/PathIdentificationTest.php
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* make assertions more clear
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Samuel Štancl <samuel@archte.ch>
* UrlGenerator: set defaults based on config; request data: move config to config file+resolver
* Claude code adjustments
* improve request data tests, simplify complex test in UrlGeneratorBootstrapperTest
* url generator test: test changing tenant parameter name
* request data identification: add tenant_model_column configuration
* defaultParameterNames -> passQueryParameter
* move comment
* minor refactor in PathIdentificationTest, expand CLAUDE.md to include early identification section
* Fix COLOR_FLAG
* improve test name
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* TenancyUrlGenerator: add a check for queryParameterName being null
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix code style (php-cs-fixer)
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Skip ScopeSessions MW if the current context is central and the route is universal
* Add regressiont test
* Simplify code
---------
Co-authored-by: Samuel Štancl <samuel@archte.ch>
* Add regression test for removing invalid symlinks
* Move commented RemoveStorageSymlinks job to the DeletingTenant pipeline (better default - the symlinks will be removed *before* deleting tenant storage)
* Remove symlink validity check from symlinkExists() (only check for the symlink's existence)
* Delete complete todo0
* Make the symlink assertions more explicit
* update test name
---------
Co-authored-by: Samuel Štancl <samuel@archte.ch>
* Add Laravel 12 support, drop Laravel 11 support
* Fix RLS tree generation (specify schema name in generateTrees())
* ci fixes, use stable virtualcolumn version
---------
Co-authored-by: lukinovec <lukinovec@gmail.com>
* cleanup, resolve todos, add immediate todos
* Improve path_identification_middleware docblock
* rename leave() method in tests
* wip fix hardcoded values making assumptions about the parameters used in routing
* defaultParameterNames
* fix CreatesDatabaseUsers return values
* $tenant -> tenant()
* resolve more todos
* make comment block a complete block
* Correct useTenantRoutesInFortify(), delete unused import
* test fixes
* remove todos
* remove JobPipeline todo
* simplify comment example
* remove todo
* fix VERSION_PREFIX in queue.yml
---------
Co-authored-by: lukinovec <lukinovec@gmail.com>
* fix 1267: early return in runForMultiple if an empty array is passed
* Test that runForMulltiple runs the passed closure for the right tenants
* Correct comment
---------
Co-authored-by: lukinovec <lukinovec@gmail.com>