public async Task GetAllEntities_Returns_AllEntities()
        {
            var target = new CheckoutDataRepository(SetupAddressService(), SetupPaymentMethodService(), null);

            var shippingAddresses = await target.GetAllShippingAddressesAsync();
            var bilingAddresses = await target.GetAllBillingAddressesAsync();
            var paymentMethods = await target.GetAllPaymentMethodsAsync();

            Assert.AreEqual(3, shippingAddresses.Count());
            Assert.AreEqual(2, bilingAddresses.Count());
            Assert.AreEqual(1, paymentMethods.Count());
        }
        public async Task CachedAddressesAndPaymentMethodsExpire_WhenUserChanged()
        {
            var accountService = new MockAccountService();
            var target = new CheckoutDataRepository(SetupAddressService(), SetupPaymentMethodService(), accountService);

            var paymentMethods = await target.GetAllPaymentMethodsAsync();

            Assert.AreSame(await target.GetAllPaymentMethodsAsync(), paymentMethods, "Cached data should be same.");

            accountService.RaiseUserChanged(null, null);

            Assert.AreNotSame(await target.GetAllPaymentMethodsAsync(), paymentMethods);
        }
        public async Task GetAllPaymentMethodsAsync_ReturnsEmptyCollection_WhenServiceReturnsNull()
        {
            var paymentMethodService = new MockPaymentMethodService();
            paymentMethodService.PaymentMethods = null;

            var target = new CheckoutDataRepository(null, paymentMethodService, null);

            var paymentMethods = await target.GetAllPaymentMethodsAsync();

            Assert.IsNotNull(paymentMethods);
            Assert.AreEqual(0, paymentMethods.Count);
        }