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