assertArrayHasKey(PrepareUserEvent::class, $events); $methodName = $events[PrepareUserEvent::class][0]; $this->assertTrue(method_exists(UserPreferenceSubscriber::class, $methodName)); } public function testWithHourlyRateAllowed(): void { $sut = $this->getSubscriber(true); $user = new User(); $event = new PrepareUserEvent($user); self::assertSame($user, $event->getUser()); $prefs = $sut->getDefaultPreferences($user); foreach ($prefs as $pref) { $this->assertTrue(\in_array($pref->getName(), self::EXPECTED_PREFERENCES), 'Unknown user preference: ' . $pref->getName()); } self::assertCount(\count(self::EXPECTED_PREFERENCES), $prefs); foreach ($prefs as $pref) { switch ($pref->getName()) { case UserPreference::HOURLY_RATE: case UserPreference::INTERNAL_RATE: self::assertTrue($pref->isEnabled()); break; case UserPreference::FIRST_WEEKDAY: self::assertEquals('monday', $pref->getValue()); break; default: self::assertTrue($pref->isEnabled()); } } } public function testWithHourlyRateNotAllowed(): void { $sut = $this->getSubscriber(false); $user = new User(); $event = new PrepareUserEvent($user); self::assertSame($user, $event->getUser()); // TODO test merging values $sut->loadUserPreferences($event); $prefs = $event->getUser()->getPreferences(); self::assertCount(\count(self::EXPECTED_PREFERENCES), $prefs); foreach ($prefs as $pref) { switch ($pref->getName()) { case UserPreference::HOURLY_RATE: case UserPreference::INTERNAL_RATE: self::assertFalse($pref->isEnabled()); break; default: self::assertTrue($pref->isEnabled()); } } } protected function getSubscriber(bool $seeHourlyRate): UserPreferenceSubscriber { $authMock = $this->createMock(AuthorizationCheckerInterface::class); $authMock->method('isGranted')->willReturn($seeHourlyRate); $eventMock = $this->createMock(EventDispatcherInterface::class); $formConfigMock = SystemConfigurationFactory::createStub([ 'defaults' => [ 'user' => [ 'language' => 'en', 'currency' => 'EUR', ] ] ]); return new UserPreferenceSubscriber($eventMock, $authMock, $formConfigMock); } }