assertArrayHasKey(PrepareUserEvent::class, $events); $methodName = $events[PrepareUserEvent::class][0]; $this->assertTrue(method_exists(UserPreferenceSubscriber::class, $methodName)); } public function testWithHourlyRateAllowed() { $sut = $this->getSubscriber(true); $user = new User(); $event = new PrepareUserEvent($user); self::assertSame($user, $event->getUser()); $prefs = $sut->getDefaultPreferences($user); self::assertCount(11, $prefs); foreach ($prefs as $pref) { switch ($pref->getName()) { case UserPreference::HOURLY_RATE: case UserPreference::INTERNAL_RATE: self::assertTrue($pref->isEnabled()); break; default: self::assertTrue($pref->isEnabled()); } } } public function testWithHourlyRateNotAllowed() { $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(11, $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) { $authMock = $this->createMock(AuthorizationCheckerInterface::class); $authMock->expects($this->once())->method('isGranted')->willReturn($seeHourlyRate); $eventMock = $this->createMock(EventDispatcherInterface::class); $tokenMock = $this->createMock(TokenStorageInterface::class); $formConfigMock = $this->createMock(FormConfiguration::class); return new UserPreferenceSubscriber($eventMock, $tokenMock, $authMock, $formConfigMock); } }