public async Task ShouldReturnErrorWhenAdministratorIdDoesNotMatch()
        {
            Guid   channelId              = Guid.NewGuid();
            Guid   adminstratorId         = Guid.NewGuid();
            Guid   commandAdministratorId = Guid.NewGuid();
            string channelName            = "channelOne";
            var    fakeUserRepository     = new Mock <IUserRepository>();
            var    fakeChannelRepository  = new Mock <IChannelRepository>();

            fakeChannelRepository
            .Setup(repository => repository.GetById(It.IsAny <Guid>()))
            .ReturnsAsync((Guid id) => new GetChannelByIdQueryResult
            {
                Id              = channelId,
                Name            = channelName,
                AdministratorId = adminstratorId
            });
            var command = new UpdateChannelNameCommand
            {
                Id              = channelId,
                Name            = channelName,
                AdministratorId = commandAdministratorId
            };
            var handler = new ChannelHandler(fakeChannelRepository.Object, fakeUserRepository.Object);

            ICommandResult result = await handler.HandleAsync(command);

            result.Success.Should().BeFalse();
            result.Errors.Should().HaveCountGreaterThan(0);
            handler.Invalid.Should().BeTrue();
        }
Пример #2
0
        public async Task <ICommandResult> HandleAsync(UpdateChannelNameCommand command)
        {
            command.Validate();
            if (command.Invalid)
            {
                AddNotifications(command);
                return(new CommandResult(false, "Could not update channel name", Errors));
            }

            GetChannelByIdQueryResult channel = await _channelRepository.GetById(command.Id);

            if (channel is null)
            {
                AddNotification(nameof(command.Id), "Channel not found");
                return(new CommandResult(false, "Could not update channel name", Errors));
            }
            if (command.AdministratorId != channel.AdministratorId)
            {
                AddNotification(nameof(command.AdministratorId), "AdministratorId does't match channel administrator id");
                return(new CommandResult(false, "User does't have permission to update channel name", Errors));
            }
            if (channel.Name != command.Name)
            {
                await _channelRepository.UpdateChannelName(command.Id, command.Name);
            }
            return(new CommandResult(true, "Name successfully updated", new ChannelOutput
            {
                Id = command.Id,
                Name = command.Name
            }));
        }
        public void ShouldReturnErrorWhenNameLenghtIsGreaterThan32()
        {
            var command = new UpdateChannelNameCommand
            {
                Id              = Guid.NewGuid(),
                Name            = "PS15TihJoUQEydtvAZFa5SeaHcDNdosgagsPHrLI",
                AdministratorId = Guid.NewGuid()
            };

            command.Validate();

            command.Invalid.Should().BeTrue();
        }
        public void ShouldReturnErrorWhenNameIsNull()
        {
            var command = new UpdateChannelNameCommand
            {
                Id              = Guid.NewGuid(),
                Name            = null,
                AdministratorId = Guid.NewGuid()
            };

            command.Validate();

            command.Invalid.Should().BeTrue();
        }
        public void ShouldReturnSuccessWhenCommandIsValid()
        {
            var command = new UpdateChannelNameCommand
            {
                Id              = Guid.NewGuid(),
                Name            = "channelTwo",
                AdministratorId = Guid.NewGuid()
            };

            command.Validate();

            command.Valid.Should().BeTrue();
        }
        public async Task ShouldReturnErrorWhenNameLenghtIsGreaterThan32()
        {
            var fakeUserRepository    = new Mock <IUserRepository>();
            var fakeChannelRepository = new Mock <IChannelRepository>();
            var command = new UpdateChannelNameCommand
            {
                Id              = Guid.NewGuid(),
                Name            = "PS15TihJoUQEydtvAZFa5SeaHcDNdosgagsPHrLI",
                AdministratorId = Guid.NewGuid()
            };
            var handler = new ChannelHandler(fakeChannelRepository.Object, fakeUserRepository.Object);

            ICommandResult result = await handler.HandleAsync(command);

            result.Success.Should().BeFalse();
            result.Errors.Should().HaveCountGreaterThan(0);
            handler.Invalid.Should().BeTrue();
        }
        public async Task ShouldReturnErrorWhenNameIsNull()
        {
            var fakeUserRepository    = new Mock <IUserRepository>();
            var fakeChannelRepository = new Mock <IChannelRepository>();
            var command = new UpdateChannelNameCommand
            {
                Id              = Guid.NewGuid(),
                Name            = null,
                AdministratorId = Guid.NewGuid()
            };
            var handler = new ChannelHandler(fakeChannelRepository.Object, fakeUserRepository.Object);

            ICommandResult result = await handler.HandleAsync(command);

            result.Success.Should().BeFalse();
            result.Errors.Should().HaveCountGreaterThan(0);
            handler.Invalid.Should().BeTrue();
        }
        public async Task <ActionResult> UpdateChannelName(UpdateChannelNameViewModel data,
                                                           [FromRoute] Guid id,
                                                           [FromHeader] Guid authorization,
                                                           [FromServices] IHandler <UpdateChannelNameCommand> handler)
        {
            var command = new UpdateChannelNameCommand
            {
                Id              = id,
                Name            = data.Name,
                AdministratorId = authorization
            };
            ICommandResult result = await handler.HandleAsync(command);

            if (!result.Success)
            {
                return(BadRequest(new ErrorViewModel(result)));
            }
            return(NoContent());
        }
        public async Task ShouldReturnErrorWhenChannelNotFound()
        {
            var fakeUserRepository    = new Mock <IUserRepository>();
            var fakeChannelRepository = new Mock <IChannelRepository>();

            fakeChannelRepository
            .Setup(repository => repository.GetById(It.IsAny <Guid>()))
            .Returns(Task.FromResult <GetChannelByIdQueryResult>(null));
            var command = new UpdateChannelNameCommand
            {
                Id              = Guid.NewGuid(),
                Name            = "default",
                AdministratorId = Guid.NewGuid()
            };
            var handler = new ChannelHandler(fakeChannelRepository.Object, fakeUserRepository.Object);

            ICommandResult result = await handler.HandleAsync(command);

            result.Success.Should().BeFalse();
            result.Errors.Should().HaveCountGreaterThan(0);
            handler.Invalid.Should().BeTrue();
        }
        public async Task ShouldReturnSuccessWhenNamesAreNotEqual()
        {
            Guid   channelId             = Guid.NewGuid();
            Guid   adminstratorId        = Guid.NewGuid();
            string channelName           = "newer name";
            var    fakeUserRepository    = new Mock <IUserRepository>();
            var    fakeChannelRepository = new Mock <IChannelRepository>();

            fakeChannelRepository
            .Setup(repository => repository.GetById(It.IsAny <Guid>()))
            .ReturnsAsync((Guid id) => new GetChannelByIdQueryResult
            {
                Id              = channelId,
                Name            = "older name",
                AdministratorId = adminstratorId
            });
            var command = new UpdateChannelNameCommand
            {
                Id              = channelId,
                Name            = channelName,
                AdministratorId = adminstratorId
            };
            var handler = new ChannelHandler(fakeChannelRepository.Object, fakeUserRepository.Object);

            ICommandResult result = await handler.HandleAsync(command);

            var resultOutput = result.Data as ChannelOutput;

            result.Success.Should().BeTrue();
            result.Data.Should().NotBeNull();
            result.Errors.Should().BeNullOrEmpty();
            resultOutput.Should().NotBeNull();
            resultOutput?.Name.Should().Be(command.Name);
            handler.Valid.Should().BeTrue();
            fakeChannelRepository.Verify(
                repository => repository.UpdateChannelName(It.Is <Guid>(id => id == command.Id),
                                                           It.Is <string>(name => name == command.Name)),
                Times.Once());
        }