public async Task <IActionResult> ObterCotacaoMoeda(long idCliente, Moeda?moeda, decimal quantidadeMoeda) { var request = new ObterCotacaoMoedaRequest { IdCliente = idCliente, Moeda = moeda.ToString(), QuantidadeMoeda = quantidadeMoeda }; return(await ProcessarRequest(() => _app.ObterCotacaoMoeda(request))); }
public async Task <ObterCotacaoMoedaResponse> ObterCotacaoMoeda(ObterCotacaoMoedaRequest request) { if (new ObterCotacaoMoedaValidation(_clienteRepository, _notificacoes).Validar(request)) { var cliente = _clienteRepository.ObterClientePorId(request.IdCliente); var taxa = _taxaRepository.ObterTaxaCambioPorSegmento(cliente.Segmento); var valorMoeda = await _exchangeRatesApiProxy.ObterUltimaCotacaoMoeda(request.Moeda); var operacao = new OperacaoCambio(cliente, taxa); operacao.DefinirMoedaOperacao(request.Moeda, valorMoeda); operacao.CalcularValorOperacao(request.QuantidadeMoeda); return(operacao.ToResponse(request.QuantidadeMoeda)); } return(null); }
public void ObterCotacaoMoeda_IdClienteInvalido_DeveRetornarMensagemDeValidacaoDoCodigoDeCliente() { //arrange var mocker = new AutoMocker(); var validador = mocker.CreateInstance <ObterCotacaoMoedaValidation>(); mocker.GetMock <IClienteRepository>().Setup(r => r.ObterClientePorId(0)).Returns(default(Cliente)); var request = new ObterCotacaoMoedaRequest() { IdCliente = 0, Moeda = Moeda.USD.ToString(), QuantidadeMoeda = 100 }; //act var valido = validador.Validar(request); //assert Assert.False(valido); Assert.Contains(mocker.GetMock <NotificacaoErro>().Object.Mensagens, m => m.Equals("IdCliente deve ser maior que 0")); }
public void ObterCotacaoMoeda_QuantidadeMoedaIgualAZero_DeveRetornarMensagemDeValidacaoMoeda() { //arrange var mocker = new AutoMocker(); var validador = mocker.CreateInstance <ObterCotacaoMoedaValidation>(); mocker.GetMock <IClienteRepository>().Setup(r => r.ObterClientePorId(1)).Returns(new Cliente(1, "Teste", "12345678901", Domain.Enums.Segmento.Varejo)); var request = new ObterCotacaoMoedaRequest() { IdCliente = 1, Moeda = Moeda.USD.ToString(), QuantidadeMoeda = 0 }; //act var valido = validador.Validar(request); //assert Assert.False(valido); Assert.Contains(mocker.GetMock <NotificacaoErro>().Object.Mensagens, m => m.Equals("Quantidade de moeda deve ser maior que 0")); }
public void ObterCotacaoMoeda_MoedaInvalida_DeveRetornarMensagemDeValidacaoDeMoedaInvalida() { //arrange var mocker = new AutoMocker(); var validador = mocker.CreateInstance <ObterCotacaoMoedaValidation>(); mocker.GetMock <IClienteRepository>().Setup(r => r.ObterClientePorId(10)).Returns(default(Cliente)); var request = new ObterCotacaoMoedaRequest() { IdCliente = 10, Moeda = "A", QuantidadeMoeda = 100 }; //act var valido = validador.Validar(request); //assert Assert.False(valido); Assert.Contains(mocker.GetMock <NotificacaoErro>().Object.Mensagens, m => m.Equals("Moeda informada é inválida")); }
public void ObterCotacaoMoeda_MoedaVazia_DeveRetornarMensagemDeValidacaoDeMoedaNula() { //arrange var mocker = new AutoMocker(); var validador = mocker.CreateInstance <ObterCotacaoMoedaValidation>(); mocker.GetMock <IClienteRepository>().Setup(r => r.ObterClientePorId(10)).Returns(new Cliente(1, "Teste", "12345678901", Domain.Enums.Segmento.Varejo)); var request = new ObterCotacaoMoedaRequest() { IdCliente = 10, Moeda = string.Empty, QuantidadeMoeda = 100 }; //act var valido = validador.Validar(request); //assert Assert.False(valido); Assert.Contains(mocker.GetMock <NotificacaoErro>().Object.Mensagens, m => m.Equals("Moeda não pode ser vazia")); }