public void Reservation_Test(RealTimeInventory inventory, int toReserve)
        {
            IInventoryServiceCompletedMessage response = null;

            using (var testHelper = CreateInventoryServiceServer(inventory))
                response = testHelper.ReserveAsync(inventory, toReserve).WaitAndGetOperationResult();

            InventoryServiceSpecificationHelper.AssertReservations(inventory, toReserve, response);
        }
        public void PurchaseFromHolds_Test(RealTimeInventory inventory, uint toPurchase)
        {
            IInventoryServiceCompletedMessage response;

            using (var testHelper = CreateInventoryServiceServer(inventory))
                response = testHelper.PurchaseFromHoldsAsync(inventory, (int)toPurchase).WaitAndGetOperationResult();

            InventoryServiceSpecificationHelper.AssertPurchaseFromHolds(inventory, toPurchase, response);
        }
        public void UpdateQuantity_Test(RealTimeInventory inventory, int toUpdate)
        {
            IInventoryServiceCompletedMessage response;

            using (var testHelper = CreateInventoryServiceServer(inventory))
                response = testHelper.UpdateQuantityAsync(inventory, toUpdate).WaitAndGetOperationResult();

            InventoryServiceSpecificationHelper.AssertUpdateQuantity(inventory, toUpdate, response);
        }
        public void Holds_Test(RealTimeInventory inventory, int toHold)
        {
            IInventoryServiceCompletedMessage response;

            using (var testHelper = CreateInventoryServiceServer(inventory))
                response = testHelper.PlaceHoldAsync(inventory, toHold).WaitAndGetOperationResult();

            InventoryServiceSpecificationHelper.AssertHolds(inventory, toHold, response);
        }
        public void ResetInventoryQuantityReserveAndHold_Test(RealTimeInventory inventory, int toUpdate, int toReserve, int toHold)
        {
            IInventoryServiceCompletedMessage response;

            using (var testHelper = CreateInventoryServiceServer(inventory))
            {
                response = testHelper.ResetInventoryQuantityReserveAndHoldAsync(inventory, toUpdate, toReserve, toHold).WaitAndGetOperationResult();
            }

            InventoryServiceSpecificationHelper.AssertResetInventoryQuantityReserveAndHold(inventory, toUpdate, toReserve, toHold, response);
        }
        private List <Tuple <int, RealTimeInventory, int> > CreateInventoryOperationEvents(RealTimeInventory inventory, int toUpdate, int looplength)
        {
            List <Tuple <int, RealTimeInventory, int> > events = new List <Tuple <int, RealTimeInventory, int> >();
            var operations       = InventoryServiceSpecificationHelper.GetOperations(null);
            var updatedInventory = inventory;

            for (var i = 0; i < looplength; i++)
            {
                var selection = new Random().Next(1, operations.Count);
                events.Add(new Tuple <int, RealTimeInventory, int>(selection, new RealTimeInventory(updatedInventory.ProductId, updatedInventory.Quantity, updatedInventory.Reserved, updatedInventory.Holds), toUpdate));
            }
            return(events);
        }
        private RealTimeInventory RunSomeInventoryOperationUsingEventsAsync(List <Tuple <int, RealTimeInventory, int> > events, InventoryServiceServer testHelper)
        {
            var operations2 = InventoryServiceSpecificationHelper.GetOperations(testHelper);

            Task <IInventoryServiceCompletedMessage> currentInventoryAfterLastOperationResult = null;

            foreach (var @event in events)
            {
                currentInventoryAfterLastOperationResult = operations2[@event.Item1](@event.Item2, @event.Item3);
            }
            var currentInventoryAfterLastOperation = currentInventoryAfterLastOperationResult.WaitAndGetOperationResult().RealTimeInventory;

            return(currentInventoryAfterLastOperation as RealTimeInventory);
        }
 public void Holds_Reservation_PurchaseFromHold_And_Purchase_Test(RealTimeInventory inventory, int toUpdate)
 {
     using (var testHelper = CreateInventoryServiceServer(inventory))
     {
         const int looplength       = 5;
         var       operations       = InventoryServiceSpecificationHelper.GetOperations(testHelper);
         var       assertions       = InventoryServiceSpecificationHelper.GetAssertions();
         var       updatedInventory = inventory;
         for (var i = 0; i < looplength; i++)
         {
             var selection = new Random().Next(1, operations.Count);
             var updatedInventoryMessage = operations[selection](updatedInventory, toUpdate).WaitAndGetOperationResult();
             assertions[selection](updatedInventory, toUpdate, updatedInventoryMessage);
             updatedInventory = updatedInventoryMessage.RealTimeInventory as RealTimeInventory;
         }
     }
 }
        public void Basic_Test()
        {
            var produltId = "sample" + Guid.NewGuid().ToString().Replace("-", "");

            foreach (var request in new List <Tuple <RealTimeInventory, int> >()
            {
                new Tuple <RealTimeInventory, int>(new RealTimeInventory(produltId, 10, 0, 0), 2)
                //  new Tuple<RealTimeInventory, int>(new RealTimeInventory(produltId, -8,8,11),-42),
                //new Tuple<RealTimeInventory, int>(new RealTimeInventory(produltId, -3,2,2),-17)
            })
            {
                Enumerable.Range(1, 6).ForEach(oo =>
                {
                    using (var testHelper = CreateInventoryServiceServer(request.Item1))
                    {
                        //var  response = testHelper.ReserveAsync(request.Item1, request.Item2).WaitAndGetOperationResult();
                        //  response = testHelper.ReserveAsync(request.Item1, request.Item2).WaitAndGetOperationResult();
                        var operation = InventoryServiceSpecificationHelper.GetOperations(testHelper)[oo];
                        InventoryServiceSpecificationHelper.GetAssertions()[oo](request.Item1, request.Item2, operation(request.Item1, request.Item2).WaitAndGetOperationResult());
                    }
                });
            }
        }