示例#1
0
        public async Task deve_retornar_sucesso_quando_editar_pretendente()
        {
            //arrange
            var comando       = new EditarPretendenteCommand(Guid.NewGuid(), "Nome do pretendente atualizado");
            var evento        = new PretendenteEditadoEvent(comando.Id, comando.Nome);
            var pretendenteDb = new Pretendente("Nome do pretendente", "*****@*****.**");

            _bus.Setup(p => p.Publish(It.IsAny <PretendenteEditadoEvent>(), _cancellationToken))
            .Callback <PretendenteEditadoEvent, CancellationToken>
                ((re, ca) => { evento = re; _cancellationToken = ca; });

            _pretendenteRepositorio.Setup(p => p.ObterAsync(comando.Id)).ReturnsAsync(pretendenteDb);
            _pretendenteRepositorio.Setup(p => p.AtualizarAsync(pretendenteDb)).Returns(Task.CompletedTask);

            //act
            var resultado = await _handler.Handle(comando, _cancellationToken);

            //assert
            Assert.True(resultado.Sucesso);
            Assert.Equal(resultado.StatusCode, HttpStatusCode.OK);
            Assert.Equal(comando.Nome, pretendenteDb.Nome);
            Assert.Equal(resultado.Mensagem, "Operação realizada com sucesso.");
            _pretendenteRepositorio.Verify(p => p.AtualizarAsync(It.IsAny <Pretendente>()), Times.Once);
            _bus.Verify(p => p.Publish(evento, _cancellationToken), Times.Once);
        }
示例#2
0
        public async Task <RequestResult> Handle(EditarPretendenteCommand request, CancellationToken cancellationToken)
        {
            var pretendenteDb = await _pretendenteRepositorio.ObterAsync(request.Id);

            if (pretendenteDb == null)
            {
                _logger.LogError($"[Editar pretendente] - pretendente {request.Id} não encontrato.");
                return(new RequestResult().NotFound());
            }

            pretendenteDb.AtualizarNome(request.Nome);

            var validate = new PretendenteValidator(_pretendenteRepositorio).Validate(pretendenteDb);

            if (!validate.IsValid)
            {
                _logger.LogError("[Editar pretendente] - " + validate.Errors.FirstOrDefault().ErrorMessage);
                return(new RequestResult().BadRequest(validate.Errors.Select(p => p.ErrorMessage).ToArray()));
            }

            await _pretendenteRepositorio.AtualizarAsync(pretendenteDb);

            await _bus.Publish(new PretendenteEditadoEvent(request.Id, request.Nome), cancellationToken);

            return(new RequestResult().Ok());
        }
 public async Task <IActionResult> Put(Guid id, [FromBody] EditarPretendenteCommand model, CancellationToken cancellationToken)
 {
     if (ModelState.IsValid)
     {
         model.Id = id;
         return(RetornarRequestResult(await _bus.Send(model, cancellationToken)));
     }
     return(BadRequest(model));
 }
示例#4
0
        public async Task deve_retornar_badrequest_quando_comando_invalido()
        {
            //arrange
            var id      = Guid.NewGuid();
            var comando = new EditarPretendenteCommand(id, "Nome do Pretendente");

            _bus.Setup(p => p.Send(comando, _cancellationToken)).ReturnsAsync(new RequestResult().NotFound());

            //act
            var resultado = await _controller.Put(id, comando, _cancellationToken);

            //assert
            Assert.IsType <NotFoundObjectResult>(resultado);
            _bus.Verify(p => p.Send(comando, _cancellationToken), Times.Once);
        }
示例#5
0
        public async Task deve_retornar_erro_quando_nao_encontrar_pretendente()
        {
            //arrange
            var         comando     = new EditarPretendenteCommand(Guid.NewGuid(), "Nome do pretendente atualizado");
            Pretendente pretendente = null;

            _pretendenteRepositorio.Setup(p => p.ObterAsync(comando.Id)).ReturnsAsync(pretendente);

            //act
            var resultado = await _handler.Handle(comando, _cancellationToken);

            //assert
            Assert.False(resultado.Sucesso);
            Assert.Equal(resultado.StatusCode, HttpStatusCode.NotFound);
            Assert.Equal(resultado.Mensagem, "Objeto não encontrado.");
            _pretendenteRepositorio.Verify(p => p.AtualizarAsync(It.IsAny <Pretendente>()), Times.Never);
            _bus.Verify(p => p.Publish(It.IsAny <PretendenteEditadoEvent>(), _cancellationToken), Times.Never);
        }