/**
  * {@inheritdoc}
  */
 public function save(User $user)
 {
     $stmt = $this->pdo->prepare('INSERT INTO users(`name`, `email`, `password`) VALUES (:name, :email, :password)');
     $result = $stmt->execute(['name' => $user->getName(), 'email' => $user->getEmail(), 'password' => $user->getPassword()]);
     if (!$result) {
         throw new RuntimeException('Unable to save User Entity! ' . $stmt->errorInfo()[2]);
     }
     $this->idSetter->setEntityId($user, (int) $this->pdo->lastInsertId());
     return $user;
 }
 public function testSave()
 {
     $user = new User(new Email('saved@email.com'));
     $user->setPassword('savedPassword')->setName('Saved John');
     try {
         $toDelete = $this->userRepository->findByEmail($user->getEmail());
         $this->userRepository->delete($toDelete);
     } catch (OutOfBoundsException $e) {
     }
     $savedUser = $this->userRepository->save($user);
     $this->assertNotNull($savedUser->getId());
     $toDelete = $this->userRepository->findByEmail($user->getEmail());
     $this->userRepository->delete($toDelete);
 }
 public function testGetEmail()
 {
     $mockEmail = $this->getMockEmail();
     $user = new User($mockEmail);
     $this->assertSame($mockEmail, $user->getEmail());
 }