'old']]; $provider = new AddressBookSessionProvider(); $provider->populate(['id' => 0], $this->emptyContainer()); self::assertArrayNotHasKey('available_departments_by_tenant', $_SESSION); } public function testPopulateWithMissingUserIdClearsSessionKey(): void { $_SESSION['available_departments_by_tenant'] = [['tenant' => 'old']]; $provider = new AddressBookSessionProvider(); $provider->populate([], $this->emptyContainer()); self::assertArrayNotHasKey('available_departments_by_tenant', $_SESSION); } public function testPopulateReturnsEarlyWhenContainerMissesDependencies(): void { $provider = new AddressBookSessionProvider(); // Container has no bindings → get() will throw, but provider guards with instanceof check // The provider should handle this gracefully (no session key set) try { $provider->populate(['id' => 42], $this->emptyContainer()); } catch (\Throwable) { // Provider may throw if container has no binding — that's acceptable; // in production, bindings are always registered before providers run. } self::assertArrayNotHasKey('available_departments_by_tenant', $_SESSION); } public function testClearRemovesSessionKey(): void { $_SESSION['available_departments_by_tenant'] = [ ['tenant' => ['uuid' => 'abc'], 'departments' => []], ]; $provider = new AddressBookSessionProvider(); $provider->clear(); self::assertArrayNotHasKey('available_departments_by_tenant', $_SESSION); } public function testClearIsIdempotent(): void { // Key doesn't exist — clear() should not throw $provider = new AddressBookSessionProvider(); $provider->clear(); self::assertArrayNotHasKey('available_departments_by_tenant', $_SESSION); } }