set(SessionStoreInterface::class, static fn (): SessionStore => new SessionStore()); return $container; } public function testPopulateWithInvalidUserClearsSessionKey(): void { $_SESSION['module.addressbook.departments_by_tenant'] = [['tenant' => 'old']]; $provider = new AddressBookSessionProvider(); $provider->populate(['id' => 0], $this->containerWithSessionStore()); self::assertArrayNotHasKey('module.addressbook.departments_by_tenant', $_SESSION); } public function testPopulateWithMissingUserIdClearsSessionKey(): void { $_SESSION['module.addressbook.departments_by_tenant'] = [['tenant' => 'old']]; $provider = new AddressBookSessionProvider(); $provider->populate([], $this->containerWithSessionStore()); self::assertArrayNotHasKey('module.addressbook.departments_by_tenant', $_SESSION); } public function testPopulateReturnsEarlyWhenContainerMissesDependencies(): void { $container = $this->containerWithSessionStore(); $provider = new AddressBookSessionProvider(); // Container has SessionStore but no UserTenantContextService → provider returns early $provider->populate(['id' => 42], $container); self::assertArrayNotHasKey('module.addressbook.departments_by_tenant', $_SESSION); } public function testClearRemovesSessionKey(): void { $_SESSION['module.addressbook.departments_by_tenant'] = [ ['tenant' => ['uuid' => 'abc'], 'departments' => []], ]; $provider = new AddressBookSessionProvider(); $provider->clear($this->containerWithSessionStore()); self::assertArrayNotHasKey('module.addressbook.departments_by_tenant', $_SESSION); } public function testClearIsIdempotent(): void { // Key doesn't exist — clear() should not throw $provider = new AddressBookSessionProvider(); $provider->clear($this->containerWithSessionStore()); self::assertArrayNotHasKey('module.addressbook.departments_by_tenant', $_SESSION); } }