public async Task CanCancelReservationsByOrderId() { var product = _productRepository.Insert(new Product { Name = "CanCancelReservationsByOrderId", ProductType = ProductType.Reservation }); var toInsert1 = new ProductReservation { ProductId = product.Id, OrderId = "1" }; var toInsert2 = new ProductReservation { ProductId = product.Id, OrderId = "1" }; var toInsert3 = new ProductReservation { ProductId = product.Id, OrderId = "2" }; await _productReservationService.InsertProductReservation(toInsert1); await _productReservationService.InsertProductReservation(toInsert2); await _productReservationService.InsertProductReservation(toInsert3); var before = await _productReservationService.GetProductReservationsByProductId(product.Id, true, null); await _productReservationService.CancelReservationsByOrderId("1"); var after = await _productReservationService.GetProductReservationsByProductId(product.Id, true, null); Assert.AreEqual(0, before.Count); Assert.AreEqual(2, after.Count); }
public async Task CanGetProductReservationByProductId() { var product = _productRepository.Insert(new Product { Name = "CanGetProductReservationByProductId", ProductType = ProductType.Reservation }); var toInsert = new ProductReservation { Resource = "CanGetProductReservationByProductId", ProductId = product.Id }; await _productReservationService.InsertProductReservation(toInsert); var found = await _productReservationService.GetProductReservationsByProductId(product.Id, null, null); Assert.AreEqual(1, found.Count); Assert.AreEqual("CanGetProductReservationByProductId", found.First().Resource); }
public ProductReservationResponse ReserveProduct(ReserveProductRequest productReservationRequest) { ProductReservationResponse reserveProductResponse = new ProductReservationResponse(); try { Product product = _productRepository.FindBy(Guid.Parse(productReservationRequest.ProductId)); if (product != null) { ProductReservation productReservation = null; if (product.CanReserveProduct(productReservationRequest.ProductQuantity)) { productReservation = product.Reserve(productReservationRequest.ProductQuantity); _productRepository.Save(product); reserveProductResponse.ProductId = productReservation.Product.ID.ToString(); reserveProductResponse.Expiration = productReservation.Expiry; reserveProductResponse.ProductName = productReservation.Product.Name; reserveProductResponse.ProductQuantity = productReservation.Quantity; reserveProductResponse.ReservationId = productReservation.Id.ToString(); } else { int availableAllocation = product.Available(); reserveProductResponse.Exception = new LimitedAvailabilityException(string.Concat("There are only & quot;, availableAllocation, " pieces of this product left.")); } } else { throw new ResourceNotFoundException(string.Concat(" No product with id ", productReservationRequest.ProductId, ", was found.")); } } catch (Exception ex) { reserveProductResponse.Exception = ex; } return(reserveProductResponse); }
public void CanUpdateProductReservation() { var product = _productRepository.Insert(new Product { Name = "CanUpdateProductReservation", ProductType = ProductType.Reservation }); var toInsert = new ProductReservation { Resource = "CanUpdateProductReservation", ProductId = product.Id }; _productReservationService.InsertProductReservation(toInsert); var before = _productReservationService.GetProductReservationsByProductId(product.Id, null, null).First(); before.Resource = "Updated"; _productReservationService.UpdateProductReservation(before); var after = _productReservationService.GetProductReservationsByProductId(product.Id, null, null); Assert.AreEqual(1, after.Count); Assert.AreEqual(after.First().Resource, "Updated"); }