validator = Validation::createValidatorBuilder() ->enableAttributeMapping() // Use this for PHP attributes ->getValidator(); } /** * Helper to create a valid Account instance. */ private function createValidAccount(): Account { return (new Account()) ->setUsername('testuser') ->setEmail('test@example.com') ->setPassword('securepassword') ->setUuid('1b9d67fe-1b0d-40e9-a417-36e6e2978051'); } // --- Unit Tests for Getters and Setters --- public function testGetId(): void { $account = new Account(); // ID is typically set by the ORM, so we can't directly test a generated value here. // We'll rely on functional tests with the database for this. $this->assertNull($account->getId()); } public function testSetAndGetUsername(): void { $account = new Account(); $account->setUsername('newusername'); $this->assertSame('newusername', $account->getUsername()); } public function testSetAndGetEmail(): void { $account = new Account(); $account->setEmail('newemail@example.com'); $this->assertSame('newemail@example.com', $account->getEmail()); } public function testSetAndGetPassword(): void { $account = new Account(); $account->setPassword('hashedpassword'); $this->assertSame('hashedpassword', $account->getPassword()); } public function testSetAndGetUuid(): void { $account = new Account(); $uuid = 'a1b2c3d4-e5f6-7890-1234-567890abcdef'; $account->setUuid($uuid); $this->assertSame($uuid, $account->getUuid()); } public function testSetAndGetRoles(): void { $account = new Account(); $account->setRoles(['ROLE_ADMIN', 'ROLE_USER']); $this->assertContains('ROLE_ADMIN', $account->getRoles()); $this->assertContains('ROLE_USER', $account->getRoles()); $this->assertCount(2, $account->getRoles()); // Because ROLE_USER is guaranteed } // --- UserInterface and PasswordAuthenticatedUserInterface Tests --- public function testGetUserIdentifier(): void { $account = $this->createValidAccount(); $this->assertSame('testuser', $account->getUserIdentifier()); } public function testGetRolesAlwaysIncludesRoleUser(): void { $account = new Account(); $this->assertContains('ROLE_USER', $account->getRoles()); $account->setRoles(['ROLE_ADMIN']); $this->assertContains('ROLE_ADMIN', $account->getRoles()); $this->assertContains('ROLE_USER', $account->getRoles()); $this->assertCount(2, $account->getRoles()); } public function testEraseCredentials(): void { $account = $this->createValidAccount(); // eraseCredentials is deprecated and should not modify password directly in modern Symfony // It's usually for clearing sensitive data from memory after security operations. $account->eraseCredentials(); // Assert that password remains, as it's not actually cleared by this method (deprecated behavior) $this->assertNotNull($account->getPassword()); } public function testSerializeRemovesSensitiveData(): void { $account = $this->createValidAccount(); $serializedAccount = serialize($account); $this->assertStringContainsString(hash('crc32c', 'securepassword'), $serializedAccount); $this->assertStringNotContainsString('securepassword', $serializedAccount); } }