예제 #1
0
        public async void Test_CompararPlanoComTarifaFixaAsync__SimulacaoInvalida__Expected_Exception()
        {
            // FIXTURES
            var simulacao = new SimulacaoCustoLigacao
            {
                DddOrigem  = "11",
                DddDestino = "2",
                Tempo      = 10,
                Plano      = "plano qualquer"
            };

            var errors = new List <ValidationFailure>
            {
                new ValidationFailure("Plano", "O plano informado não é valido"),
                new ValidationFailure("DddDestino", "O ddd de destino informado não é valido"),
            };

            var validationResult = new ValidationResult(errors);

            _simulacaoValidator
            .Setup(x => x.Validate(It.IsAny <SimulacaoCustoLigacao>()))
            .Returns(validationResult);

            // EXERCISE
            var ex = await Assert.ThrowsAsync <ValidationException>(() => _service.CompararPlanoComTarifaFixaAsync(simulacao));

            // ASSERTS
            _ligacaoBuilder.Verify(x => x.AdicionarOrigem(It.IsAny <string>()), Times.Never);
            _ligacaoBuilder.Verify(x => x.AdicionarPlano(It.IsAny <string>()), Times.Never);
            _ligacaoFaleMaisService.Verify(x => x.CalcularCustoAsync(It.IsAny <int>(), It.IsAny <string>()), Times.Never);
            _ligacaoTarifaFixaService.Verify(x => x.CalcularCustoAsync(It.IsAny <int>(), It.IsAny <string>()), Times.Never);
            _simulacaoValidator.Verify(x => x.Validate(simulacao));
        }
예제 #2
0
        public async Task <ComparativoCustoLigacao> CompararPlanoComTarifaFixaAsync(SimulacaoCustoLigacao simulacao)
        {
            var result = _simulacaoValidator.Validate(simulacao);

            if (result.IsValid == false)
            {
                throw new ValidationException(result.ToString(), result.Errors);
            }

            var ligacaoPlanoFaleMais = _ligacaoBuilder
                                       .AdicionarOrigem(simulacao.DddOrigem)
                                       .AdicionarPlano(simulacao.Plano)
                                       .Criar();

            var ligacaoPlanoTarifaFixa = _ligacaoBuilder
                                         .AdicionarOrigem(simulacao.DddOrigem)
                                         .AdicionarPlano(Plano.TARIFA_FIXA)
                                         .Criar();

            var comparativo = new ComparativoCustoLigacao();

            comparativo.DddOrigem             = simulacao.DddOrigem;
            comparativo.DddDestino            = simulacao.DddDestino;
            comparativo.PlanoFaleMais         = simulacao.Plano;
            comparativo.Tempo                 = simulacao.Tempo;
            comparativo.ValorComPlanoFaleMais = await ligacaoPlanoFaleMais.CalcularCustoAsync(simulacao.Tempo, simulacao.DddDestino);

            comparativo.ValorSemPlanoFaleMais = await ligacaoPlanoTarifaFixa.CalcularCustoAsync(simulacao.Tempo, simulacao.DddDestino);

            return(comparativo);
        }
예제 #3
0
        public async Task <ComparativoCustoLigacao> SimularCustoLigacao(
            [SwaggerParameter(Description = "Plano", Required = true)] string plano,
            [SwaggerParameter(Description = "DDD de Origem", Required = true)] string dddOrigem,
            [SwaggerParameter(Description = "DDD de Destino", Required = true)] string dddDestino,
            [SwaggerParameter(Description = "Tempo da ligação em Minutos", Required = true)] int tempo)
        {
            var simulacao = new SimulacaoCustoLigacao();

            simulacao.DddDestino = dddDestino;
            simulacao.DddOrigem  = dddOrigem;
            simulacao.Plano      = plano;
            simulacao.Tempo      = tempo;

            return(await _simuladorService.CompararPlanoComTarifaFixaAsync(simulacao));
        }
예제 #4
0
        public async void Test_CompararPlanoComTarifaFixaAsync__PlanoFaleMaisSelecionado__Expected_CriarServicePlanos_ComparativoPrecos()
        {
            // FIXTURES
            var simulacao = new SimulacaoCustoLigacao
            {
                DddOrigem  = "11",
                DddDestino = "21",
                Tempo      = 10,
                Plano      = FALE_MAIS_30
            };

            _ligacaoFaleMaisService.Setup(x => x.CalcularCustoAsync(It.IsAny <int>(), It.IsAny <string>())).ReturnsAsync(2m);
            _ligacaoTarifaFixaService.Setup(x => x.CalcularCustoAsync(It.IsAny <int>(), It.IsAny <string>())).ReturnsAsync(22m);

            _ligacaoTariaFixaBuilder.Setup(x => x.Criar()).Returns(_ligacaoTarifaFixaService.Object);
            _ligacaoFaleMaisBuilder.Setup(x => x.Criar()).Returns(_ligacaoFaleMaisService.Object);

            _ligacaoBuilder.Setup(x => x.AdicionarOrigem(It.IsAny <string>())).Returns(_ligacaoBuilder.Object);
            _ligacaoBuilder.Setup(x => x.AdicionarPlano(TARIFA_FIXA)).Returns(_ligacaoTariaFixaBuilder.Object);
            _ligacaoBuilder.Setup(x => x.AdicionarPlano(FALE_MAIS_30)).Returns(_ligacaoFaleMaisBuilder.Object);

            _simulacaoValidator
            .Setup(x => x.Validate(It.IsAny <SimulacaoCustoLigacao>()))
            .Returns(new ValidationResult());


            // EXERCISE
            var result = await _service.CompararPlanoComTarifaFixaAsync(simulacao);

            // ASSERTS
            Assert.Equal(2m, result.ValorComPlanoFaleMais);
            Assert.Equal(22m, result.ValorSemPlanoFaleMais);
            Assert.Equal(simulacao.DddDestino, result.DddDestino);
            Assert.Equal(simulacao.DddOrigem, result.DddOrigem);
            Assert.Equal(simulacao.Tempo, result.Tempo);
            Assert.Equal(simulacao.Plano, result.PlanoFaleMais);

            _ligacaoBuilder.Verify(x => x.AdicionarOrigem(simulacao.DddOrigem), Times.Exactly(2));
            _ligacaoBuilder.Verify(x => x.AdicionarPlano(TARIFA_FIXA), Times.Exactly(1));
            _ligacaoBuilder.Verify(x => x.AdicionarPlano(FALE_MAIS_30), Times.Exactly(1));
            _ligacaoFaleMaisService.Verify(x => x.CalcularCustoAsync(simulacao.Tempo, simulacao.DddDestino));
            _ligacaoTarifaFixaService.Verify(x => x.CalcularCustoAsync(simulacao.Tempo, simulacao.DddDestino));
            _simulacaoValidator.Verify(x => x.Validate(simulacao));
        }