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));
     }
 }
Exemplo n.º 4
0
        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;
                }
            }
        }