public void Simular_Return_Be_Success(int dddOrigemId, int dddDestinoId, int planoId, int tempo, decimal comFaleMais, decimal semFaleMais) { var simulacao = new SimulacaoChamada { DDDOrigemId = dddOrigemId, DDDDestinoId = dddDestinoId, PlanoId = planoId, Tempo = tempo }; var simulacaoChamadaService = new SimulacaoChamadaService(_dddServiceMock.Object, _planoServiceMock.Object, _custoChamadaServiceMock.Object); BindDDDs(); BindPlanos(); BindCustoChamadas(); simulacaoChamadaService.Simular(simulacao); Assert.Equal(comFaleMais, Convert.ToDecimal(simulacao.CustoComFaleMais)); Assert.Equal(semFaleMais, Convert.ToDecimal(simulacao.CustoSemFaleMais)); }
private void Validar(SimulacaoChamada simulacaoChamada) { Erros.Clear(); if (simulacaoChamada.DDDOrigemId <= 0) { Erros.Add("Informe o DDD de origem"); } if (simulacaoChamada.DDDDestinoId <= 0) { Erros.Add("Informe o DDD de destino"); } if (simulacaoChamada.DDDOrigemId == simulacaoChamada.DDDDestinoId) { Erros.Add("O DDD de Destino deve ser diferente do DDD de Origem"); } if (simulacaoChamada.PlanoId <= 0) { Erros.Add("Informe o Plano Fale Mais"); } if (simulacaoChamada.Tempo <= 0) { Erros.Add("Informe o tempo em minutos"); } }
public ActionResult Simular(SimulacaoChamada simulacaoChamada) { try { _simulacaoChamadaService.Simular(simulacaoChamada); return(Ok(simulacaoChamada)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public async Task Post_Returns_OK_Response_Simular() { var simulacaoChamada = new SimulacaoChamada { DDDOrigemId = 1, DDDDestinoId = 2, PlanoId = 1, Tempo = 30 }; HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(simulacaoChamada), Encoding.UTF8); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var postRequest = new HttpRequestMessage(HttpMethod.Post, "/api/simulacoes/simular"); postRequest.Content = httpContent; var response = await _client.SendAsync(postRequest); response.EnsureSuccessStatusCode(); response.StatusCode.Should().Be(HttpStatusCode.OK); }
public void Simular(SimulacaoChamada simulacaoChamada) { Validar(simulacaoChamada); if (Erros.Count > 0) { throw new Exception(string.Join(". ", Erros.ToArray())); } simulacaoChamada.DDDOrigem = _dddService.GetById(simulacaoChamada.DDDOrigemId); simulacaoChamada.DDDDestino = _dddService.GetById(simulacaoChamada.DDDDestinoId); // Buscar Plano simulacaoChamada.Plano = _planoService.GetById(simulacaoChamada.PlanoId); // Buscar Custo Chamada CustoChamada custoChamada = _custoChamadaService.Get(simulacaoChamada.DDDOrigemId, simulacaoChamada.DDDDestinoId); if (custoChamada != null) { //Custo sem fale mais simulacaoChamada.CustoSemFaleMais = simulacaoChamada.Tempo * custoChamada.CustoMinuto; // Custo com fale mais if (simulacaoChamada.Tempo > simulacaoChamada.Plano.TempoMinutos) { // obter total de minutos excedentes do plano selecionado int minutosExcedente = simulacaoChamada.Tempo - simulacaoChamada.Plano.TempoMinutos; // calcular custo com fale mais simulacaoChamada.CustoComFaleMais = minutosExcedente * custoChamada.CustoMinuto; // adicionar acrescimo simulacaoChamada.CustoComFaleMais = Convert.ToDecimal(simulacaoChamada.CustoComFaleMais) + Convert.ToDecimal(simulacaoChamada.CustoComFaleMais) * simulacaoChamada.Plano.CustoAdicionalMinuto / 100; } else { simulacaoChamada.CustoComFaleMais = 0; } } }