Ejemplo n.º 1
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.5m);

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

            //Assert
            Assert.AreEqual(true, valida);
        }
Ejemplo n.º 2
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.º 3
0
        public void ObtenerFechaEntrega_22Febrero1200Maritimo_FechaPedidoMas57punto2hrs()
        {
            //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.5m);

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

            //Assert
            Assert.AreEqual(param.FechaPedido.AddHours(57.2), fechaEntrega);
        }
Ejemplo n.º 4
0
        public void ObtenerCostoServicio_22Febrero1200Maritimo_664punto2()//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.5m);

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

            //Assert
            Assert.AreEqual(664.2m, costo);
        }
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 override IPaqueteria CrearPaqueteria()
        {
            Dhl          PaqueteriaDhl = new Dhl();
            AvionFactory avionFactory  = new AvionFactory();
            BarcoFactory barcoFactory  = new BarcoFactory();

            PaqueteriaDhl.AgregarTransporte(avionFactory.CrearTransporte());
            PaqueteriaDhl.AgregarTransporte(barcoFactory.CrearTransporte());

            return(PaqueteriaDhl);
        }
Ejemplo n.º 7
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();
        }
 public DhlEnviosFactory(Dhl dhl)
 {
     DeliveryCompany = dhl;
 }