public async Task <ActionResult> PostTransfer([FromBody] ContaTransferenciaDtoCreate transferencia)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState)); // 400 bad request
                }

                return(Ok(await _service.PostTransfer(transferencia)));
            }
            catch (ArgumentException ex)
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
            }
        }
        public async Task PostTransferCreated()
        {
            var serviceMock = new Mock <IContaService>();

            serviceMock.Setup(m => m.PostTransfer(It.IsAny <ContaTransferenciaDtoCreate>())).ReturnsAsync(true);

            _controller = new ContasController(serviceMock.Object);


            var transferDtoCreate = new ContaTransferenciaDtoCreate
            {
                ContaIdOrigem      = Guid.NewGuid(),
                ContaIdDestino     = Guid.NewGuid(),
                ValorTransferencia = 100
            };

            var result = await _controller.PostTransfer(transferDtoCreate);

            Assert.True(result is OkObjectResult);
        }
        public async Task PostTransferBadRequest()
        {
            var serviceMock = new Mock <IContaService>();

            serviceMock.Setup(m => m.PostTransfer(It.IsAny <ContaTransferenciaDtoCreate>())).ReturnsAsync(true);

            _controller = new ContasController(serviceMock.Object);
            _controller.ModelState.AddModelError("Id", "Formato Inválido");


            var transferDtoCreate = new ContaTransferenciaDtoCreate
            {
                ContaIdOrigem      = Guid.NewGuid(),
                ContaIdDestino     = Guid.NewGuid(),
                ValorTransferencia = 100
            };

            var result = await _controller.PostTransfer(transferDtoCreate);

            Assert.True(result is BadRequestObjectResult);
        }
Exemple #4
0
        public async Task <bool> PostTransfer(ContaTransferenciaDtoCreate transferencia)
        {
            var contaOrigem = await _repository.SelectAsync(transferencia.ContaIdOrigem);

            if (contaOrigem == null)
            {
                throw new Exception("Conta do remetente não encontrada!");
            }

            var contaDestino = await _repository.SelectAsync(transferencia.ContaIdDestino);

            if (contaDestino == null)
            {
                throw new Exception("Conta de destino não encontrada!");
            }

            contaOrigem.Balance  -= transferencia.ValorTransferencia;
            contaDestino.Balance += transferencia.ValorTransferencia;

            LancamentoEntity lancamentoDebito  = new LancamentoEntity();
            LancamentoEntity lancamentoCredito = new LancamentoEntity();

            lancamentoDebito.Id          = Guid.NewGuid();
            lancamentoDebito.ContaId     = contaOrigem.Id;
            lancamentoDebito.Value       = transferencia.ValorTransferencia;
            lancamentoDebito.Description = $"Transfência entre contas - CC Destino: {contaDestino.Id} R$: {transferencia.ValorTransferencia}";

            lancamentoCredito.Id          = Guid.NewGuid();
            lancamentoCredito.ContaId     = contaDestino.Id;
            lancamentoCredito.Value       = transferencia.ValorTransferencia;
            lancamentoCredito.Description = $"Transfência entre contas - CC Origem: {contaOrigem.Id} R$: {transferencia.ValorTransferencia}";

            var result = await _repository.InsertTransfer(contaOrigem, contaDestino, lancamentoDebito, lancamentoCredito);

            return(result);
        }