createMock(TenantDatabaseSwitcher::class); $databaseSwitcher->expects(self::once()) ->method('useTenantDatabase') ->with($tenantConfig->databaseUrl); $subscriber = new TenantDatabaseRequestSubscriber($databaseSwitcher); $request = Request::create('https://ecole-alpha.classeo.local/api/users'); $request->attributes->set('_tenant', $tenantConfig); $subscriber->onKernelRequest($this->createRequestEvent($request)); } #[Test] public function itFallsBackToTheDefaultDatabaseWhenNoTenantWasResolved(): void { $databaseSwitcher = $this->createMock(TenantDatabaseSwitcher::class); $databaseSwitcher->expects(self::once()) ->method('useDefaultDatabase'); $subscriber = new TenantDatabaseRequestSubscriber($databaseSwitcher); $request = Request::create('https://classeo.local/api/docs'); $subscriber->onKernelRequest($this->createRequestEvent($request)); } #[Test] public function itResetsTheConnectionAfterTheRequest(): void { $databaseSwitcher = $this->createMock(TenantDatabaseSwitcher::class); $databaseSwitcher->expects(self::once()) ->method('useDefaultDatabase'); $subscriber = new TenantDatabaseRequestSubscriber($databaseSwitcher); $subscriber->onKernelTerminate(); } #[Test] public function itRegistersItselfRightAfterTenantResolution(): void { $events = TenantDatabaseRequestSubscriber::getSubscribedEvents(); self::assertSame(['onKernelRequest', 255], $events[KernelEvents::REQUEST]); self::assertSame('onKernelTerminate', $events[KernelEvents::TERMINATE]); } private function createRequestEvent(Request $request): RequestEvent { $kernel = $this->createMock(HttpKernelInterface::class); return new RequestEvent( $kernel, $request, HttpKernelInterface::MAIN_REQUEST, ); } }