assertArrayHasKey(LoginSuccessEvent::class, $events); $methodName = $events[LoginSuccessEvent::class]; $this->assertTrue(method_exists(LastLoginSubscriber::class, $methodName)); } public function testOnLoginSuccessWithoutProfileSetsDesktop(): void { $manager = new ProfileManager(); $sut = new ProfileSubscriber($manager); $request = new Request(); $session = new Session(new MockFileSessionStorage()); $request->setSession($session); self::assertNull($session->get(ProfileManager::SESSION_PROFILE)); $user = new User(); $authenticator = $this->createMock(AuthenticatorInterface::class); $passport = $this->createMock(Passport::class); $passport->method('getUser')->willReturn($user); $event = new LoginSuccessEvent($authenticator, $passport, new UsernamePasswordToken($user, 'sdf'), $request, null, 'xyz'); $sut->onFormLogin($event); self::assertNull($session->get(ProfileManager::SESSION_PROFILE)); self::assertEquals(ProfileManager::PROFILE_DESKTOP, $manager->getProfileFromSession($session)); } public function testOnLoginSuccessWithProfile(): void { $manager = new ProfileManager(); $sut = new ProfileSubscriber($manager); $request = new Request(); $session = new Session(new MockFileSessionStorage()); $request->setSession($session); $request->cookies->set(ProfileManager::COOKIE_PROFILE, 'mobile'); self::assertNull($session->get(ProfileManager::SESSION_PROFILE)); $user = new User(); self::assertNull($user->getLastLogin()); $authenticator = $this->createMock(AuthenticatorInterface::class); $passport = $this->createMock(Passport::class); $passport->method('getUser')->willReturn($user); $event = new LoginSuccessEvent($authenticator, $passport, new UsernamePasswordToken($user, 'sdf'), $request, null, 'xyz'); $sut->onFormLogin($event); self::assertNotNull($session->get(ProfileManager::SESSION_PROFILE)); self::assertEquals(ProfileManager::PROFILE_MOBILE, $session->get(ProfileManager::SESSION_PROFILE)); self::assertEquals(ProfileManager::PROFILE_MOBILE, $manager->getProfileFromSession($session)); } public function getInvalidCookies() { return [ ['MOBILE'], ['mobilE'], ['mobile2'], ['mobile2'], ['foo'], ['mobile '], [' desktop'], ['DESKTOP'], // the next two ones are misleading: default value "desktop" will not be set and session value will be removed ['desktop'], [ProfileManager::PROFILE_DESKTOP], ]; } /** * @dataProvider getInvalidCookies */ public function testOnLoginSuccessWithInvalidProfile(string $cookieValue): void { $manager = new ProfileManager(); $sut = new ProfileSubscriber($manager); $request = new Request(); $session = new Session(new MockFileSessionStorage()); $request->setSession($session); $request->cookies->set(ProfileManager::COOKIE_PROFILE, $cookieValue); self::assertNull($session->get(ProfileManager::SESSION_PROFILE)); $user = new User(); self::assertNull($user->getLastLogin()); $authenticator = $this->createMock(AuthenticatorInterface::class); $passport = $this->createMock(Passport::class); $passport->method('getUser')->willReturn($user); $event = new LoginSuccessEvent($authenticator, $passport, new UsernamePasswordToken($user, 'sdf'), $request, null, 'xyz'); $sut->onFormLogin($event); self::assertNull($session->get(ProfileManager::SESSION_PROFILE)); self::assertEquals(ProfileManager::PROFILE_DESKTOP, $manager->getProfileFromSession($session)); } }