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); }
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); }
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); }
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); }
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(); }
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); }
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; }