예제 #1
0
 public function testEmailIsUniqueSpecification()
 {
     $user = $this->prepareUser();
     $this->specify("Set email for new user with existing email", function () use($user) {
         $userRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\User', ['findByEmail' => Stub::atLeastOnce(function () use($user) {
             return $user;
         })], $this);
         $specification = new AccountDomainSpecifications\EmailIsUnique($userRepository);
         expect("Specification is not satisfied", $specification->isSatisfiedBy($user->email()))->false();
     });
     $this->specify("Set email for existing user with another existing user's email", function () use($user) {
         $userRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\User', ['findByEmail' => Stub::atLeastOnce(function () use($user) {
             return $user;
         })], $this);
         $specification = new AccountDomainSpecifications\EmailIsUnique($userRepository, new AccountDomainModels\UserId('56678'));
         expect("Specification is not satisfied", $specification->isSatisfiedBy($user->email()))->false();
     });
     $this->specify("Set email for existing user with same email", function () use($user) {
         $userRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\User', ['findByEmail' => Stub::atLeastOnce(function () use($user) {
             return $user;
         })], $this);
         $specification = new AccountDomainSpecifications\EmailIsUnique($userRepository, new AccountDomainModels\UserId('123456'));
         expect("Specification is satisfied", $specification->isSatisfiedBy($user->email()))->true();
     });
     $this->specify("Set email for new user with new email", function () use($user) {
         $userRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\User', ['findByEmail' => Stub::atLeastOnce(function () use($user) {
             return null;
         })], $this);
         $specification = new AccountDomainSpecifications\EmailIsUnique($userRepository);
         expect("Specification is satisfied", $specification->isSatisfiedBy($user->email()))->true();
     });
 }
예제 #2
0
 /**
  * Ensure email is unique
  * 
  * @param  FoundationModels\Email $email
  * @return void
  */
 protected function ensureEmailIsUnique(FoundationDomainModels\Email $email)
 {
     $specification = new AccountDomainSpecifications\EmailIsUnique($this->userRepository);
     if (!$specification->isSatisfiedBy($email)) {
         throw new ValueIsNotUniqueException("Email [{$email->value}()] was already taken");
     }
 }