Ejemplo n.º 1
0
        public void ObtenerFechaEntrega_22Febrero1200Maritimo_FechaPedidoMas58punto2hrs()
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };

            var DOCcalculaCostoTransporte = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporte.Setup(doc => doc.Nombre).Returns("Maritimo");
            DOCcalculaCostoTransporte.Setup(doc => doc.ObtieneTiempoTransporte(It.IsAny <ParametroCalculoMedioTransporteDTO>())).Returns(37.2m);
            IMedioTransporte[] mediosTransporteFedex = { DOCcalculaCostoTransporte.Object };

            var DOCmargenUtilidad = new Mock <IMargenUtilidad>();

            DOCmargenUtilidad.Setup(doc => doc.ObtenerMargenUtilidad(param.FechaPedido)).Returns(1.4m);

            var SUT = new Fedex(mediosTransporteFedex, DOCmargenUtilidad.Object);
            //ACT
            var fechaEntrega = SUT.ObtenerFechaEntrega(param);

            //Assert
            Assert.AreEqual(param.FechaPedido.AddHours(58.2), fechaEntrega);
        }
Ejemplo n.º 2
0
        public void ObtenerFechaEntrega_MaritimoTiempoReparto21_23febrero2020()
        {
            //Arrange
            var DOCMedioTransporte = new Mock <IMediosTransporte>();
            var DOCcalculaMargen   = new Mock <ICalculadorMargenUtilidadCosto>();

            ParametrosDTO parametros      = new ParametrosDTO();
            ParametrosDTO parametrosFinal = new ParametrosDTO();
            DateTime      dtFechaPedido   = new DateTime(2020, 02, 22);
            double        dDistancia      = 1200;

            parametros.dtFechaPedido = dtFechaPedido;
            parametros.dDistacia     = dDistancia;
            DOCMedioTransporte.Setup(doc => doc.CalculaTiempoTraslado(parametros)).Returns(37.2);
            List <TiempoRepartoDTO> lstTiempoReparto = new List <TiempoRepartoDTO>();

            lstTiempoReparto.Add(new TiempoRepartoDTO {
                cMedioTransporte = "MARITIMO", iHoras = 21, iMinutos = 0
            });
            lstTiempoReparto.Add(new TiempoRepartoDTO {
                cMedioTransporte = "TERRESTRE", iHoras = 10, iMinutos = 0
            });
            lstTiempoReparto.Add(new TiempoRepartoDTO {
                cMedioTransporte = "AEREO", iHoras = 21, iMinutos = 0
            });

            var SUT = new Fedex(DOCMedioTransporte.Object, DOCcalculaMargen.Object, lstTiempoReparto, parametrosFinal);

            //ACT
            var regreso = SUT.ObtenerFechaEntrega(parametros);

            //ASSERT
            Assert.AreEqual(new DateTime(2020, 02, 23, 13, 12, 0), regreso);
        }
Ejemplo n.º 3
0
        public void ObtenerCostoServicio_22Febrero1200Maritimo_619punto92()//Invierno
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };

            var DOCcalculaCostoTransporte = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporte.Setup(doc => doc.Nombre).Returns("Maritimo");
            DOCcalculaCostoTransporte.Setup(doc => doc.ObtieneCostoTransporte(It.IsAny <ParametroCalculoMedioTransporteDTO>())).Returns(442.80m);
            IMedioTransporte[] mediosTransporteFedex = { DOCcalculaCostoTransporte.Object };

            var DOCmargenUtilidad = new Mock <IMargenUtilidad>();

            DOCmargenUtilidad.Setup(doc => doc.ObtenerMargenUtilidad(param.FechaPedido)).Returns(1.4m);

            var SUT = new Fedex(mediosTransporteFedex, DOCmargenUtilidad.Object);
            //ACT
            var costo = SUT.ObtenerCostoServicio(param);

            //Assert
            Assert.AreEqual(619.92m, costo);
        }
Ejemplo n.º 4
0
 protected override void InicializarEmpresa()
 {
     if (EmpresaPaqueteria == null)
     {
         EmpresaPaqueteria = new Fedex();
     }
 }
Ejemplo n.º 5
0
        public static void Main(string[] args)
        {
            //Empresas
            Fedex    fedex    = new Fedex();
            Dhl      dhl      = new Dhl();
            Estafeta estafeta = new Estafeta();

            //Servicios para el procesamiento de los paquetes
            EnvioPaqueteTren  envioPaqueteTren;
            EnvioPaqueteBarco envioPaqueteBarco;
            EnvioPaqueteAvion envioPaqueteAvion;

            envioPaqueteBarco = new EnvioPaqueteBarco(fedex);
            envioPaqueteBarco.ProcesarEnvio();

            envioPaqueteAvion = new EnvioPaqueteAvion(dhl);
            envioPaqueteAvion.ProcesarEnvio();
            envioPaqueteBarco = new EnvioPaqueteBarco(dhl);
            envioPaqueteBarco.ProcesarEnvio();

            envioPaqueteTren = new EnvioPaqueteTren(estafeta);
            envioPaqueteTren.ProcesarEnvio();

            Console.ReadLine();
        }
Ejemplo n.º 6
0
        public IPaqueterias AsignarPaqueria(string _cClave)
        {
            IPaqueterias paqueteria;

            switch (_cClave)
            {
            case "Estafeta":
                paqueteria = new Estafeta();
                break;

            case "DHL":
                paqueteria = new DHL();
                break;

            case "Fedex":
                paqueteria = new Fedex();
                break;

            default:
                ImpresorMensajes.mostrarMensajeError(string.Format("La Paquetería: {0} no se encuentra registrada en nuestra red de distribución.", _cClave));
                paqueteria = null;
                break;
            }
            return(paqueteria);
        }
Ejemplo n.º 7
0
        public IPaqueteria Create(string _nombrePaqueteria)
        {
            var dto = paqueteriasDTO.Paqueterias.FirstOrDefault(f => f.Paqueteria == _nombrePaqueteria);
            var _nombrePaqueteriaEnum = (PaqueteriaEnum)System.Enum.Parse(typeof(PaqueteriaEnum), dto.Paqueteria.ToUpper());
            List <IMedioTransporte> mediosTransporte = new List <IMedioTransporte>();

            foreach (var medio in dto.Medios)
            {
                mediosTransporte.Add(MedioTransporteFactory.Create(medio.Medio));
            }
            IPaqueteria factory;

            switch (_nombrePaqueteriaEnum)
            {
            case PaqueteriaEnum.FEDEX:
                factory = new Fedex(mediosTransporte.ToArray(), new FedexMargenUtilidad(dto.MargenUtilidad));
                break;

            case PaqueteriaEnum.DHL:
                factory = new Dhl(mediosTransporte.ToArray(), new DhlMargenUtilidad(dto.MargenUtilidad));
                break;

            case PaqueteriaEnum.ESTAFETA:
                factory = new Estafeta(mediosTransporte.ToArray(), new EstafetaMargenUtilidad(dto.MargenUtilidad));
                break;

            default:
                throw new NotImplementedException($"No existe una implementación para la paqueteria {_nombrePaqueteriaEnum.ToString()}.");
            }
            return(factory);
        }
Ejemplo n.º 8
0
        public void ValidaMedioTransporte_Terrestre_true()
        {
            //Arrange
            ParametrosPaqueteriaDTO param = new ParametrosPaqueteriaDTO()
            {
                FechaPedido = new DateTime(2020, 2, 22), Distancia = 1200, NombreMedioTransporte = "Maritimo"
            };
            var DOCcalculaCostoTransporteTerrestre = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporteTerrestre.Setup(doc => doc.Nombre).Returns("Terrestre");
            var DOCcalculaCostoTransporteMaritimo = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporteMaritimo.Setup(doc => doc.Nombre).Returns("Maritimo");
            var DOCcalculaCostoTransporteAreo = new Mock <IMedioTransporte>();

            DOCcalculaCostoTransporteAreo.Setup(doc => doc.Nombre).Returns("Aereo");
            IMedioTransporte[] mediosTransporteFedex = { DOCcalculaCostoTransporteTerrestre.Object, DOCcalculaCostoTransporteMaritimo.Object, DOCcalculaCostoTransporteAreo.Object };

            var DOCmargenUtilidad = new Mock <IMargenUtilidad>();

            DOCmargenUtilidad.Setup(doc => doc.ObtenerMargenUtilidad(param.FechaPedido)).Returns(1.4m);

            var SUT = new Fedex(mediosTransporteFedex, DOCmargenUtilidad.Object);
            //ACT
            var valida = SUT.ValidaMedioTransporte("Terrestre");

            //Assert
            Assert.AreEqual(true, valida);
        }
Ejemplo n.º 9
0
        public void CalculaCostoEnvio_EstacionInviernoDistancia1200_618punto8()
        {
            //Arrange
            var DOCMedioTransporte = new Mock <IMediosTransporte>();
            var DOCcalculaMargen   = new Mock <ICalculadorMargenUtilidadCosto>();

            ParametrosDTO parametros      = new ParametrosDTO();
            ParametrosDTO parametrosFinal = new ParametrosDTO();
            DateTime      dtFechaPedido   = new DateTime(2020, 02, 22);
            double        dDistancia      = 1200;

            parametros.dtFechaPedido = dtFechaPedido;
            parametros.dDistacia     = dDistancia;
            DOCMedioTransporte.Setup(doc => doc.CalculaCostoEnvio(parametros)).Returns(442);
            DOCcalculaMargen.Setup(doc => doc.ObtenerMargenUtilidadCosto(442, dtFechaPedido)).Returns(618.8);
            List <TiempoRepartoDTO> lstTiempoReparto = new List <TiempoRepartoDTO>();

            lstTiempoReparto.Add(new TiempoRepartoDTO {
                cMedioTransporte = "MARITIMO", iHoras = 21, iMinutos = 0
            });
            lstTiempoReparto.Add(new TiempoRepartoDTO {
                cMedioTransporte = "TERRESTRE", iHoras = 10, iMinutos = 0
            });
            lstTiempoReparto.Add(new TiempoRepartoDTO {
                cMedioTransporte = "AEREO", iHoras = 21, iMinutos = 0
            });

            var SUT = new Fedex(DOCMedioTransporte.Object, DOCcalculaMargen.Object, lstTiempoReparto, parametrosFinal);

            //ACT
            var regreso = SUT.ObtenerCostoEnvio(parametros);

            //ASSERT
            Assert.AreEqual(618.8, regreso);
        }
Ejemplo n.º 10
0
        public void ValidarTransporte_Maritimo_true()
        {
            IFormatProvider culture   = new CultureInfo("ES-MX", true);
            var             Sut       = new Fedex("Marítimo", DateTime.ParseExact("02/09/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);
            bool            Resultado = Sut.ValidarTransporte();

            Assert.IsTrue(Resultado);
        }
Ejemplo n.º 11
0
        public void MostrarValidaciontransporte_NoAsignado_MuestraError()
        {
            IFormatProvider culture   = new CultureInfo("ES-MX", true);
            var             Sut       = new Fedex("Submarino", DateTime.ParseExact("02/09/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);
            string          Resultado = Sut.MostrarValidaciontransporte();

            Assert.AreEqual("Fedex no ofrece el servicio de transporte Submarino, te recomendamos cotizar en otra empresa.", Resultado);
        }
        public override IPaqueteria CrearPaqueteria()
        {
            Fedex        fedex        = new Fedex();
            BarcoFactory barcoFactory = new BarcoFactory();

            fedex.AgregarTransporte(barcoFactory.CrearTransporte());
            return(fedex);
        }
Ejemplo n.º 13
0
        public void ObtenerPaqueteria_General_DevuelveFedex()
        {
            IFormatProvider culture   = new CultureInfo("ES-MX", true);
            var             Sut       = new Fedex("", DateTime.ParseExact("02/09/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);
            string          Resultado = Sut.ObtenerPaqueteria();

            Assert.AreEqual("Fedex", Resultado);
        }
Ejemplo n.º 14
0
        public void ObtenerTiempoRepartoMinutos_Maritimo_MildocientosSesenta()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Fedex("Marítimo", DateTime.ParseExact("02/03/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerTiempoRepartoMinutos();

            Assert.AreEqual(1260, Resultado);
        }
Ejemplo n.º 15
0
        public void ObtenerTiempoRepartoMinutos_Terrestre_Seiscientos()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Fedex("Terrestre", DateTime.ParseExact("02/03/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerTiempoRepartoMinutos();

            Assert.AreEqual(600, Resultado);
        }
Ejemplo n.º 16
0
        public void ObtenerUtilidad_Impar_PuntoTres()
        {
            IFormatProvider culture = new CultureInfo("ES-MX", true);
            var             Sut     = new Fedex("", DateTime.ParseExact("02/05/2020 12:00", "dd/MM/yyyy HH:mm", culture), configuraciones);

            decimal Resultado = Sut.ObtenerUtilidad();

            Assert.AreEqual(.30M, Resultado);
        }
Ejemplo n.º 17
0
        private IEmpresa CrearEmpresaFedexBarco(List <IMetodoEnvio> _lstMetodosEnvio)
        {
            IEmpresa     fedexBarco;
            IMetodoEnvio envioBarco = _lstMetodosEnvio.Where(m => m.metodoEnvioDTO.cNombre.ToLower() == "barco").FirstOrDefault();
            EmpresaDTO   fedexDTO   = new EmpresaDTO {
                cNombre = "Fedex", dMargenUtilidad = 0.50m
            };

            fedexBarco = new Fedex(envioBarco, fedexDTO);

            return(fedexBarco);
        }
Ejemplo n.º 18
0
        public void FedExTest()
        {
            Fedex fedExTest = new Fedex(-3, -5);

            Assert.AreEqual(0, fedExTest.Distance);
            Assert.AreEqual(0, fedExTest.Weight);

            fedExTest = new Fedex(3, 5);
            Assert.AreEqual(3, fedExTest.Distance);
            Assert.AreEqual(5, fedExTest.Weight);
            Assert.AreEqual(20, fedExTest.Rate);
            Assert.AreEqual(0, fedExTest.CalculateRate(4, 5));
            Assert.AreEqual(0, fedExTest.CalculateRate(3, 6));
            Assert.AreEqual(20, fedExTest.CalculateRate(3, 5));
            Assert.AreEqual("FedEx", fedExTest.DeliveryNameAndType);

            fedExTest = new Fedex(500, 5);
            Assert.AreEqual(500, fedExTest.Distance);
            Assert.AreEqual(5, fedExTest.Weight);
            Assert.AreEqual(20, fedExTest.CalculateRate(500, 5));
            Assert.AreEqual(20, fedExTest.Rate);

            fedExTest = new Fedex(501, 5);
            Assert.AreEqual(501, fedExTest.Distance);
            Assert.AreEqual(5, fedExTest.Weight);
            Assert.AreEqual(25, fedExTest.CalculateRate(501, 5));
            Assert.AreEqual(25, fedExTest.Rate);

            fedExTest = new Fedex(500, 48);
            Assert.AreEqual(500, fedExTest.Distance);
            Assert.AreEqual(48, fedExTest.Weight);
            Assert.AreEqual(20, fedExTest.CalculateRate(500, 48));
            Assert.AreEqual(20, fedExTest.Rate);

            fedExTest = new Fedex(500, 49);
            Assert.AreEqual(500, fedExTest.Distance);
            Assert.AreEqual(49, fedExTest.Weight);
            Assert.AreEqual(23, fedExTest.CalculateRate(500, 49));
            Assert.AreEqual(23, fedExTest.Rate);

            fedExTest = new Fedex(501, 55);
            Assert.AreEqual(501, fedExTest.Distance);
            Assert.AreEqual(55, fedExTest.Weight);
            Assert.AreEqual(28, fedExTest.CalculateRate(501, 55));
            Assert.AreEqual(28, fedExTest.Rate);
        }
Ejemplo n.º 19
0
        static void Main(string[] args)
        {
            DHL          dhl    = new DHL();
            Fedex        fed    = new Fedex();
            CorreoMexico correo = new CorreoMexico();

            clientA clca = new clientA();
            clientB clcb = new clientB();
            clientC clcc = new clientC();

            dhl.add(clca);
            fed.add(clcb);
            correo.add(clcc);
            correo.add(clca);

            Console.ReadKey();
        }
Ejemplo n.º 20
0
        public void CalcularRangoTiempo_DatosCorrectos_ArmaCostoConTextoTuvo()
        {
            //Arrange
            string  cRangoTiempoEsperado = "2 horas";
            decimal dTiempoTraslado      = 2m;
            var     DOCIMetodoEnvio      = new Mock <IMetodoEnvio>();

            DOCIMetodoEnvio.Setup(e => e.CalcularTiempoTraslado(It.IsAny <decimal>())).Returns(dTiempoTraslado);
            DOCIMetodoEnvio.Setup(e => e.ObtenerFechaEntrega(It.IsAny <DateTime>(), It.IsAny <decimal>())).Returns(It.IsAny <DateTime>());
            var DOCIRangoTiempo = new Mock <IRangoTiempo>();

            DOCIRangoTiempo.Setup(r => r.ObtenerRangoTiempo(It.IsAny <DateTime>(), It.IsAny <DateTime>())).Returns(cRangoTiempoEsperado);

            var SUT = new Fedex(DOCIMetodoEnvio.Object, new EmpresaDTO());

            //Act
            string cRangoTiempo = SUT.CalcularRangoTiempo(new PedidoDTO(), It.IsAny <DateTime>(), DOCIRangoTiempo.Object);

            //Assert
            Assert.AreEqual(cRangoTiempoEsperado, cRangoTiempo);
        }
Ejemplo n.º 21
0
        public void ObtenerCosto_DatosCorrectos_ArmaCostoConTextoTuvo()
        {
            //Arrange
            string  cMensajeCosto         = "tuvó";
            decimal dCosto                = 10m;
            string  cMensajeCostoEsperado = $"{cMensajeCosto} un costo de ${dCosto.ToString()}";
            var     DOCIMetodoEnvio       = new Mock <IMetodoEnvio>();

            DOCIMetodoEnvio.Setup(e => e.CalcularCostoEnvio(It.IsAny <decimal>(), It.IsAny <decimal>())).Returns(dCosto);
            var SUT = new Fedex(DOCIMetodoEnvio.Object, new EmpresaDTO());

            var DOCIVerificadorEstadoPaquete = new Mock <IVerificadorEstadoPaquete>();

            DOCIVerificadorEstadoPaquete.Setup(v => v.VerificarPrevioCostoPaquete()).Returns(cMensajeCosto);

            //Act
            string cCosto = SUT.ObtenerCosto(It.IsAny <decimal>(), DOCIVerificadorEstadoPaquete.Object);

            //Assert
            Assert.AreEqual(cMensajeCostoEsperado, cCosto);
        }
Ejemplo n.º 22
0
        static void Main(string[] args)
        {
            MetodoEnvios metodoFedex = new Fedex(new Barco());

            metodoFedex.Display("Paqueteria Fedex");

            MetodoEnvios metodoDhlAvion = new DHL(new Avion());

            metodoDhlAvion.Display("Paqueteria DHL");


            MetodoEnvios metodoDhlBarco = new DHL(new Barco());

            metodoDhlBarco.Display("Paqueteria DHL");

            MetodoEnvios metodoEstafeta = new Estafeta(new Tren());

            metodoEstafeta.Display("Paqueteria Estafeta");

            Console.ReadLine();
        }
Ejemplo n.º 23
0
        public void ObtenerEstadoPaquete_DatosCorrectosParaArmarTexto_ObtieneTextoCuendoEstaPorEntregar()
        {
            //Arrange
            string cOrigen         = "origen";
            string cDestino        = "destino";
            string cEstadoEsperado = $"Tu paquete ha salido de {cOrigen} y llegará a {cDestino} dentro de";
            var    DOCIMetodoEnvio = new Mock <IMetodoEnvio>();
            var    DOCIVerificadorEstadoPaquete = new Mock <IVerificadorEstadoPaquete>();

            DOCIVerificadorEstadoPaquete.Setup(v => v.VerificarSiPaqueteSalio()).Returns("ha salido");
            DOCIVerificadorEstadoPaquete.Setup(v => v.VerificarSiPaqueteLlego()).Returns("llegará");
            DOCIVerificadorEstadoPaquete.Setup(v => v.VerificarPrevioTiempoPaquete()).Returns("dentro de");

            var SUT = new Fedex(DOCIMetodoEnvio.Object, new EmpresaDTO());

            //Act
            string cEstado = SUT.ObtenerEstadoPaquete(new PedidoDTO {
                cOrigen = cOrigen, cDestino = cDestino
            }, DOCIVerificadorEstadoPaquete.Object);

            //Assert
            Assert.AreEqual(cEstadoEsperado, cEstado);
        }
Ejemplo n.º 24
0
        public Empresas CrearInstancia(int iTipo, ITipoEnvio tipoEnvio, string cProducto)
        {
            Empresas empresa = null;

            switch (iTipo)
            {
            case 1:
                empresa = new DHL(tipoEnvio, cProducto);
                break;

            case 2:
                empresa = new Fedex(tipoEnvio, cProducto);

                break;

            case 4:
                empresa = new Estafeta(tipoEnvio, cProducto);

                break;
            }

            return(empresa);
        }
Ejemplo n.º 25
0
        static void Main(string[] args)
        {
            IPaqueteria svrPaqueteriaFedex    = new Fedex();
            IPaqueteria svrPaqueteriaDHL      = new DHL();
            IPaqueteria svrPaqueteriaEstafeta = new Estafeta();

            TransportadorBridge svrTransportador = new TransportadorBarco(svrPaqueteriaFedex);

            Console.WriteLine("Paqueteria Fedex");
            svrTransportador.Procesar();

            Console.WriteLine("Paqueteria DHL");
            svrTransportador = new TransportadorAvion(svrPaqueteriaDHL);
            svrTransportador.Procesar();
            svrTransportador = new TransportadorBarco(svrPaqueteriaDHL);
            svrTransportador.Procesar();

            Console.WriteLine("Paqueteria Estafeta");
            svrTransportador = new TransportadorTren(svrPaqueteriaEstafeta);
            svrTransportador.Procesar();

            Console.Write("Presiona cualquier tecla para salir del programa oks...");
            Console.ReadKey();
        }
Ejemplo n.º 26
0
        static void Main(string[] args)
        {
            //setup our DI
            var serviceProvider = new ServiceCollection()
                                  .AddScoped(typeof(IClockReader), typeof(Clock))
                                  .AddScoped(typeof(IEnviosRepository), typeof(EnviosRepository))
                                  .AddScoped <IPackageRepository, EnvioPackageRepositoryAdapter>(x => {
                EnvioPackageRepositoryAdapter envioPackageRepositoryAdapter =
                    new EnvioPackageRepositoryAdapter(x.GetRequiredService <IEnviosRepository>());
                envioPackageRepositoryAdapter.AddFactory(new EstafetaEnviosFactory(new Estafeta()));
                envioPackageRepositoryAdapter.AddFactory(new FedexEnviosFactory(new Fedex()));
                envioPackageRepositoryAdapter.AddFactory(new DhlEnviosFactory(new Dhl()));
                return(envioPackageRepositoryAdapter);
            })
                                  .AddScoped(typeof(IRangoDeTiempoProvider), typeof(RangoDeTiempoProvider))
                                  .AddScoped(typeof(ITimeChecker), typeof(TimeChecker))
                                  .AddScoped(typeof(ICalculadorTiempoTraslado), typeof(CalculadorTiempoTraslado))
                                  .AddScoped(typeof(ICalculadorDeFechaDeEntrega), typeof(DefaultCalculadorFechaEntrega))
                                  .AddScoped(typeof(ICalculadorCostoEnvio), typeof(CalculadorCostoEnvio))
                                  .AddScoped(typeof(IDeliveryManager), typeof(DeliveryManager))
                                  .AddScoped(typeof(IDeliveryMessagePrinter), typeof(DeliveryMessagePrinter))
                                  .AddScoped(typeof(IReporteadorDePedidos), typeof(ReporteadorDePedidos))
                                  .BuildServiceProvider();
            IReporteadorDePedidos  reporteadorDePedidos  = serviceProvider.GetRequiredService <IReporteadorDePedidos>();
            IRangoDeTiempoProvider rangoDeTiempoProvider = serviceProvider.GetRequiredService <IRangoDeTiempoProvider>();
            ICalculadorCostoEnvio  calculadorCostoEnvio  = serviceProvider.GetRequiredService <ICalculadorCostoEnvio>();

            //Empresas
            Estafeta estafeta = new Estafeta();
            Fedex    fedex    = new Fedex();
            Dhl      dhl      = new Dhl();



            reporteadorDePedidos.AddEmpresa(estafeta);
            reporteadorDePedidos.AddEmpresa(fedex);
            reporteadorDePedidos.AddEmpresa(dhl);
            reporteadorDePedidos.AddStrategy(
                PackageStatus.entregado,
                new EntregadoStrategy(rangoDeTiempoProvider, calculadorCostoEnvio));
            reporteadorDePedidos.AddStrategy(
                PackageStatus.enCamino,
                new PorEntregarStrategy(rangoDeTiempoProvider, calculadorCostoEnvio));
            reporteadorDePedidos.AddStrategy(PackageStatus.unknown, new UnsupportedMetodoEnvioStrategy());
            reporteadorDePedidos.AddStrategy(PackageStatus.unsupported, new EmpresaDesconocidaStrategy());

            RecomendacionReporteadorPedidosDecorator recomendacionReporteadorPedidosDecorator =
                new RecomendacionReporteadorPedidosDecorator(reporteadorDePedidos, serviceProvider.GetRequiredService <IPackageRepository>(), serviceProvider.GetRequiredService <ICalculadorCostoEnvio>());

            recomendacionReporteadorPedidosDecorator.AddEmpresa(estafeta);
            recomendacionReporteadorPedidosDecorator.AddEmpresa(fedex);
            recomendacionReporteadorPedidosDecorator.AddEmpresa(dhl);
            recomendacionReporteadorPedidosDecorator.AddStrategy(
                PackageStatus.entregado,
                new EntregadoStrategy(rangoDeTiempoProvider, calculadorCostoEnvio));
            recomendacionReporteadorPedidosDecorator.AddStrategy(
                PackageStatus.enCamino,
                new PorEntregarStrategy(rangoDeTiempoProvider, calculadorCostoEnvio));
            recomendacionReporteadorPedidosDecorator.AddStrategy(PackageStatus.unknown, new UnsupportedMetodoEnvioStrategy());
            recomendacionReporteadorPedidosDecorator.AddStrategy(PackageStatus.unsupported, new EmpresaDesconocidaStrategy());

            recomendacionReporteadorPedidosDecorator.ReportAll();
        }
Ejemplo n.º 27
0
 public FedexEnviosFactory(Fedex fedex)
 {
     DeliveryCompany = fedex;
 }