public void TestEditRecurringGiftChangePaymentAndStartDate() { const string authUserToken = "auth"; var today = DateTime.Today; const int congregationId = 1; var editGift = new RecurringGiftDto { RecurringGiftId = 345, StripeTokenId = "tok_123", PlanAmount = 800M, Program = "3", PlanInterval = PlanInterval.Weekly, StartDate = today }; var donor = new ContactDonor { DonorId = 456, ProcessorId = "cus_123", Email = "*****@*****.**" }; var existingGift = new CreateDonationDistDto { Amount = 50000, ProgramId = "3", Frequency = 1, StartDate = today.AddDays(-7), DonorAccountId = 234, SubscriptionId = "sub_123", DayOfWeek = (int)today.AddDays(-7).DayOfWeek, RecurringGiftId = 345, DonorId = 789, StripeCustomerId = "cus_456", StripeAccountId = "card_456" }; var stripeSource = new SourceData { brand = "Visa", last4 = "1234", id = "card_123" }; const int newDonorAccountId = 987; var oldSubscription = new StripeSubscription { Id = "sub_123", Plan = new StripePlan { Id = "plan_123" } }; var newPlan = new StripePlan { Id = "plan_456" }; var newSubscription = new StripeSubscription { Id = "sub_456" }; const int newRecurringGiftId = 765; var newRecurringGift = new CreateDonationDistDto { Amount = 80000, ProgramId = "3", Frequency = 1, StartDate = today, DonorAccountId = 234, SubscriptionId = "sub_456", DayOfWeek = (int)today.DayOfWeek, RecurringGiftId = newRecurringGiftId, DonorId = 789 }; var contact = new MyContact() { Congregation_ID = congregationId }; _mpDonorService.Setup(mocked => mocked.GetRecurringGiftById(authUserToken, editGift.RecurringGiftId)).Returns(existingGift); _paymentService.Setup(mocked => mocked.UpdateCustomerSource(existingGift.StripeCustomerId, editGift.StripeTokenId)).Returns(stripeSource); _mpDonorService.Setup(mocked => mocked.CreateDonorAccount(stripeSource.brand, "0", stripeSource.last4, null, existingGift.DonorId, stripeSource.id, existingGift.StripeCustomerId)).Returns(newDonorAccountId); _paymentService.Setup(mocked => mocked.CancelSubscription(existingGift.StripeCustomerId, existingGift.SubscriptionId)).Returns(oldSubscription); _paymentService.Setup(mocked => mocked.CreateSubscription(newPlan.Id, existingGift.StripeCustomerId, newRecurringGift.StartDate.Value)).Returns(newSubscription); _paymentService.Setup(mocked => mocked.CancelPlan(oldSubscription.Plan.Id)).Returns(oldSubscription.Plan); _paymentService.Setup(mocked => mocked.CreatePlan(editGift, donor)).Returns(newPlan); _mpDonorService.Setup(mocked => mocked.CancelRecurringGift(authUserToken, existingGift.RecurringGiftId.Value)); _mpContactService.Setup(mocked => mocked.GetContactById(donor.ContactId)).Returns(contact); _mpDonorService.Setup( mocked => mocked.CreateRecurringGiftRecord(authUserToken, donor.DonorId, newDonorAccountId, EnumMemberSerializationUtils.ToEnumString(editGift.PlanInterval), editGift.PlanAmount, editGift.StartDate, editGift.Program, newSubscription.Id, contact.Congregation_ID.Value)).Returns(newRecurringGiftId); _mpDonorService.Setup(mocked => mocked.GetRecurringGiftById(authUserToken, newRecurringGiftId)).Returns(newRecurringGift); var result = _fixture.EditRecurringGift(authUserToken, editGift, donor); _mpDonorService.VerifyAll(); _paymentService.VerifyAll(); Assert.IsNotNull(result); Assert.AreEqual(newRecurringGift.RecurringGiftId, result.RecurringGiftId); Assert.AreEqual(newRecurringGift.StartDate, result.StartDate); Assert.AreEqual(newRecurringGift.Amount, result.PlanAmount); Assert.AreEqual(PlanInterval.Weekly, result.PlanInterval); Assert.AreEqual(newRecurringGift.ProgramId, result.Program); Assert.AreEqual(newRecurringGift.DonorId, result.DonorID); Assert.AreEqual(donor.Email, result.EmailAddress); Assert.AreEqual(newSubscription.Id, result.SubscriptionID); }
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 TestCancelRecurringGift() { const string authUserToken = "auth"; const int recurringGiftId = 123; var gift = new CreateDonationDistDto { DonorId = 456, SubscriptionId = "sub_123", StripeCustomerId = "cus_456", StripeAccountId = "card_789", ProgramName = "Crossroads", Amount = 123.45M, Recurrence = "12th of the month", DonorAccountId = 90 }; var plan = new StripePlan { Id = "plan_123" }; var subscription = new StripeSubscription { Plan = plan }; _mpDonorService.Setup(mocked => mocked.GetRecurringGiftById(authUserToken, recurringGiftId)).Returns(gift); _paymentService.Setup(mocked => mocked.CancelSubscription(gift.StripeCustomerId, gift.SubscriptionId)).Returns(subscription); _paymentService.Setup(mocked => mocked.CancelPlan(subscription.Plan.Id)).Returns(plan); _mpDonorService.Setup(mocked => mocked.CancelRecurringGift(authUserToken, recurringGiftId)); _mpDonorService.Setup(mocked => mocked.GetDonorAccountPymtType(gift.DonorAccountId.Value)).Returns(1); _mpDonorService.Setup( mocked => mocked.SendEmail(RecurringGiftCancelEmailTemplateId, gift.DonorId, (int)(123.45M / 100), "Check", It.IsAny<DateTime>(), "Crossroads", string.Empty, "12th of the month")); _fixture.CancelRecurringGift(authUserToken, recurringGiftId); _mpDonorService.VerifyAll(); _paymentService.VerifyAll(); }
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 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 TestInvoicePaymentFailedCancelPlanAndSubscription() { const string processorId = "cus_123"; const string donorAccountProcessorId = "cus_456"; const string subscriptionId = "sub_123"; const int failCount = 3; const int recurringGiftId = 123456; const int donorId = 3421; const int frequency = 2; const string id = "9876"; const string charge = "ch_2468"; const string planId = "Donor ID #3421 weekly"; var e = new StripeEvent { LiveMode = true, Type = "invoice.payment_failed", Created = DateTime.Now.AddDays(-1), Data = new StripeEventData { Object = JObject.FromObject(new StripeInvoice() { Id = id, Customer = processorId, Charge = charge, Subscription = subscriptionId }) } }; var gift = new CreateDonationDistDto { Frequency = frequency, RecurringGiftId = recurringGiftId, SubscriptionId = subscriptionId, ConsecutiveFailureCount = failCount, DonorId = donorId, StripeCustomerId = donorAccountProcessorId }; var plan = new StripePlan { Id = planId }; var subscription = new StripeSubscription { Plan = plan }; _mpDonorService.Setup(mocked => mocked.ProcessRecurringGiftDecline(subscriptionId)); _mpDonorService.Setup(mocked => mocked.GetRecurringGiftForSubscription(subscriptionId)).Returns(gift); _paymentService.Setup(mocked => mocked.CancelSubscription(donorAccountProcessorId, subscriptionId)).Returns(subscription); _paymentService.Setup(mocked => mocked.CancelPlan(subscription.Plan.Id)).Returns(plan); _mpDonorService.Setup(mocked => mocked.CancelRecurringGift(recurringGiftId)); Assert.IsNull(_fixture.ProcessStripeEvent(e)); _fixture.ProcessStripeEvent(e); _donorService.VerifyAll(); _mpDonorService.VerifyAll(); _donorService.VerifyAll(); _paymentService.VerifyAll(); }
public void TestCancelPlan() { var stripePlan = new StripePlan(); var stripeResponse = new Mock<IRestResponse<StripePlan>>(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(stripePlan).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripePlan>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); const string plan = "plan_123/456/789"; var response = _fixture.CancelPlan(plan); _restClient.Verify( mocked => mocked.Execute<StripePlan>( It.Is<IRestRequest>(o => o.Method == Method.DELETE && o.Resource.Equals("plans/" + plan.Replace("/", "%2F"))))); Assert.AreSame(stripePlan, response); }
public void TestCreatePlan() { const int expectedTrialDays = 3; var recurringGiftDto = new RecurringGiftDto { StripeTokenId = "tok_123", PlanAmount = 123.45M, PlanInterval = PlanInterval.Weekly, Program = "987", StartDate = DateTime.Now.AddDays(expectedTrialDays) }; var interval = EnumMemberSerializationUtils.ToEnumString(recurringGiftDto.PlanInterval); var contactDonor = new ContactDonor { DonorId = 678, ProcessorId = "cus_123" }; var stripePlan = new StripePlan(); var stripeResponse = new Mock<IRestResponse<StripePlan>>(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(stripePlan).Verifiable(); _restClient.Setup(mocked => mocked.Execute<StripePlan>(It.IsAny<IRestRequest>())).Returns(stripeResponse.Object); var response = _fixture.CreatePlan(recurringGiftDto, contactDonor); _restClient.Verify(mocked => mocked.Execute<StripePlan>(It.Is<IRestRequest>(o => o.Method == Method.POST && o.Resource.Equals("plans") && o.Parameters.Matches("amount", (int)(recurringGiftDto.PlanAmount * Constants.StripeDecimalConversionValue)) && o.Parameters.Matches("interval", interval) && o.Parameters.Matches("name", "Donor ID #" + contactDonor.DonorId + " " + interval + "ly") && o.Parameters.Matches("currency", "usd") && o.Parameters.Matches("id", contactDonor.DonorId + " " + DateTime.Now)))); Assert.AreSame(stripePlan, response); }