/**
  * Ensure role name is unique
  * 
  * @param  FoundationDomainModels\Name $name
  * @return void
  */
 protected function ensureNameIsUnique(FoundationDomainModels\Name $name)
 {
     $specification = new AccountDomainSpecifications\RolenameIsUnique($this->roleRepository);
     if (!$specification->isSatisfiedBy($name)) {
         throw new ValueIsNotUniqueException("Role [{$name}] is exist, choose another name");
     }
 }
Example #2
0
 public function testRolenameIsUniqueSpecification()
 {
     $role = $this->prepareRole();
     $this->specify("Set rolename for new role with existing rolename", function () use($role) {
         $roleRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\Role', ['findByName' => Stub::atLeastOnce(function () use($role) {
             return $role;
         })], $this);
         $specification = new AccountDomainSpecifications\RolenameIsUnique($roleRepository);
         expect("Specification is not satisfied", $specification->isSatisfiedBy($role->name()))->false();
     });
     $this->specify("Set rolename for existing role with another existing role's name", function () use($role) {
         $roleRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\Role', ['findByName' => Stub::atLeastOnce(function () use($role) {
             return $role;
         })], $this);
         $specification = new AccountDomainSpecifications\RolenameIsUnique($roleRepository, new AccountDomainModels\RoleId('56678'));
         expect("Specification is not satisfied", $specification->isSatisfiedBy($role->name()))->false();
     });
     $this->specify("Set rolename for existing role with same rolename", function () use($role) {
         $roleRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\Role', ['findByName' => Stub::atLeastOnce(function () use($role) {
             return $role;
         })], $this);
         $specification = new AccountDomainSpecifications\RolenameIsUnique($roleRepository, new AccountDomainModels\RoleId('789010'));
         expect("Specification is satisfied", $specification->isSatisfiedBy($role->name()))->true();
     });
     $this->specify("Set rolename for existing role with same rolename", function () use($role) {
         $roleRepository = Stub::makeEmpty('Inoplate\\Account\\Domain\\Repositories\\Role', ['findByName' => Stub::atLeastOnce(function () use($role) {
             return null;
         })], $this);
         $specification = new AccountDomainSpecifications\RolenameIsUnique($roleRepository);
         expect("Specification is satisfied", $specification->isSatisfiedBy($role->name()))->true();
     });
 }