get(EntityManagerInterface::class); self::assertInstanceOf(EntityManagerInterface::class, $entityManager); $this->entityManager = $entityManager; $users = $container->get(UserRepository::class); self::assertInstanceOf(UserRepository::class, $users); $this->users = $users; $this->organization = new Organization('Test', 'test'); $this->entityManager->persist($this->organization); $this->entityManager->flush(); } protected function tearDown(): void { // Aucune trace laissée en base : les tests suivants partent du même état. $this->entityManager->createQuery('DELETE FROM '.User::class)->execute(); $this->entityManager->createQuery('DELETE FROM '.Organization::class)->execute(); $this->entityManager->clear(); parent::tearDown(); } public function testRefreshingADeactivatedAccountEndsTheSession(): void { $user = $this->createUser('revoke-me@tranquilys.test'); // Session ouverte : le rechargement fonctionne. self::assertSame($user->getUserIdentifier(), $this->users->refreshUser($user)->getUserIdentifier()); $user->setIsActive(false); $this->entityManager->flush(); $this->entityManager->clear(); $this->expectException(UserNotFoundException::class); $this->users->refreshUser($user); } public function testLoadingADeactivatedAccountFails(): void { $user = $this->createUser('no-login@tranquilys.test'); $user->setIsActive(false); $this->entityManager->flush(); $this->entityManager->clear(); $this->expectException(UserNotFoundException::class); $this->users->loadUserByIdentifier('no-login@tranquilys.test'); } public function testActiveAccountStillLoads(): void { $this->createUser('still-here@tranquilys.test'); $this->entityManager->clear(); $loaded = $this->users->loadUserByIdentifier('still-here@tranquilys.test'); self::assertInstanceOf(User::class, $loaded); self::assertTrue($loaded->isActive()); } public function testForeignUserClassIsRejected(): void { $this->expectException(UnsupportedUserException::class); $this->users->refreshUser(new InMemoryUser('someone', null)); } private function createUser(string $email): User { $user = new User($this->organization, $email, 'Compte de test'); $user->setPassword('$2y$04$abcdefghijklmnopqrstuv'); $this->entityManager->persist($user); $this->entityManager->flush(); return $user; } }