Example #1
0
        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);
        }
Example #3
0
        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");
        }