/// <summary>
 /// Metoda oblicza wielkość wymiarową.
 /// </summary>
 /// <param name="package"></param>
 /// <returns></returns>
 private decimal DimensionalWeight(PackageDto package)
 {
     if (package == null)
         return 0;
     return ((decimal)package.Length * (decimal)package.Width * (decimal)package.Height) /
             dimensionalWeightFactor;
 }
 /// <summary>
 /// Metoda oblicza koszt danej paczki
 /// </summary>
 /// <remarks>
 /// Koszt jest obliczany na podstawie następującego wzoru:
 ///     c = (Length * Width * Height) / 20000 * Weight
 /// Ponadto, koszt przesyłek zakwalifikowanych jako duże (tj. przekraczających
 /// 50 cm w co najmniej jednym z wymiarów) jest mnożony przez 1.5.
 /// </remarks>
 /// <param name="package"></param>
 /// <returns></returns>
 public decimal GetCost(PackageDto package)
 {
     if (package == null)
         return 0;
     decimal result = DimensionalWeight(package) * package.Weight;
     if (IsSmall(package))
     {
         result *= largePackageFactor;
     }
     return decimal.Round(result, 2, MidpointRounding.AwayFromZero);
 }
        /// <summary>
        /// Zwraca koszt przesyłki.
        /// </summary>
        /// <param name="package"></param>
        /// <returns></returns>
        public async Task<decimal> CalculatePackageCost(PackageDto package)
        {
            NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty);

            queryString[nameof(PackageDto.Height)] = package.Height.ToString(CultureInfo.InvariantCulture);
            queryString[nameof(PackageDto.Width)] = package.Width.ToString(CultureInfo.InvariantCulture);
            queryString[nameof(PackageDto.Length)] = package.Length.ToString(CultureInfo.InvariantCulture);
            queryString[nameof(PackageDto.Weight)] = package.Weight.ToString(CultureInfo.InvariantCulture);

            return await Get<decimal>($"Cost?{queryString}");
        }
        public void RegisterPackage_SetsStatusToNew()
        {
            var mockContext = GetEmptyMockContext();
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List<PackageEvent>());
            var mockPricingStrategy = new Mock<IPricingStrategy>();
            var controller = new PackagesController(mockContext.Object, mockPricingStrategy.Object);

            var package = new Package();
            var packageDto = new PackageDto();
            Mapper.DynamicMap(package, packageDto, typeof(Package), typeof(PackageDto));

            controller.RegisterPackage(packageDto);

            Assert.Equal(PackageStatus.InWarehouse, package.Status);
        }
        public void GetCost_LargePackage()
        {
            var strategy = new RegularPricingStrategy();
            var package = new PackageDto
            {
                Width = 50,
                Length = 100,
                Height = 50,
                Weight = 2
            };

            decimal cost = strategy.GetCost(package);

            Assert.Equal(25M, cost);
        }
        public void RegisterPackage_AssignsCostToThePackage()
        {
            var mockSet = new Mock<IDbSet<Package>>();
            var mockContext = new Mock<InstantDeliveryContext>();
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List<PackageEvent>());
            mockContext.Setup(m => m.Packages).Returns(mockSet.Object);
            var packageDto = new PackageDto();

            var mockPricingStrategy = new Mock<IPricingStrategy>();
            mockPricingStrategy.Setup(m => m.GetCost(packageDto)).Returns(10M);

            var controller = new PackagesController(mockContext.Object, mockPricingStrategy.Object);
            controller.RegisterPackage(packageDto);

            mockSet.Verify(m => m.Add(It.Is((Package p) => p.Cost == 10M)), Times.Once());
        }
        public void RegisterPackage_AddsPackageToDatabase()
        {
            var mockSet = MockDbSetHelper.CreateMockSet(new Package[] { }.AsQueryable());
            var mockContext = new Mock<InstantDeliveryContext>();
            mockContext.Setup(m => m.Packages).Returns(mockSet.Object);
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List<PackageEvent>());
            var pricingMock = new Mock<IPricingStrategy>();
            var package = new Package
            {
                Width = 100,
                Height = 200,
                Length = 150,
                Weight = 100
            };

            var controller = new PackagesController(mockContext.Object, pricingMock.Object);
            var packageDto = new PackageDto();

            Mapper.DynamicMap(package, packageDto, typeof(Package), typeof(PackageDto));
            controller.RegisterPackage(packageDto);

            mockSet.Verify(m => m.Add(It.IsAny<Package>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }
 /// <summary>
 /// Metoda zwraca informację, czy paczka jest mała.
 /// </summary>
 /// <param name="package"></param>
 /// <returns></returns>
 private bool IsSmall(PackageDto package)
 {
     return package.Height <= 50 && package.Length <= 50 &&
            package.Width <= 50;
 }
 public PackageAddViewModel(PackagesServiceProxy service)
 {
     NewPackage = new PackageDto();
     this.service = service;
     this.service = service;
 }
        public void RegisterPackage_ShouldAddEventToPackageHistory()
        {
            var mockSet = new Mock<IDbSet<PackageEvent>>();
            var mockContext = new Mock<InstantDeliveryContext>();
            mockContext.Setup(c => c.Packages).ReturnsDbSet(new List<Package>());
            mockContext.Setup(c => c.PackageEvents).Returns(mockSet.Object);
            var packageDto = new PackageDto { Id = 1 };

            var mockPricingStrategy = new Mock<IPricingStrategy>();
            var controller = new PackagesController(mockContext.Object, mockPricingStrategy.Object);

            controller.RegisterPackage(packageDto);

            mockSet.Verify(m => m.Add(It.Is((PackageEvent p) => p.Package.Id == 1 &&
                                                                p.EventType == PackageEventType.RegisteredInWarehouse)), Times.Once());
        }
        public void RegisterPackage_ForValidatedPackage_ShouldAddNewPackage()
        {
            var package = new Package
            {
                Id = 1,
                Height = 100,
                Weight = 100,
                Width = 100,
                Length = 100,
                Status = PackageStatus.InWarehouse
            };
            var packages = new List<Package>().AsQueryable();
            var packagesMockSet = MockDbSetHelper.CreateMockSet(packages);

            var mockContext = new Mock<InstantDeliveryContext>();
            mockContext.Setup(c => c.Packages).Returns(packagesMockSet.Object);
            mockContext.Setup(m => m.PackageEvents).ReturnsDbSet(new List<PackageEvent>());
            var pricingStrategy = new Mock<IPricingStrategy>().Object;
            var controller = new PackagesController(mockContext.Object, pricingStrategy);
            var packageDto = new PackageDto();
            Mapper.DynamicMap(package, packageDto, typeof(Package), typeof(PackageDto));
            controller.RegisterPackage(packageDto);

            packagesMockSet.Verify(m => m.Add(It.IsAny<Package>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
        }
Esempio n. 12
0
 public IHttpActionResult RegisterPackage(PackageDto package)
 {
     if (!ModelState.IsValid)
     {
         return BadRequest();
     }
     package.Status = PackageStatus.InWarehouse;
     package.Cost = pricingStrategy.GetCost(package);
     var newPackage = Mapper.Map<Package>(package);
     context.Packages.Add(newPackage);
     context.PackageEvents.Add(new PackageEvent
     {
         EventType = PackageEventType.RegisteredInWarehouse,
         Package = newPackage
     });
     context.SaveChanges();
     return Ok();
 }
 /// <summary>
 /// Rejestruje paczkę.
 /// </summary>
 /// <param name="newPackage"></param>
 /// <returns></returns>
 public async Task RegisterPackage(PackageDto newPackage)
 {
     await PostAsJson("Register", newPackage);
 }
 public IHttpActionResult SendPackage(PackageDto package)
 {
     if (!ModelState.IsValid)
     {
         return BadRequest(ModelState);
     }
     var customer = context.Customers.FirstOrDefault(c => c.User.UserName == User.Identity.Name);
     if (customer == null)
     {
         return BadRequest();
     }
     package.Status = PackageStatus.AtClientsLocation;
     package.Cost = pricingStrategy.GetCost(package);
     var newPackage = Mapper.Map<Package>(package);
     context.Packages.Add(newPackage);
     customer.Packages.Add(newPackage);
     context.PackageEvents.Add(new PackageEvent
     {
         Package = newPackage,
         EventType = PackageEventType.ReadyToPickFromSender
     });
     context.SaveChanges();
     return Ok();
 }
 public async void NoticeLeft(PackageDto package)
 {
     await service.DetachPackageFromEmployee(package.Id);
     UpdateData();
 }
 public async void Delivered(PackageDto package)
 {
     await service.MarkAsDelivered(package.Id);
     UpdateData();
 }