tenancy icon indicating copy to clipboard operation
tenancy copied to clipboard

Manual tenancy with CreateTenantConnection throws a TypeError

Open lukinovec opened this issue 3 years ago • 0 comments

Bug description

Manually initializing Tenancy in manual mode throws an exception. The error only seems to occur on the first $tenant->run() call. image

Stack trace: (I moved the logic to a testing() method in the CreateTenantConnection listener so I could catch the exception in handle())

[2022-07-18 05:49:26] local.ERROR: Stancl\Tenancy\Listeners\CreateTenantConnection::testing(): Argument #1 ($event) must be of type Stancl\Tenancy\Events\Contracts\TenantEvent, Stancl\Tenancy\Events\TenancyInitialized given, called in /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php on line 23 {"exception":"[object] (TypeError(code: 0): Stancl\\Tenancy\\Listeners\\CreateTenantConnection::testing(): Argument #1 ($event) must be of type Stancl\\Tenancy\\Events\\Contracts\\TenantEvent, Stancl\\Tenancy\\Events\\TenancyInitialized given, called in /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php on line 23 at /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php:29)
[stacktrace]
#0 /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Listeners/CreateTenantConnection.php(23): Stancl\\Tenancy\\Listeners\\CreateTenantConnection->testing(Object(Stancl\\Tenancy\\Events\\TenancyInitialized))
#1 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(441): Stancl\\Tenancy\\Listeners\\CreateTenantConnection->handle(Object(Stancl\\Tenancy\\Events\\TenancyInitialized))
#2 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(249): Illuminate\\Events\\Dispatcher->Illuminate\\Events\\{closure}('Stancl\\\\Tenancy\\\\...', Array)
#3 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(450): Illuminate\\Events\\Dispatcher->dispatch('Stancl\\\\Tenancy\\\\...')
#4 /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Tenancy.php(58): event(Object(Stancl\\Tenancy\\Events\\TenancyInitialized))
#5 /Users/lukas/Projects/tenancy-test/vendor/stancl/tenancy/src/Database/Concerns/TenantRun.php(23): Stancl\\Tenancy\\Tenancy->initialize(Object(App\\Models\\Tenant))
#6 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/ExecutionLoopClosure.php(55) : eval()'d code(1): Stancl\\Tenancy\\Database\\Models\\Tenant->run(Object(Closure))
#7 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/ExecutionLoopClosure.php(55): eval()
#8 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/ExecutionClosure.php(89): Psy\\{closure}()
#9 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/Shell.php(383): Psy\\ExecutionClosure->execute()
#10 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/Shell.php(354): Psy\\Shell->doInteractiveRun()
#11 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(171): Psy\\Shell->doRun(Object(Symfony\\Component\\Console\\Input\\ArrayInput), Object(Psy\\Output\\ShellOutput))
#12 /Users/lukas/Projects/tenancy-test/vendor/psy/psysh/src/Shell.php(329): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArrayInput), Object(Psy\\Output\\ShellOutput))
#13 /Users/lukas/Projects/tenancy-test/vendor/laravel/tinker/src/Console/TinkerCommand.php(81): Psy\\Shell->run()
#14 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Laravel\\Tinker\\Console\\TinkerCommand->handle()
#15 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()
#16 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure(Object(Closure))
#17 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod(Object(Illuminate\\Foundation\\Application), Array, Object(Closure))
#18 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\\Container\\BoundMethod::call(Object(Illuminate\\Foundation\\Application), Array, Array, NULL)
#19 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call(Array)
#20 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Command/Command.php(308): Illuminate\\Console\\Command->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#21 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Illuminate\\Console\\OutputStyle))
#22 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(998): Illuminate\\Console\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#23 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand(Object(Laravel\\Tinker\\Console\\TinkerCommand), Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#24 /Users/lukas/Projects/tenancy-test/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#25 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#26 /Users/lukas/Projects/tenancy-test/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#27 /Users/lukas/Projects/tenancy-test/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#28 {main}
"} 

Steps to reproduce

  1. In TenancyServiceProvider, add CreateTenantConnection listener to the TenancyInitialized event, remove BootstrapTenancy:
Events\TenancyInitialized::class => [
    - Listeners\BootstrapTenancy::class,
    + Listeners\CreateTenantConnection::class,
],
  1. Create a tenant using tinker, and call $tenant->run(fn() => 'test')

Expected behavior

The first $tenant->run(fn() => 'test') call should have returned 'test' instead of throwing the exception.

Laravel version

9.20.0

stancl/tenancy version

3.5.7

lukinovec avatar Jul 18 '22 12:07 lukinovec