Пример #1
0
        public void GivenANewTusLibrosRestAPI_WhenCheckingOutCorrectCart_ThenATransactionIdIsReturned()
        {
            const string expectedTransactionId = "ABC";
            var          sut = new TusLibrosRestAPIStubBuilder()
                               .AuthenticatesWith(new AuthenticatorStubBuilder()
                                                  .Returns(true)
                                                  .Build())
                               .MeasuresTimeWith(new ClockStubBuilder()
                                                 .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                                 .IsExpired(false)
                                                 .Build())
                               .CommunicatesWith(new MerchantAdapterStubBuilder()
                                                 .AlwaysReturns(expectedTransactionId)
                                                 .Build())
                               .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                               .UsesPricelist(new Dictionary <object, decimal> {
                { VALID_ITEM, 1 }
            })
                               .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            sut.AddToCart(cartId, VALID_ITEM, 1);
            var transactionId = sut.Checkout(cartId, VALID_CARD_NUMBER, VALID_EXPIRATION_DATE, VALID_CARD_OWNER);

            Assert.Equal(expectedTransactionId, transactionId);
        }
Пример #2
0
        public void GivenANewTusLibrosRestAPI_WhenGettingPurchasesWithValidNewClient_ThenEmptyIsReturned()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                      .UsesPricelist(new Dictionary <object, decimal> {
                { VALID_ITEM, 1 }
            })
                      .UsesBalance(new Dictionary <string, List <object> > {
                { "clientId", new List <object> {
                  } }
            })
                      .Build();

            sut.CreateCart("validClientId", "validPassword");

            var items = sut.ListPurchases("clientId", "validPassword");

            Assert.Empty(items);
        }
Пример #3
0
        public void GivenANewTusLibrosRestAPI_WhenListingCartWithSeveralItems_ThenReturnsAList()
        {
            const int quantity1 = 4;
            const int quantity2 = 13;
            var       sut       = new TusLibrosRestAPIStubBuilder()
                                  .AuthenticatesWith(new AuthenticatorStubBuilder()
                                                     .Returns(true)
                                                     .Build())
                                  .MeasuresTimeWith(new ClockStubBuilder()
                                                    .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                                    .IsExpired(false)
                                                    .Build())
                                  .UsesCatalog(new List <object> {
                VALID_ITEM, ANOTHER_VALID_ITEM
            })
                                  .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            sut.AddToCart(cartId, VALID_ITEM, quantity1);
            sut.AddToCart(cartId, ANOTHER_VALID_ITEM, quantity2);
            var itemsInCart = sut.ListCart(cartId);

            Assert.Collection(itemsInCart,
                              elem1 => { Assert.Equal(VALID_ITEM, elem1.Item1); Assert.Equal(quantity1, elem1.Item2); },
                              elem2 => { Assert.Equal(ANOTHER_VALID_ITEM, elem2.Item1); Assert.Equal(quantity2, elem2.Item2); });
        }
Пример #4
0
        public void GivenANewTusLibrosRestAPI_WhenGettingPurchasesWithValidClientWithBuys_ThenDataIsReturned()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                      .UsesPricelist(new Dictionary <object, decimal> {
                { VALID_ITEM, 1 }
            })
                      .UsesBalance(new Dictionary <string, List <object> > {
                { "clientId", new List <object> {
                      VALID_ITEM, VALID_ITEM, VALID_ITEM, ANOTHER_VALID_ITEM
                  } }
            })
                      .Build();

            sut.CreateCart("validClientId", "validPassword");

            var items = sut.ListPurchases("clientId", "validPassword");

            Assert.Collection(items,
                              elem1 => { Assert.Equal(VALID_ITEM, elem1.Item1);
                                         Assert.Equal(3, elem1.Item2); },
                              elem2 => { Assert.Equal(ANOTHER_VALID_ITEM, elem2.Item1);
                                         Assert.Equal(1, elem2.Item2); });
        }
Пример #5
0
        public void GivenAClientWithSomeBuys_WhenGettingPurchasesWithThatClient_ThenDataIsReturned()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM, ANOTHER_VALID_ITEM
            })
                      .UsesPricelist(new Dictionary <object, decimal> {
                { VALID_ITEM, 1 }, { ANOTHER_VALID_ITEM, 2 }
            })
                      .Build();

            var cartId = sut.CreateCart("clientId", "validPassword");

            sut.AddToCart(cartId, VALID_ITEM, 10);
            sut.Checkout(cartId, VALID_CARD_NUMBER, VALID_EXPIRATION_DATE, VALID_CARD_OWNER);

            cartId = sut.CreateCart("clientId", "validPassword");
            sut.AddToCart(cartId, ANOTHER_VALID_ITEM, 6);
            sut.Checkout(cartId, VALID_CARD_NUMBER, VALID_EXPIRATION_DATE, VALID_CARD_OWNER);

            var items = sut.ListPurchases("clientId", "validPassword");

            Assert.Collection(items,
                              elem1 => { Assert.Equal(VALID_ITEM, elem1.Item1);
                                         Assert.Equal(10, elem1.Item2); },
                              elem2 => { Assert.Equal(ANOTHER_VALID_ITEM, elem2.Item1);
                                         Assert.Equal(6, elem2.Item2); });
        }
Пример #6
0
        public void GivenANewTusLibrosRestAPI_WhenCreatingCartWithInvalidPassword_ThenAnExceptionIsThrown(string invalidPassword)
        {
            const string anyClientId = "abc";
            var          sut         = new TusLibrosRestAPIStubBuilder()
                                       .Build();

            var exception = Assert.Throws <ArgumentException>(() => sut.CreateCart(anyClientId, invalidPassword));

            Assert.Equal(TusLibrosRestAPI.INVALID_PASSWORD_ERROR, exception.Message);
        }
Пример #7
0
        public void GivenANewTusLibrosRestAPI_WhenCreatingCartWithValidData_ThenValidCartIdIsReturned()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 27))
                                        .Build())
                      .Build();

            var cartId = sut.CreateCart("usuarioValido", "passwordValido");

            Assert.NotEmpty(cartId);
        }
Пример #8
0
        public void GivenANewTusLibrosRestAPI_WhenCreatingCartWithInvalidLogin_ThenAnExceptionIsThrown()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(false)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 27))
                                        .Build())
                      .Build();

            var exception = Assert.Throws <ArgumentException>(() => sut.CreateCart("usuarioInválido", "passwordInválido"));

            Assert.Equal(TusLibrosRestAPI.LOGIN_IS_INVALID_ERROR, exception.Message);
        }
Пример #9
0
        public void GivenANewTusLibrosRestAPI_WhenListingAnInvalidCartId_ThenAnExceptionIsThrown(string invalidCartId)
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 27))
                                        .Build())
                      .Build();

            var exception = Assert.Throws <ArgumentException>(() => sut.ListCart(invalidCartId));

            Assert.Equal(TusLibrosRestAPI.CART_ID_IS_INVALID_ERROR, exception.Message);
        }
Пример #10
0
        public void GivenANewTusLibrosRestAPI_WhenGettingPurchasesWithEmptyPassword_ThenAnExceptionIsThrown(string emptyPassword)
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .Build();

            var exception = Assert.Throws <ArgumentException>(() => sut.ListPurchases("validClientId", emptyPassword));

            Assert.Equal(TusLibrosRestAPI.INVALID_PASSWORD_ERROR, exception.Message);
        }
Пример #11
0
        public void GivenANewTusLibrosRestAPI_WhenListingAnEmptyExpiredCart_ThenAnExceptionIsThrown()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 27))
                                        .IsExpired(true)
                                        .Build())
                      .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            var exception = Assert.Throws <ArgumentException>(() => sut.ListCart(cartId));

            Assert.Equal(TusLibrosRestAPI.CART_HAS_EXPIRED_ERROR, exception.Message);
        }
Пример #12
0
        public void GivenANewTusLibrosRestAPI_WhenAddingItemsWithInvalidCartId_ThenAnExceptionIsThrown()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .IsExpired(false)
                                        .Returns(new DateTime(2020, 4, 28))
                                        .Build())
                      .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            var exception = Assert.Throws <ArgumentException>(() => sut.AddToCart("invalid cart id", VALID_ITEM, 1));

            Assert.Equal(TusLibrosRestAPI.CART_ID_IS_INVALID_ERROR, exception.Message);
        }
Пример #13
0
        public void GivenANewTusLibrosRestAPI_WhenCheckingOutInvalidCart_ThenAnExceptionIsThrown()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                      .Build();

            var exception = Assert.Throws <ArgumentException>(() => sut.Checkout("invalidCartId", VALID_CARD_NUMBER, VALID_EXPIRATION_DATE, VALID_CARD_OWNER));

            Assert.Equal(TusLibrosRestAPI.CART_ID_IS_INVALID_ERROR, exception.Message);
        }
Пример #14
0
        public void GivenANewTusLibrosRestAPI_WhenAddingItemsWithWrongQuantity_ThenAnExceptionIsThrown(int invalidQuantity)
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .IsExpired(false)
                                        .Returns(new DateTime(2020, 4, 28))
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                      .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            var exception = Assert.Throws <ArgumentException>(() => sut.AddToCart(cartId, VALID_ITEM, invalidQuantity));

            Assert.Equal(Cart.QUANTITY_IS_INVALID_ERROR, exception.Message);
        }
Пример #15
0
        public void GivenANewTusLibrosRestAPI_WhenListingAnExpiredCartWithItems_ThenAnExceptionIsThrown()
        {
            var clockStub = new ClockStub(new DateTime(2020, 4, 28, 5, 0, 0));
            var sut       = new TusLibrosRestAPIStubBuilder()
                            .AuthenticatesWith(new AuthenticatorStubBuilder()
                                               .Returns(true)
                                               .Build())
                            .MeasuresTimeWith(clockStub)
                            .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                            .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            sut.AddToCart(cartId, VALID_ITEM, 1);
            clockStub.AddMinutes(31);

            var exception = Assert.Throws <ArgumentException>(() => sut.ListCart(cartId));

            Assert.Equal(TusLibrosRestAPI.CART_HAS_EXPIRED_ERROR, exception.Message);
        }
Пример #16
0
        public void GivenANewTusLibrosRestAPI_WhenCheckingOutEmptyCart_ThenAnExceptionIsThrown()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                      .UsesPricelist(new Dictionary <object, decimal> {
                { VALID_ITEM, 1 }
            })
                      .Build();

            var cartId    = sut.CreateCart("validClientId", "validPassword");
            var exception = Assert.Throws <ArgumentException>(() => sut.Checkout(cartId, VALID_CARD_NUMBER, VALID_EXPIRATION_DATE, VALID_CARD_OWNER));

            Assert.Equal(Cashier.CART_IS_EMPTY_ERROR, exception.Message);
        }
Пример #17
0
        public void GivenANewTusLibrosRestAPI_WhenAddingItemsWithValidCartId_ThenItemsCanBeListed()
        {
            var sut = new TusLibrosRestAPIStubBuilder()
                      .AuthenticatesWith(new AuthenticatorStubBuilder()
                                         .Returns(true)
                                         .Build())
                      .MeasuresTimeWith(new ClockStubBuilder()
                                        .Returns(new DateTime(2020, 4, 28, 12, 0, 0))
                                        .IsExpired(false)
                                        .Build())
                      .UsesCatalog(new List <object> {
                VALID_ITEM
            })
                      .Build();

            var cartId = sut.CreateCart("validClientId", "validPassword");

            sut.AddToCart(cartId, VALID_ITEM, 1);
            var itemsInCart = sut.ListCart(cartId);

            Assert.Single(itemsInCart);
            Assert.Equal(VALID_ITEM, itemsInCart[0].Item1);
            Assert.Equal(1, itemsInCart[0].Item2);
        }