public void Test04After30MinutesCanNotAddABookInTheCart()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient   = application.Login("marcos", "123");
            Guid   aCartId   = application.CreateCart(aClient.Id, aClient.Password);
            string aBook     = objectProvider.ABook();
            string otherBook = objectProvider.OtherBook();


            application.AddAQuantityOfAnItem(1, aBook, aCartId);
            application.Clock.UpdateSomeMinutes(30); // minutes

            try
            {
                application.AddAQuantityOfAnItem(1, otherBook, aCartId);
                Assert.Fail();
            }
            catch (TimeoutException e)
            {
                Assert.AreEqual("The cart has been expired", e.Message);

                Cart aCart = application.GetCart(aCartId);
                Assert.IsFalse(aCart.HasABook(otherBook));
            }
        }
        public void Test05CanAddABookAfter32MinutesWhenTheLastUsageOfTheCartWasBeforeHisExpiration()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);
            string aBook   = objectProvider.ABook();

            application.Clock.UpdateSomeMinutes(20); // 20 minutes
            application.AddAQuantityOfAnItem(1, aBook, aCartId);

            application.Clock.UpdateSomeMinutes(12); // 12 minutes
            application.AddAQuantityOfAnItem(1, aBook, aCartId);

            Cart aCart = application.GetCart(aCartId);

            Assert.IsTrue(aCart.HasABook(aBook));
        }
        public void Test12WhenAddBookToCartAndGetListCartThenIsNotEmpty()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, objectProvider.ABook(), aCartId);

            Assert.IsFalse(application.ListCart(aCartId).Count == 0);
        }
        public void Test13WhenAddAQuantityTimesABookToCartAndGetListCartThereAreTheBookWithThisQuantity()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);
            String aBook   = objectProvider.ABook();

            application.AddAQuantityOfAnItem(4, aBook, aCartId);

            Assert.IsTrue(application.ContainsThisQuantityOfBook(aCartId, aBook, 4));
        }
        public void Test02CanAddABookInACart()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, objectProvider.ABook(), aCartId);

            Cart aCart = application.GetCart(aCartId);

            Assert.IsFalse(aCart.IsEmpty());
        }
        public void Test09WhenAClientHasPurchasesThenHisPurchasesIsNotEmpty()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123"); //TODO: revisar si no queremos seguir desacoplando los ID de la base de datos.

            Guid aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, objectProvider.ABook(), aCartId);
            application.CheckoutCart(aCartId, objectProvider.AValidCreditCard(), objectProvider.ACatalog());

            Assert.IsTrue(application.PurchasesFor(aClient).Item2 != 0);//TODO; ver esta monstruosidad. Asertar lo que corresponda.
        }
        public void Test03WhenAddABookInACartThenTheBookIsInTheCart()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();
            string aBook = objectProvider.ABook();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, aBook, aCartId);

            Cart aCart = application.GetCart(aCartId);

            Assert.IsTrue(aCart.HasABook(aBook));
        }
        public void Test10WhenAClientBuyABookHisPurchasesHasRegisteredThatSale()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, objectProvider.ABook(), aCartId);
            Guid transactionId = application.CheckoutCart(aCartId, objectProvider.AValidCreditCard(), objectProvider.ACatalog());

            Sale aSale = application.GetSale(transactionId);

            Assert.IsTrue(application.PurchasesContainsASaleForAClient(aSale, aClient));
        }
        public void Test06CanCheckoutACartWithOneBookWithASpecificCatalog()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, objectProvider.ABook(), aCartId);

            Guid transactionId = application.CheckoutCart(aCartId, objectProvider.AValidCreditCard(), objectProvider.ACatalog());

            Sale sale = application.GetSale(transactionId);

            Assert.IsTrue(application.IsSaleRegistered(sale));
        }
        public void Test07CanNotCheckoutACartWithAnInvalidBookWithASpecificCatalog()
        {
            IYourBooksApplication application = objectProvider.YourBooksApplication();

            application.RegisterClient("marcos", "123");
            Client aClient = application.Login("marcos", "123");
            Guid   aCartId = application.CreateCart(aClient.Id, aClient.Password);

            application.AddAQuantityOfAnItem(1, objectProvider.AnInvalidBook(), aCartId);

            try
            {
                application.CheckoutCart(aCartId, objectProvider.AValidCreditCard(), objectProvider.ACatalog());
                Assert.Fail();
            }
            catch (ArgumentException e)
            {
                Assert.AreEqual("The cart has invalid books!", e.Message);
            }
        }