Example #1
0
        public void ProcessResponseSuccessful()
        {
            var random  = new Random();
            var payment = new PayPalPaymentConfirmation()
            {
                Application = new Application()
                {
                    Identifier = Guid.NewGuid(),
                },
                User = new User()
                {
                    Identifier = Guid.NewGuid(),
                },
                TransactionId = random.Next().ToString(),
                Response      = PayPalResponseValue,
            };

            payment = PaymentCore.ProcessResponse(payment);

            var table = new AzureTable <PayPalPaymentConfirmationRow>(ServerConfiguration.Default);
            var row   = table.QueryByPartition(payment.Application.Identifier.ToString()).First();

            Assert.AreEqual <string>(payment.FirstName, row.FirstName);
            Assert.AreEqual <string>(payment.LastName, row.LastName);
            Assert.AreEqual <string>(payment.PaymentStatusFromPayPal, row.PaymentStatusFromPayPal);
            Assert.AreEqual <string>(payment.Email, row.Email);
            Assert.AreEqual <string>(payment.Gross, row.Gross);
            Assert.AreEqual <string>(payment.CurrencyCode, row.CurrencyCode);
            Assert.AreEqual <string>(payment.Custom, row.Custom);
            Assert.IsTrue(payment.Successful);
            Assert.IsTrue(row.Successful);
        }
Example #2
0
        public bool ValidatePurchase(PayPalPaymentConfirmation payment)
        {
            Contract.Requires <ArgumentNullException>(null != payment);

            Contract.Requires <ArgumentException>(!string.IsNullOrWhiteSpace(payment.TransactionId));

            payment.Successful = false;

            var url   = ServerConfiguration.PayPalPaymentDataTransferUrl;
            var query = "cmd=_notify-synch&tx={0}&at={1}".FormatWithCulture(payment.TransactionId, ServerConfiguration.PayPalPaymentDataTransfer);
            var req   = (HttpWebRequest)WebRequest.Create(url);

            // Set values for the request back
            req.Method        = "POST";
            req.ContentType   = "application/x-www-form-urlencoded";
            req.ContentLength = query.Length;

            // Write the request back IPN strings
            using (var output = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII))
            {
                output.Write(query);

                // Do the request to PayPal and get the response
                var input = new StreamReader(req.GetResponse().GetResponseStream());

                payment.Response = input.ReadToEnd();

                payment = PaymentCore.ProcessResponse(payment);
            }

            return(payment.Successful);
        }
Example #3
0
        public static PayPalPaymentConfirmation ProcessResponse(PayPalPaymentConfirmation payment)
        {
            Contract.Requires <ArgumentNullException>(null != payment);

            if (string.IsNullOrWhiteSpace(payment.Response))
            {
                log.Log("Empty response returned from PayPal.");
            }
            else if (payment.Response.StartsWith("SUCCESS", StringComparison.InvariantCultureIgnoreCase))
            {
                payment.Successful = true;

                payment = PaymentCore.ProcessSuccessfulResponse(payment);

                var preferenceTable = new AzureTable <UserPreferenceRow>(ServerConfiguration.Default);
                var preference      = preferenceTable.QueryBy(payment.Application.Identifier.ToString(), payment.User.Identifier.ToString());

                preference = preference ?? new UserPreferenceRow(payment.Application.Identifier, payment.User.Identifier);

                preference.MaxiumAllowedApplications = preference.MaxiumAllowedApplications.HasValue ? preference.MaxiumAllowedApplications + 1 : 1;
                preferenceTable.AddOrUpdateEntity(preference);
            }
            else
            {
                payment.Successful = false;

                log.Log("Error Accepting payment response.");
            }

            var table = new AzureTable <PayPalPaymentConfirmationRow>(ServerConfiguration.Default);

            table.AddEntity(payment.Convert());

            return(payment);
        }
Example #4
0
        public void ProcessResponseInvalid()
        {
            var random  = new Random();
            var payment = new PayPalPaymentConfirmation()
            {
                Application = new Application()
                {
                    Identifier = Guid.NewGuid(),
                },
                User = new User()
                {
                    Identifier = Guid.NewGuid(),
                },
                TransactionId = random.Next().ToString(),
                Response      = StringHelper.ValidString(),
            };

            payment = PaymentCore.ProcessResponse(payment);

            var table = new AzureTable <PayPalPaymentConfirmationRow>(ServerConfiguration.Default);
            var row   = table.QueryByPartition(payment.Application.Identifier.ToString()).First();

            Assert.IsFalse(payment.Successful);
            Assert.IsFalse(row.Successful);
        }
Example #5
0
        public void App()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = Application.Current;

            payment.Application = data;
            Assert.AreEqual <Application>(data, payment.Application);
        }
Example #6
0
        public void ResidenceCountry()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.ResidenceCountry = data;
            Assert.AreEqual <string>(data, payment.ResidenceCountry);
        }
Example #7
0
        public void ItemNumber()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.ItemNumber = data;
            Assert.AreEqual <string>(data, payment.ItemNumber);
        }
Example #8
0
        public void Successful()
        {
            var payment = new PayPalPaymentConfirmation();

            Assert.IsFalse(payment.Successful);
            payment.Successful = true;
            Assert.IsTrue(payment.Successful);
        }
Example #9
0
        public void AddressState()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.AddressState = data;
            Assert.AreEqual <string>(data, payment.AddressState);
        }
Example #10
0
        public void ReceiverEmail()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.ReceiverEmail = data;
            Assert.AreEqual <string>(data, payment.ReceiverEmail);
        }
Example #11
0
        public void Quantity()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.Quantity = data;
            Assert.AreEqual <string>(data, payment.Quantity);
        }
Example #12
0
        public void TransactionId()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.TransactionId = data;
            Assert.AreEqual <string>(data, payment.TransactionId);
        }
Example #13
0
        public void ShippingMethod()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.ShippingMethod = data;
            Assert.AreEqual <string>(data, payment.ShippingMethod);
        }
Example #14
0
        public void User()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = new User();

            payment.User = data;
            Assert.AreEqual <User>(data, payment.User);
        }
Example #15
0
        public void CurrencyCode()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.CurrencyCode = data;
            Assert.AreEqual <string>(data, payment.CurrencyCode);
        }
Example #16
0
        public void Response()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.Response = data;
            Assert.AreEqual <string>(data, payment.Response);
        }
Example #17
0
        public void Amount()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.Amount = data;
            Assert.AreEqual <string>(data, payment.Amount);
        }
Example #18
0
        public void PaymentStatus()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.PaymentStatus = data;
            Assert.AreEqual <string>(data, payment.PaymentStatus);
        }
Example #19
0
        public void ProtectionEligibility()
        {
            var payment = new PayPalPaymentConfirmation();
            var data    = StringHelper.ValidString();

            payment.ProtectionEligibility = data;
            Assert.AreEqual <string>(data, payment.ProtectionEligibility);
        }
Example #20
0
        public void ProcessSuccessfulResponseInvalid()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                Response = StringHelper.NullEmptyWhiteSpace(),
            };

            PaymentCore.ProcessSuccessfulResponse(payment);
        }
Example #21
0
        public void Valid()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                TransactionId = StringHelper.ValidString(),
            };

            var validator = new Validator <PayPalPaymentConfirmation>();

            Assert.IsTrue(validator.IsValid(payment));
        }
Example #22
0
        public void InvalidTransactionIdInvalid()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                TransactionId = StringHelper.NullEmptyWhiteSpace(),
            };

            var validator = new Validator <PayPalPaymentConfirmation>();

            Assert.IsFalse(validator.IsValid(payment));
        }
Example #23
0
        public void ValidatePurchaseTransactionIdInvalid()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                TransactionId = StringHelper.NullEmptyWhiteSpace(),
            };

            var core = new PaymentCore();

            core.ValidatePurchase(payment);
        }
Example #24
0
        public void ProcessSuccessfulResponseFull()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                Response = PayPalResponseFull,
            };

            payment = PaymentCore.ProcessSuccessfulResponse(payment);
            Assert.AreEqual <string>("0.01", payment.MCGross);
            Assert.AreEqual <string>("Eligible", payment.ProtectionEligibility);
            Assert.AreEqual <string>("confirmed", payment.AddressStatus);
            Assert.AreEqual <string>("LHXGFUDRHPPEL", payment.PayerId);
            Assert.AreEqual <string>("0.00", payment.Tax);
            Assert.AreEqual <string>("546+beatty%0D%0A309", payment.AddressStreet);
            Assert.AreEqual <string>("18%3A49%3A02+Jan+30%2C+2012+PST", payment.PaymentDate);
            Assert.AreEqual <string>("Completed", payment.PaymentStatus);
            Assert.AreEqual <string>("windows-1252", payment.Charset);
            Assert.AreEqual <string>("v6b2l3", payment.AddressZip);
            Assert.AreEqual <string>("Jeffrey", payment.FirstName);
            Assert.AreEqual <string>("0.01", payment.MCFee);
            Assert.AreEqual <string>("CA", payment.AddressCountryCode);
            Assert.AreEqual <string>("Jeffrey+King", payment.AddressName);
            Assert.AreEqual <string>(null, payment.PaymentFee);
            Assert.AreEqual <string>(null, payment.Custom);
            Assert.AreEqual <string>(null, payment.Gross);
            Assert.AreEqual <string>("unverified", payment.PayerStatus);
            Assert.AreEqual <string>("1", payment.Quantity);
            Assert.AreEqual <string>("jef%40agilebusinesscloud.com", payment.Business);
            Assert.AreEqual <string>("Canada", payment.AddressCountry);
            Assert.AreEqual <string>("vancouver", payment.AddressCity);
            Assert.AreEqual <string>("jamieking80%40gmail.com", payment.Email);
            Assert.AreEqual <string>("5JW20211VT0352427", payment.TXNId);
            Assert.AreEqual <string>("instant", payment.PaymentType);
            Assert.AreEqual <string>("41305525", payment.BTNId);
            Assert.AreEqual <string>("King", payment.LastName);
            Assert.AreEqual <string>("British+Columbia", payment.AddressState);
            Assert.AreEqual <string>("jef%40agilebusinesscloud.com", payment.ReceiverEmail);
            Assert.AreEqual <string>("0.00", payment.ShippingDiscount);
            Assert.AreEqual <string>("0.00", payment.InsuranceAmount);
            Assert.AreEqual <string>("6ZLN7RZS446C2", payment.ReceiverId);
            Assert.AreEqual <string>("web_accept", payment.TXNType);
            Assert.AreEqual <string>("One+Cent", payment.ItemName);
            Assert.AreEqual <string>("0.00", payment.Discount);
            Assert.AreEqual <string>("CAD", payment.CurrencyCode);
            Assert.AreEqual <string>("0002", payment.ItemNumber);
            Assert.AreEqual <string>("CA", payment.ResidenceCountry);
            Assert.AreEqual <string>("Default", payment.ShippingMethod);
            Assert.AreEqual <string>("0.00", payment.HandlingAmount);
            Assert.AreEqual <string>("One+Cent", payment.TransactionSubject);
            Assert.AreEqual <string>("0.00", payment.Shipping);
        }
        public ActionResult PurchaseComplete(string tx, string st, string amt, string cc)
        {
            using (new PerformanceMonitor())
            {
                if (string.IsNullOrWhiteSpace(tx))
                {
                    return(this.RedirectToAction("Index", "Home"));
                }
                else
                {
                    var payment = new PayPalPaymentConfirmation()
                    {
                        TransactionId = tx,
                        PaymentStatus = st,
                        Amount        = amt,
                        CurrencyCode  = cc,
                        Application   = Abc.Services.Contracts.Application.Current,
                        User          = this.User.Identity.Data(),
                    };

                    try
                    {
                        ViewBag.CanCreateAnApplication = this.CanCreateAnApplication();

                        var validator = new Validator <PayPalPaymentConfirmation>();
                        if (!validator.IsValid(payment))
                        {
                            var messages = validator.AllMessages(payment);
                            log.Log(messages);
                            return(this.View(messages));
                        }
                        else
                        {
                            paymentCore.ValidatePurchase(payment);

                            ViewBag.CanCreateAnApplication = this.CanCreateAnApplication();

                            return(View(payment));
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Log(ex, EventTypes.Error, (int)Fault.Unknown);
                        return(this.View(ex.Message));
                    }
                }
            }
        }
Example #26
0
        public void ProcessSuccessfulResponse()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                Response = PayPalResponseValue,
            };

            payment = PaymentCore.ProcessSuccessfulResponse(payment);

            Assert.AreEqual <string>("Jane+Doe", payment.FirstName);
            Assert.AreEqual <string>("Smith", payment.LastName);
            Assert.AreEqual <string>("Completed", payment.PaymentStatus);
            Assert.AreEqual <string>("*****@*****.**", payment.Email);
            Assert.AreEqual <string>("3.99", payment.Gross);
            Assert.AreEqual <string>("USD", payment.CurrencyCode);
            Assert.AreEqual <string>("For+the+purchase+of+the+rare+book+Green+Eggs+%26+Ham", payment.Custom);
        }
Example #27
0
        public void ProcessResponseSuccessfulApplicationAdded()
        {
            var random  = new Random();
            var payment = new PayPalPaymentConfirmation()
            {
                Application = new Application()
                {
                    Identifier = Guid.NewGuid(),
                },
                User = new User()
                {
                    Identifier = Guid.NewGuid(),
                },
                TransactionId = random.Next().ToString(),
                Response      = PayPalResponseValue,
            };

            payment = PaymentCore.ProcessResponse(payment);

            var table = new AzureTable <UserPreferenceRow>(ServerConfiguration.Default);
            var row   = table.QueryBy(payment.Application.Identifier.ToString(), payment.User.Identifier.ToString());

            Assert.AreEqual <int>(1, row.MaxiumAllowedApplications.Value);
        }
Example #28
0
        public static PayPalPaymentConfirmation ProcessSuccessfulResponse(PayPalPaymentConfirmation payment)
        {
            Contract.Requires <ArgumentNullException>(null != payment);
            Contract.Requires <ArgumentException>(!string.IsNullOrWhiteSpace(payment.Response));

            foreach (Match match in RegexStatement.PayPalResponse.Matches(payment.Response))
            {
                var value = match.Groups["value"].Value;
                switch (match.Groups["key"].Value)
                {
                case "first_name":
                    payment.FirstName = value;
                    continue;

                case "last_name":
                    payment.LastName = value;
                    continue;

                case "payment_status":
                    payment.PaymentStatus = value;
                    continue;

                case "payer_email":
                    payment.Email = value;
                    continue;

                case "payment_gross":
                    payment.Gross = value;
                    continue;

                case "mc_currency":
                    payment.CurrencyCode = value;
                    continue;

                case "custom":
                    payment.Custom = value;
                    continue;

                case "mc_gross":
                    payment.MCGross = value;
                    continue;

                case "protection_eligibility":
                    payment.ProtectionEligibility = value;
                    continue;

                case "address_status":
                    payment.AddressStatus = value;
                    continue;

                case "payer_id":
                    payment.PayerId = value;
                    continue;

                case "tax":
                    payment.Tax = value;
                    continue;

                case "address_street":
                    payment.AddressStreet = value;
                    continue;

                case "payment_date":
                    payment.PaymentDate = value;
                    continue;

                case "charset":
                    payment.Charset = value;
                    continue;

                case "address_zip":
                    payment.AddressZip = value;
                    continue;

                case "mc_fee":
                    payment.MCFee = value;
                    continue;

                case "address_country_code":
                    payment.AddressCountryCode = value;
                    continue;

                case "address_name":
                    payment.AddressName = value;
                    continue;

                case "payer_status":
                    payment.PayerStatus = value;
                    continue;

                case "business":
                    payment.Business = value;
                    continue;

                case "address_country":
                    payment.AddressCountry = value;
                    continue;

                case "address_city":
                    payment.AddressCity = value;
                    continue;

                case "quantity":
                    payment.Quantity = value;
                    continue;

                case "txn_id":
                    payment.TXNId = value;
                    continue;

                case "payment_type":
                    payment.PaymentType = value;
                    continue;

                case "btn_id":
                    payment.BTNId = value;
                    continue;

                case "address_state":
                    payment.AddressState = value;
                    continue;

                case "receiver_email":
                    payment.ReceiverEmail = value;
                    continue;

                case "payment_fee":
                    payment.PaymentFee = value;
                    continue;

                case "shipping_discount":
                    payment.ShippingDiscount = value;
                    continue;

                case "insurance_amount":
                    payment.InsuranceAmount = value;
                    continue;

                case "receiver_id":
                    payment.ReceiverId = value;
                    continue;

                case "txn_type":
                    payment.TXNType = value;
                    continue;

                case "item_name":
                    payment.ItemName = value;
                    continue;

                case "discount":
                    payment.Discount = value;
                    continue;

                case "item_number":
                    payment.ItemNumber = value;
                    continue;

                case "residence_country":
                    payment.ResidenceCountry = value;
                    continue;

                case "shipping_method":
                    payment.ShippingMethod = value;
                    continue;

                case "handling_amount":
                    payment.HandlingAmount = value;
                    continue;

                case "transaction_subject":
                    payment.TransactionSubject = value;
                    continue;

                case "shipping":
                    payment.Shipping = value;
                    continue;

                default:
                    log.Log("Unknown response from PayPal: '{0}'; '{1}'.".FormatWithCulture(match.Groups["key"].Value, value));
                    continue;
                }
            }

            return(payment);
        }
Example #29
0
        public void Convert()
        {
            var payment = new PayPalPaymentConfirmation()
            {
                Amount                  = StringHelper.ValidString(),
                Application             = Abc.Services.Contracts.Application.Current,
                Currency                = StringHelper.ValidString(),
                CurrencyCode            = StringHelper.ValidString(),
                Custom                  = StringHelper.ValidString(),
                Email                   = StringHelper.ValidString(),
                FirstName               = StringHelper.ValidString(),
                Gross                   = StringHelper.ValidString(),
                LastName                = StringHelper.ValidString(),
                PaymentStatus           = StringHelper.ValidString(),
                PaymentStatusFromPayPal = StringHelper.ValidString(),
                Successful              = false,
                TransactionId           = StringHelper.ValidString(),
                Response                = StringHelper.ValidString(),
                MCGross                 = StringHelper.ValidString(),
                ProtectionEligibility   = StringHelper.ValidString(),
                AddressStatus           = StringHelper.ValidString(),
                PayerId                 = StringHelper.ValidString(),
                Tax                = StringHelper.ValidString(),
                AddressStreet      = StringHelper.ValidString(),
                PaymentDate        = StringHelper.ValidString(),
                Charset            = StringHelper.ValidString(),
                AddressZip         = StringHelper.ValidString(),
                MCFee              = StringHelper.ValidString(),
                AddressCountryCode = StringHelper.ValidString(),
                AddressName        = StringHelper.ValidString(),
                PayerStatus        = StringHelper.ValidString(),
                Business           = StringHelper.ValidString(),
                AddressCountry     = StringHelper.ValidString(),
                Quantity           = StringHelper.ValidString(),
                TXNId              = StringHelper.ValidString(),
                PaymentType        = StringHelper.ValidString(),
                BTNId              = StringHelper.ValidString(),
                AddressState       = StringHelper.ValidString(),
                ReceiverEmail      = StringHelper.ValidString(),
                Shipping           = StringHelper.ValidString(),
                PaymentFee         = StringHelper.ValidString(),
                ShippingDiscount   = StringHelper.ValidString(),
                InsuranceAmount    = StringHelper.ValidString(),
                ReceiverId         = StringHelper.ValidString(),
                TXNType            = StringHelper.ValidString(),
                ItemName           = StringHelper.ValidString(),
                Discount           = StringHelper.ValidString(),
                ItemNumber         = StringHelper.ValidString(),
                ResidenceCountry   = StringHelper.ValidString(),
                ShippingMethod     = StringHelper.ValidString(),
                HandlingAmount     = StringHelper.ValidString(),
                TransactionSubject = StringHelper.ValidString(),
                User               = new User()
                {
                    Identifier = Guid.NewGuid(),
                },
            };

            var row = payment.Convert();

            Assert.AreEqual <string>(payment.Amount, row.Amount);
            Assert.AreEqual <string>(payment.Currency, row.Currency);
            Assert.AreEqual <string>(payment.CurrencyCode, row.CurrencyCode);
            Assert.AreEqual <string>(payment.Custom, row.Custom);
            Assert.AreEqual <string>(payment.Email, row.Email);
            Assert.AreEqual <string>(payment.FirstName, row.FirstName);
            Assert.AreEqual <string>(payment.Gross, row.Gross);
            Assert.AreEqual <string>(payment.LastName, row.LastName);
            Assert.AreEqual <string>(payment.PaymentStatus, row.PaymentStatus);
            Assert.AreEqual <string>(payment.PaymentStatusFromPayPal, row.PaymentStatusFromPayPal);
            Assert.AreEqual <string>(payment.TransactionId, row.TransactionId);
            Assert.AreEqual <string>(payment.Response, row.Response);
            Assert.AreEqual <string>(payment.MCGross, row.MCGross);
            Assert.AreEqual <string>(payment.ProtectionEligibility, row.ProtectionEligibility);
            Assert.AreEqual <string>(payment.AddressStatus, row.AddressStatus);
            Assert.AreEqual <string>(payment.PayerId, row.PayerId);
            Assert.AreEqual <string>(payment.Tax, row.Tax);
            Assert.AreEqual <string>(payment.AddressStreet, row.AddressStreet);
            Assert.AreEqual <string>(payment.PaymentDate, row.PaymentDate);
            Assert.AreEqual <string>(payment.Charset, row.Charset);
            Assert.AreEqual <string>(payment.AddressZip, row.AddressZip);
            Assert.AreEqual <string>(payment.MCFee, row.MCFee);
            Assert.AreEqual <string>(payment.AddressCountryCode, row.AddressCountryCode);
            Assert.AreEqual <string>(payment.AddressName, row.AddressName);
            Assert.AreEqual <string>(payment.PayerStatus, row.PayerStatus);
            Assert.AreEqual <string>(payment.Business, row.Business);
            Assert.AreEqual <string>(payment.AddressCountry, row.AddressCountry);
            Assert.AreEqual <string>(payment.Quantity, row.Quantity);
            Assert.AreEqual <string>(payment.TXNId, row.TXNId);
            Assert.AreEqual <string>(payment.PaymentType, row.PaymentType);
            Assert.AreEqual <string>(payment.BTNId, row.BTNId);
            Assert.AreEqual <string>(payment.AddressState, row.AddressState);
            Assert.AreEqual <string>(payment.ReceiverEmail, row.ReceiverEmail);
            Assert.AreEqual <string>(payment.Shipping, row.Shipping);
            Assert.AreEqual <string>(payment.PaymentFee, row.PaymentFee);
            Assert.AreEqual <string>(payment.ShippingDiscount, row.ShippingDiscount);
            Assert.AreEqual <string>(payment.InsuranceAmount, row.InsuranceAmount);
            Assert.AreEqual <string>(payment.ReceiverId, row.ReceiverId);
            Assert.AreEqual <string>(payment.TXNType, row.TXNType);
            Assert.AreEqual <string>(payment.ItemName, row.ItemName);
            Assert.AreEqual <string>(payment.Discount, row.Discount);
            Assert.AreEqual <string>(payment.ItemNumber, row.ItemNumber);
            Assert.AreEqual <string>(payment.ResidenceCountry, row.ResidenceCountry);
            Assert.AreEqual <string>(payment.ShippingMethod, row.ShippingMethod);
            Assert.AreEqual <string>(payment.HandlingAmount, row.HandlingAmount);
            Assert.AreEqual <string>(payment.TransactionSubject, row.TransactionSubject);
            Assert.AreEqual <bool>(payment.Successful, row.Successful);
            Assert.AreEqual <Guid>(payment.User.Identifier, row.UserId);
            Assert.AreEqual <Guid>(payment.Application.Identifier, row.ApplicationId);
        }