public async Task ProcessFormAsync_SavesAddressIfNoMatchingFound()
        {
            var saveAddressCalled = false;
            var newAddress        = new Address
            {
                FirstName     = "testfirst",
                StreetAddress = "teststreetaddress"
            };

            var existingAddresses      = new List <Address>();
            var checkoutDataRepository = new MockCheckoutDataRepository();

            checkoutDataRepository.GetAllShippingAddressesAsyncDelegate =
                () => Task.FromResult <ICollection <Address> >(new Collection <Address>(existingAddresses));

            checkoutDataRepository.SaveShippingAddressAsyncDelegate = address =>
            {
                saveAddressCalled = true;
                Assert.AreEqual("teststreetaddress",
                                address.StreetAddress);
                return(Task.Delay(0));
            };
            var target = new ShippingAddressUserControlViewModel(checkoutDataRepository, null, null, null);

            target.Address = newAddress;

            await target.ProcessFormAsync();

            Assert.IsTrue(saveAddressCalled);
        }
        public async Task ProcessFormAsync_UsesExistingAddressIfMatchingFound()
        {
            var newAddress = new Address
            {
                FirstName     = "testfirst",
                StreetAddress = "teststreetaddress"
            };

            var existingAddresses = new List <Address>
            {
                new Address
                {
                    Id            = "testId",
                    FirstName     = "testfirst",
                    StreetAddress = "teststreetaddress"
                }
            };

            var checkoutDataRepository = new MockCheckoutDataRepository();

            checkoutDataRepository.GetAllShippingAddressesAsyncDelegate =
                () => Task.FromResult <ICollection <Address> >(new ReadOnlyCollection <Address>(existingAddresses));

            var target = new ShippingAddressUserControlViewModel(checkoutDataRepository, null, null, null);

            target.Address = newAddress;

            await target.ProcessFormAsync();

            Assert.AreEqual("testId", target.Address.Id);
        }