public async Task <Guid> AddPermission(AddPermissionCommand command, CancellationToken cancellationToken)
        {
            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            command.EnsureIsValid();

            var persistedPermission = await authorizationRepository.GetPermissionsBy(command.Domain, command.Resource, cancellationToken : cancellationToken).ConfigureAwait(false);

            if (persistedPermission?.Count > 0)
            {
                throw new BusinessException(Messages.PermissionAlreadyExist);
            }

            var permission = new Permission()
            {
                Domain   = command.Domain,
                Name     = command.Name,
                Resource = command.Resource
            };

            await authorizationRepository.AddPermission(permission, cancellationToken).ConfigureAwait(false);

            return(permission.Id);
        }
        public async Task AddPermission_Throw_Exception_If_Permission_Already_Exist()
        {
            var expectedPermission = new Permission()
            {
                Name = "AllowGet", Domain = "user", Resource = "/user"
            };

            var command = new AddPermissionCommand(expectedPermission.Name, expectedPermission.Domain, expectedPermission.Resource);

            authorizationRepositoryMock.GetPermissionsBy(command.Domain, command.Resource, null, Arg.Any <CancellationToken>())
            .Returns(new List <Permission>()
            {
                expectedPermission
            });

            Assert.ThrowsAsync <BusinessException>(async() =>
                                                   await authorizationAppService.AddPermission(command, CancellationToken.None), "Permission already exist.");

            await authorizationRepositoryMock.Received(1).GetPermissionsBy(command.Domain, command.Resource, null,
                                                                           Arg.Any <CancellationToken>());
        }