public void TestCreateRecurringGiftWholeLottaFailures() { var recurringGiftDto = new RecurringGiftDto { StripeTokenId = "tok_123", PlanAmount = 123.45M, PlanInterval = PlanInterval.Weekly, Program = "987", StartDate = DateTime.Parse("1973-10-15") }; var contactDonor = new ContactDonor { DonorId = 678, ProcessorId = "cus_123", ContactId = 909090 }; var defaultSource = new SourceData { id = "card_123", brand = "Visa", last4 = "5150" }; var stripeCustomer = new StripeCustomer { brand = "visa", last4 = "9876", id = "cus_123", default_source = "card_123", sources = new Sources { data = new List<SourceData> { new SourceData { id = "bank_123", bank_last4 = "5678" }, defaultSource } } }; var stripePlan = new StripePlan { Id = "plan_123" }; const int donorAccountId = 999; var stripeSubscription = new StripeSubscription { Id = "sub_123" }; var contact = new MyContact() { Congregation_ID = 1 }; _paymentService.Setup(mocked => mocked.CreateCustomer(recurringGiftDto.StripeTokenId, "678, Recurring Gift Subscription")).Returns(stripeCustomer); _paymentService.Setup(mocked => mocked.CreatePlan(recurringGiftDto, contactDonor)).Returns(stripePlan); _mpDonorService.Setup( mocked => mocked.CreateDonorAccount(defaultSource.brand, It.IsAny<string>(), defaultSource.last4, null, contactDonor.DonorId, defaultSource.id, stripeCustomer.id)).Returns(donorAccountId); _paymentService.Setup(mocked => mocked.CreateSubscription(stripePlan.Id, stripeCustomer.id, recurringGiftDto.StartDate)).Returns(stripeSubscription); _mpContactService.Setup(mocked => mocked.GetContactById(contactDonor.ContactId)).Returns(contact); var exception = new ApplicationException("Do it to it Lars"); _mpDonorService.Setup( mocked => mocked.CreateRecurringGiftRecord("auth", contactDonor.DonorId, donorAccountId, EnumMemberSerializationUtils.ToEnumString(recurringGiftDto.PlanInterval), recurringGiftDto.PlanAmount, recurringGiftDto.StartDate, recurringGiftDto.Program, stripeSubscription.Id, contact.Congregation_ID.Value)).Throws(exception); _paymentService.Setup(mocked => mocked.CancelSubscription(stripeCustomer.id, stripeSubscription.Id)).Throws(new Exception()); _paymentService.Setup(mocked => mocked.CancelPlan(stripePlan.Id)).Throws(new Exception()); _paymentService.Setup(mocked => mocked.DeleteCustomer(stripeCustomer.id)).Throws(new Exception()); _mpDonorService.Setup(mocked => mocked.DeleteDonorAccount("auth", donorAccountId)).Throws(new Exception()); try { _fixture.CreateRecurringGift("auth", recurringGiftDto, contactDonor); Assert.Fail("Expected exception was not thrown"); } catch (ApplicationException e) { Assert.AreSame(exception, e); } _paymentService.VerifyAll(); _mpDonorService.VerifyAll(); _mpContactService.VerifyAll(); }
public void TestCreateRecurringGiftNoCongregation() { var recurringGiftDto = new RecurringGiftDto { StripeTokenId = "tok_123", PlanAmount = 123.45M, PlanInterval = PlanInterval.Weekly, Program = "987", StartDate = DateTime.Parse("1973-10-15") }; var contactDonor = new ContactDonor { DonorId = 678, ProcessorId = "cus_123" }; var stripeCustomer = new StripeCustomer { brand = "visa", last4 = "9876", id = "card_123" }; var stripePlan = new StripePlan { Id = "plan_123" }; const int donorAccountId = 999; var stripeSubscription = new StripeSubscription { Id = "sub_123" }; var contact = new MyContact() { Congregation_ID = null }; const int recurringGiftId = 888; _paymentService.Setup(mocked => mocked.AddSourceToCustomer(contactDonor.ProcessorId, recurringGiftDto.StripeTokenId)).Returns(stripeCustomer); _paymentService.Setup(mocked => mocked.CreatePlan(recurringGiftDto, contactDonor)).Returns(stripePlan); _mpDonorService.Setup( mocked => mocked.CreateDonorAccount(stripeCustomer.brand, It.IsAny<string>(), stripeCustomer.last4, null, contactDonor.DonorId, stripeCustomer.id, contactDonor.ProcessorId)).Returns(donorAccountId); _paymentService.Setup(mocked => mocked.CreateSubscription(stripePlan.Id, contactDonor.ProcessorId, recurringGiftDto.StartDate)).Returns(stripeSubscription); _mpContactService.Setup(mocked => mocked.GetContactById(contactDonor.DonorId)).Returns(contact); _mpDonorService.Setup( mocked => mocked.CreateRecurringGiftRecord("auth", contactDonor.DonorId, donorAccountId, EnumMemberSerializationUtils.ToEnumString(recurringGiftDto.PlanInterval), recurringGiftDto.PlanAmount, recurringGiftDto.StartDate, recurringGiftDto.Program, stripeSubscription.Id, NotSiteSpecificCongregation)).Returns(recurringGiftId); var response = _fixture.CreateRecurringGift("auth", recurringGiftDto, contactDonor); _paymentService.VerifyAll(); _mpDonorService.VerifyAll(); _mpContactService.VerifyAll(); Assert.AreEqual(recurringGiftId, response); }
public void ShouldUpdateExistingDonorForExistingContact() { var donor = new ContactDonor { ContactId = 12345, DonorId = 456, }; var stripeCust = new StripeCustomer { id = "856", default_source = "123", }; _paymentService.Setup(mocked => mocked.CreateCustomer("stripe_token", null)).Returns(stripeCust); _mpDonorService.Setup(mocked => mocked.UpdatePaymentProcessorCustomerId(456, stripeCust.id)).Returns(456); _paymentService.Setup(mocked => mocked.UpdateCustomerDescription(stripeCust.id, 456)).Returns("456"); var response = _fixture.CreateOrUpdateContactDonor(donor, EncryptedKey, "*****@*****.**", "stripe_token", DateTime.Now); _mpDonorService.VerifyAll(); _mpContactService.VerifyAll(); _paymentService.VerifyAll(); Assert.AreEqual(12345, response.ContactId); Assert.AreEqual(456, response.DonorId); Assert.AreEqual(stripeCust.id, response.ProcessorId); }
public void TestCreateRecurringGift() { var recurringGiftDto = new RecurringGiftDto { StripeTokenId = "tok_123", PlanAmount = 123.45M, PlanInterval = PlanInterval.Weekly, Program = "987", StartDate = DateTime.Parse("1973-10-15") }; var contactDonor = new ContactDonor { DonorId = 678, ProcessorId = "cus_123", ContactId = 909090 }; var defaultSource = new SourceData { id = "card_123", brand = "Visa", last4 = "5150" }; var stripeCustomer = new StripeCustomer { brand = "visa", last4 = "9876", id = "cus_123", default_source = "card_123", sources = new Sources { data = new List<SourceData> { new SourceData { id = "bank_123", bank_last4 = "5678" }, defaultSource } } }; var stripePlan = new StripePlan { Id = "plan_123" }; const int donorAccountId = 999; var stripeSubscription = new StripeSubscription { Id = "sub_123" }; var contact = new MyContact() { Congregation_ID = 1 }; const int recurringGiftId = 888; var recurringGift = new CreateDonationDistDto { ProgramName = "Crossroads", Amount = 123.45M, Recurrence = "12th of the month", DonorAccountId = 90 }; _paymentService.Setup(mocked => mocked.CreateCustomer(recurringGiftDto.StripeTokenId, "678, Recurring Gift Subscription")).Returns(stripeCustomer); _paymentService.Setup(mocked => mocked.CreatePlan(recurringGiftDto, contactDonor)).Returns(stripePlan); _mpDonorService.Setup( mocked => mocked.CreateDonorAccount(defaultSource.brand, It.IsAny<string>(), defaultSource.last4, null, contactDonor.DonorId, defaultSource.id, stripeCustomer.id)).Returns(donorAccountId); _paymentService.Setup(mocked => mocked.CreateSubscription(stripePlan.Id, stripeCustomer.id, recurringGiftDto.StartDate)).Returns(stripeSubscription); _mpContactService.Setup(mocked => mocked.GetContactById(contactDonor.ContactId)).Returns(contact); _mpDonorService.Setup( mocked => mocked.CreateRecurringGiftRecord("auth", contactDonor.DonorId, donorAccountId, EnumMemberSerializationUtils.ToEnumString(recurringGiftDto.PlanInterval), recurringGiftDto.PlanAmount, recurringGiftDto.StartDate, recurringGiftDto.Program, stripeSubscription.Id, contact.Congregation_ID.Value)).Returns(recurringGiftId); _mpDonorService.Setup(mocked => mocked.GetRecurringGiftById("auth", recurringGiftId)).Returns(recurringGift); _mpDonorService.Setup(mocked => mocked.GetDonorAccountPymtType(recurringGift.DonorAccountId.Value)).Returns(1); _mpDonorService.Setup( mocked => mocked.SendEmail(RecurringGiftSetupEmailTemplateId, recurringGift.DonorId, (int)(123.45M/100), "Check", It.IsAny<DateTime>(), "Crossroads", string.Empty, "12th of the month")); var response = _fixture.CreateRecurringGift("auth", recurringGiftDto, contactDonor); _paymentService.VerifyAll(); _mpDonorService.VerifyAll(); Assert.AreEqual(recurringGiftId, response); }
public void ShouldCreateNewDonorForExistingContact() { var donor = new ContactDonor { ContactId = 12345, DonorId = 0, }; var stripeCust = new StripeCustomer { id = "856", default_source = "123", }; _paymentService.Setup(mocked => mocked.CreateCustomer("stripe_token", null)).Returns(stripeCust); _mpDonorService.Setup(mocked => mocked.CreateDonorRecord(12345, stripeCust.id, It.IsAny<DateTime>(), StatementFrequencyNever, StatementTypeIndividual, StatementMethodNone, null)).Returns(456); _paymentService.Setup(mocked => mocked.UpdateCustomerDescription(stripeCust.id, 456)).Returns("456"); var response = _fixture.CreateOrUpdateContactDonor(donor, EncryptedKey, "*****@*****.**", "stripe_token", DateTime.Now); _mpDonorService.VerifyAll(); _mpContactService.VerifyAll(); _paymentService.VerifyAll(); Assert.AreEqual(12345, response.ContactId); Assert.AreEqual(456, response.DonorId); Assert.AreEqual(stripeCust.id, response.ProcessorId); }
public void ShouldCreateNewDonorForExistingRegisteredContact() { var donor = new ContactDonor { ContactId = 12345, DonorId = 0, RegisteredUser = true, Email = "*****@*****.**" }; var stripeCust = new StripeCustomer { id = "856", default_source = "123", }; _paymentService.Setup(mocked => mocked.CreateCustomer("stripe_token", null)).Returns(stripeCust); _mpDonorService.Setup(mocked => mocked.CreateDonorRecord(12345, stripeCust.id, It.IsAny<DateTime>(), 1, 1, 2, null)).Returns(456); _mpDonorService.Setup(mocked => mocked.GetEmailViaDonorId(456)).Returns(donor); _paymentService.Setup(mocked => mocked.UpdateCustomerDescription(stripeCust.id, 456)).Returns("456"); var response = _fixture.CreateOrUpdateContactDonor(donor, EncryptedKey, "*****@*****.**", "stripe_token", DateTime.Now); _mpDonorService.VerifyAll(); _mpContactService.VerifyAll(); _paymentService.VerifyAll(); Assert.AreEqual(12345, response.ContactId); Assert.AreEqual(456, response.DonorId); Assert.AreEqual(stripeCust.id, response.ProcessorId); Assert.AreEqual(donor.RegisteredUser, response.RegisteredUser); }
public void TestGetCustomer() { var customer = new StripeCustomer(); var response = new Mock<IRestResponse<StripeCustomer>>(); response.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); response.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); response.SetupGet(mocked => mocked.Data).Returns(customer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(response.Object); var result = _fixture.GetCustomer("cus_123"); _restClient.Verify(mocked => mocked.Execute<StripeCustomer>( It.Is<RestRequest>(o => o.Method == Method.GET && o.Resource.Equals("/customers/cus_123") ))); _restClient.VerifyAll(); response.VerifyAll(); Assert.IsNotNull(result); Assert.AreSame(customer, result); }
public void ShouldCreateNewContactAndDonor() { var stripeCust = new StripeCustomer { id = "856", default_source = "123", }; _mpContactService.Setup(mocked => mocked.CreateContactForGuestGiver("*****@*****.**", GuestGiverDisplayName)).Returns(123); _paymentService.Setup(mocked => mocked.CreateCustomer("stripe_token", null)).Returns(stripeCust); _mpDonorService.Setup(mocked => mocked.CreateDonorRecord(123, stripeCust.id, It.IsAny<DateTime>(), StatementFrequencyNever, StatementTypeIndividual, StatementMethodNone, null)).Returns(456); _paymentService.Setup(mocked => mocked.UpdateCustomerDescription(stripeCust.id, 456)).Returns("456"); var response = _fixture.CreateOrUpdateContactDonor(null, EncryptedKey, "*****@*****.**", "stripe_token", DateTime.Now); _mpDonorService.VerifyAll(); _mpContactService.VerifyAll(); _paymentService.VerifyAll(); Assert.AreEqual(123, response.ContactId); Assert.AreEqual(456, response.DonorId); Assert.AreEqual(stripeCust.id, response.ProcessorId); Assert.IsFalse(response.RegisteredUser); }
public void TestAddSourceToCustomer() { var stripeCustomer = new StripeCustomer(); var stripeResponse = new Mock<IRestResponse<StripeCustomer>>(MockBehavior.Strict); stripeResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); stripeResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); stripeResponse.SetupGet(mocked => mocked.Data).Returns(stripeCustomer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); var response = _fixture.AddSourceToCustomer("cus_123", "card_123"); _restClient.Verify( mocked => mocked.Execute<StripeCustomer>( It.Is<IRestRequest>(o => o.Method == Method.POST && o.Resource.Equals("customers/cus_123/sources") && o.Parameters.Matches("source", "card_123")))); Assert.AreSame(stripeCustomer, response); }
public void TestGetSource() { var expectedSource = new SourceData { id = "ba_456" }; var customer = new StripeCustomer { sources = new Sources { data = new List<SourceData> { new SourceData { id = "card_123" }, expectedSource, new SourceData { id = "card_789" } } } }; var response = new Mock<IRestResponse<StripeCustomer>>(); response.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); response.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); response.SetupGet(mocked => mocked.Data).Returns(customer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(response.Object); var result = _fixture.GetSource("cus_123", "ba_456"); _restClient.Verify(mocked => mocked.Execute<StripeCustomer>( It.Is<RestRequest>(o => o.Method == Method.GET && o.Resource.Equals("/customers/cus_123") ))); _restClient.VerifyAll(); response.VerifyAll(); Assert.IsNotNull(result); Assert.AreSame(expectedSource, result); }
public void ShouldUpdateCustomerSource() { var customer = new StripeCustomer { id = "cus_test0618", default_source = "platinum card", sources = new Sources() { data = new List<SourceData>() { new SourceData() { last4 = "8585", brand = "Visa", address_zip = "45454", id = "platinum card", exp_month = "01", exp_year = "2020" } } } }; var stripeResponse = new Mock<IRestResponse<StripeCustomer>>(MockBehavior.Strict); stripeResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); stripeResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); stripeResponse.SetupGet(mocked => mocked.Data).Returns(customer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); var defaultSource = _fixture.UpdateCustomerSource("customerToken", "cardToken"); _restClient.Verify(mocked => mocked.Execute<StripeCustomer>( It.Is<IRestRequest>(o => o.Method == Method.POST && o.Resource.Equals("customers/customerToken") && o.Parameters.Matches("source", "cardToken") ))); _restClient.VerifyAll(); stripeResponse.VerifyAll(); Assert.AreEqual("Visa", defaultSource.brand); Assert.AreEqual("8585", defaultSource.last4); Assert.AreEqual("45454", defaultSource.address_zip); }
public void ShouldNotChargeCustomerIfAmountIsInvalid() { var customer = new StripeCustomer { id = "12345", default_source = "some card" }; var getCustomerResponse = new Mock<IRestResponse<StripeCustomer>>(MockBehavior.Strict); getCustomerResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); getCustomerResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); getCustomerResponse.SetupGet(mocked => mocked.Data).Returns(customer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(getCustomerResponse.Object); var chargeResponse = new Mock<IRestResponse<StripeCharge>>(MockBehavior.Strict); chargeResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); chargeResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.BadRequest).Verifiable(); chargeResponse.SetupGet(mocked => mocked.Content).Returns("{error: {message:'Invalid Integer Amount'}}").Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCharge>(It.IsAny<IRestRequest>())).Returns(chargeResponse.Object); try { _fixture.ChargeCustomer("token", -900, 98765); Assert.Fail("Should have thrown exception"); } catch (PaymentProcessorException e) { Assert.AreEqual("Invalid charge request", e.Message); Assert.IsNotNull(e.DetailMessage); Assert.AreEqual("Invalid Integer Amount", e.DetailMessage); Assert.AreEqual(_errors["failedResponse"], e.GlobalMessage); } }
public void ShouldUpdateCustomerDescription() { var customer = new StripeCustomer { id = "12345" }; var stripeResponse = new Mock<IRestResponse<StripeCustomer>>(MockBehavior.Strict); stripeResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); stripeResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); stripeResponse.SetupGet(mocked => mocked.Data).Returns(customer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); var response = _fixture.UpdateCustomerDescription("token", 102030); _restClient.Verify(mocked => mocked.Execute<StripeCustomer>( It.Is<IRestRequest>(o => o.Method == Method.POST && o.Resource.Equals("customers/token") && o.Parameters.Matches("description", "Crossroads Donor #102030") ))); _restClient.VerifyAll(); stripeResponse.VerifyAll(); Assert.AreEqual("12345", response); }
public void ShouldReturnSuccessfulCustomerId() { var customer = new StripeCustomer { id = "856", default_source = "123", }; var stripeResponse = new Mock<IRestResponse<StripeCustomer>>(MockBehavior.Strict); stripeResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); stripeResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); stripeResponse.SetupGet(mocked => mocked.Data).Returns(customer).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); var response = _fixture.CreateCustomer("token"); _restClient.Verify(mocked => mocked.Execute<StripeCustomer>( It.Is<IRestRequest>(o => o.Method == Method.POST && o.Resource.Equals("customers") && o.Parameters.Matches("description", "Crossroads Donor #pending") && o.Parameters.Matches("source", "token") ))); _restClient.VerifyAll(); stripeResponse.VerifyAll(); Assert.AreEqual(customer, response); }
public void ShouldGetDefaultSource() { var cust = new StripeCustomer { sources = new Sources { data = new List<SourceData> { new SourceData { id = "456", @object = "bank_account", last4 = "9876", routing_number = "5432", }, new SourceData { id = "123", @object = "bank_account", last4 = "1234", routing_number = "5678", }, new SourceData { id = "789", @object = "credit_card", brand = "visa", last4 = "0001", exp_month = "01", exp_year = "2023", address_zip = "20202" }, new SourceData { id = "123", @object = "credit_card", brand = "mcc", last4 = "0002", exp_month = "2", exp_year = "2024", address_zip = "10101" }, } }, default_source = "123", }; var stripeResponse = new Mock<IRestResponse<StripeCustomer>>(MockBehavior.Strict); stripeResponse.SetupGet(mocked => mocked.ResponseStatus).Returns(ResponseStatus.Completed).Verifiable(); stripeResponse.SetupGet(mocked => mocked.StatusCode).Returns(HttpStatusCode.OK).Verifiable(); stripeResponse.SetupGet(mocked => mocked.Data).Returns(cust).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripeCustomer>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); var defaultSource = _fixture.GetDefaultSource("token"); Assert.IsNotNull(defaultSource); Assert.AreEqual("5678", defaultSource.routing_number); Assert.AreEqual("1234", defaultSource.bank_last4); Assert.AreEqual("mcc", defaultSource.brand); Assert.AreEqual("0002", defaultSource.last4); Assert.AreEqual("02", defaultSource.exp_month); Assert.AreEqual("24", defaultSource.exp_year); Assert.AreEqual("10101", defaultSource.address_zip); _restClient.VerifyAll(); stripeResponse.VerifyAll(); }