/** * 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"); } }
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(); }); }