public void CheckSnapShot(AdventureWorksLt2012 db, int customers = 0, int custAddressesChange = 0, int addressesChange = 0)
        {
            var newSnap = new CustomerSnapShot(db);

            newSnap.NumCustomers.ShouldEqual(NumCustomers + customers, "customers wrong");
            newSnap.NumCustomerAddresses.ShouldEqual(NumCustomerAddresses + custAddressesChange, "CustomerAddresses wrong");
            newSnap.NumAddresses.ShouldEqual(NumAddresses + addressesChange, "addresses wrong");
        }
        public void CheckSnapShot(AdventureWorksLt2012 db, int customers = 0, int custAddressesChange = 0, int addressesChange = 0)
        {
            var newSnap = new CustomerSnapShot(db);

            newSnap.NumCustomers.ShouldEqual(NumCustomers + customers, "customers wrong");
            newSnap.NumCustomerAddresses.ShouldEqual(NumCustomerAddresses + custAddressesChange, "CustomerAddresses wrong");
            newSnap.NumAddresses.ShouldEqual(NumAddresses + addressesChange, "addresses wrong");
        }
        public void Test11AddressDeleteViaServiceOk()
        {
            using (var db = new AdventureWorksLt2012())
            {
                //SETUP
                var snap = new CustomerSnapShot(db);
                var service = new DeleteService(db);
                var addressUsedInTwoPlaces =
                    db.Addresses.Include(x => x.CustomerAddresses)
                        .AsNoTracking()
                        .OrderByDescending(x => x.AddressID)
                        .First(x => x.CustomerAddresses.Count == 1 && x.SalesOrderHeaders.Count == 0 && x.SalesOrderHeaders1.Count == 0);

                //ATTEMPT
                var status = service.DeleteWithRelationships<CustomerAddress>(DeleteHelpers.DeleteAssociatedAddress,
                    addressUsedInTwoPlaces.CustomerAddresses.First().CustomerID,
                    addressUsedInTwoPlaces.AddressID);

                //VERIFY
                status.IsValid.ShouldEqual(true, status.Errors);
                snap.CheckSnapShot(db, 0, -1, -1);
            }
        }
        public void Test10AddressDeleteNotPossibleViaServiceOk()
        {
            using (var db = new AdventureWorksLt2012())
            {
                //SETUP
                var snap = new CustomerSnapShot(db);
                var service = new DeleteService(db);
                var addressUsedInTwoPlaces =
                    db.Addresses.Include(x => x.CustomerAddresses)
                        .AsNoTracking()
                        .OrderByDescending(x => x.AddressID)
                        .First(x => x.CustomerAddresses.Count > 0 && x.SalesOrderHeaders.Count > 0);

                //ATTEMPT
                var status = service.DeleteWithRelationships<CustomerAddress>(DeleteHelpers.DeleteAssociatedAddress,
                    addressUsedInTwoPlaces.CustomerAddresses.First().CustomerID,
                    addressUsedInTwoPlaces.AddressID);

                //VERIFY
                status.IsValid.ShouldEqual(false, status.Errors);
                status.Errors.Count.ShouldEqual(1);
                status.Errors.First().ErrorMessage.ShouldEqual("This operation failed because another data entry uses this entry.");
                snap.CheckSnapShot(db);
            }
        }