public void TestSendEmailNoFrequency() { const string program = "Crossroads"; const int declineEmailTemplate = 11940; var donationDate = DateTime.Now; const string emailReason = "rejected: lack of funds"; const int donorId = 9876; const int donationAmt = 4343; const string paymentType = "Bank"; var defaultContact = new MyContact() { Contact_ID = 1234556, Email_Address = "*****@*****.**" }; var getTemplateResponse = new MessageTemplate() { Body = "Your payment was rejected. Darn.", Subject = "Test Decline Email" }; const string emailAddress = "*****@*****.**"; const int contactId = 3; var contactList = new List<Dictionary<string, object>> { new Dictionary<string, object> { {"Donor_ID", 1}, {"Processor_ID", 2}, {"Contact_ID", contactId}, {"Email", emailAddress}, {"Statement_Type", "Family"}, {"Statement_Type_ID", 2}, {"Statement_Frequency", "Quarterly"}, {"Statement_Method", "Online"}, {"Household_ID", 4}, } }; _ministryPlatformService.Setup(mocked => mocked.GetPageViewRecords("DonorByContactId", It.IsAny<string>(), It.IsAny<string>(), string.Empty, 0)).Returns(contactList); var expectedCommunication = new Communication { AuthorUserId = 5, DomainId = 1, EmailBody = getTemplateResponse.Body, EmailSubject = getTemplateResponse.Subject, FromContact = new Contact {ContactId = 5, EmailAddress = "*****@*****.**"}, ReplyToContact = new Contact {ContactId = 5, EmailAddress = "*****@*****.**" }, ToContacts = new List<Contact> {new Contact{ContactId = contactId, EmailAddress = emailAddress}}, MergeData = new Dictionary<string, object> { {"Program_Name", program}, {"Donation_Amount", donationAmt.ToString("N2")}, {"Donation_Date", donationDate.ToString("MM/dd/yyyy h:mmtt", new DateTimeFormatInfo { AMDesignator = "am", PMDesignator = "pm" })}, {"Payment_Method", paymentType}, {"Decline_Reason", emailReason}, } }; _contactService.Setup(mocked => mocked.GetContactById(Convert.ToInt32(ConfigurationManager.AppSettings["DefaultGivingContactEmailId"]))).Returns(defaultContact); _communicationService.Setup(mocked => mocked.GetTemplate(declineEmailTemplate)).Returns(getTemplateResponse); _communicationService.Setup( mocked => mocked.SendMessage( It.Is<Communication>( c => c.EmailBody.Equals(expectedCommunication.EmailBody) && c.EmailSubject.Equals(expectedCommunication.EmailSubject) && c.ToContacts[0].ContactId == expectedCommunication.ToContacts[0].ContactId && c.ToContacts[0].EmailAddress.Equals(expectedCommunication.ToContacts[0].EmailAddress) && c.MergeData["Program_Name"].Equals(expectedCommunication.MergeData["Program_Name"]) && c.MergeData["Donation_Amount"].Equals(expectedCommunication.MergeData["Donation_Amount"]) && c.MergeData["Donation_Date"].Equals(expectedCommunication.MergeData["Donation_Date"]) && c.MergeData["Payment_Method"].Equals(expectedCommunication.MergeData["Payment_Method"]) && c.MergeData["Decline_Reason"].Equals(expectedCommunication.MergeData["Decline_Reason"]) && !c.MergeData.ContainsKey("Frequency") ))); _fixture.SendEmail(declineEmailTemplate, donorId, donationAmt, paymentType, donationDate, program, emailReason, null); _ministryPlatformService.VerifyAll(); _communicationService.VerifyAll(); }
private static Communication FormatCommunication(int authorUserId, int domainId, MessageTemplate template, MyContact fromContact, MyContact replyToContact, int participantContactId, string participantEmail, Dictionary<string, object> mergeData) { var communication = new Communication { AuthorUserId = authorUserId, DomainId = domainId, EmailBody = template.Body, EmailSubject = template.Subject, FromContact = new Contact {ContactId = fromContact.Contact_ID, EmailAddress = fromContact.Email_Address}, ReplyToContact = new Contact {ContactId = replyToContact.Contact_ID, EmailAddress = replyToContact.Email_Address}, ToContacts = new List<Contact> {new Contact {ContactId = participantContactId, EmailAddress = participantEmail}}, MergeData = mergeData }; return communication; }
public void CreateDonationAndDistributionRecordWithPledge() { const decimal donationAmt = 676767; var feeAmt = 5656; var donorId = 1234567; var programId = "3"; var pledgeId = 123; var setupDate = DateTime.Now; var chargeId = "ch_crds1234567"; var processorId = "cus_8675309"; var pymtType = "cc"; var expectedDonationId = 321321; var expectedDonationDistributionId = 231231; var checkScannerBatchName = "check scanner batch"; const string viewKey = "DonorByContactId"; const string sortString = ""; var searchString = ",\"" + donorId + "\""; var donationPageId = Convert.ToInt32(ConfigurationManager.AppSettings["Donations"]); var donationDistPageId = Convert.ToInt32(ConfigurationManager.AppSettings["Distributions"]); var defaultContact = new MyContact() { Contact_ID = 1234556, Email_Address = "*****@*****.**" }; _ministryPlatformService.Setup(mocked => mocked.CreateRecord( donationPageId, It.IsAny<Dictionary<string, object>>(), It.IsAny<string>(), true)).Returns(expectedDonationId); _ministryPlatformService.Setup(mocked => mocked.CreateRecord( donationDistPageId, It.IsAny<Dictionary<string, object>>(), It.IsAny<string>(), true)).Returns(expectedDonationDistributionId); _contactService.Setup(mocked => mocked.GetContactById(Convert.ToInt32(ConfigurationManager.AppSettings["DefaultGivingContactEmailId"]))).Returns(defaultContact); _communicationService.Setup(mocked => mocked.SendMessage(It.IsAny<Communication>())); var expectedDonationValues = new Dictionary<string, object> { {"Donor_ID", donorId}, {"Donation_Amount", donationAmt}, {"Processor_Fee_Amount", feeAmt /Constants.StripeDecimalConversionValue}, {"Payment_Type_ID", 4}, //hardcoded as credit card until ACH stories are worked {"Donation_Date", setupDate}, {"Transaction_code", chargeId}, {"Registered_Donor", true}, {"Anonymous", false}, {"Processor_ID", processorId}, {"Donation_Status_Date", setupDate}, {"Donation_Status_ID", 1}, {"Recurring_Gift_ID", null}, {"Is_Recurring_Gift", false}, {"Donor_Account_ID", null}, {"Check_Scanner_Batch", checkScannerBatchName} }; var expectedDistributionValues = new Dictionary<string, object> { {"Donation_ID", expectedDonationId}, {"Amount", donationAmt}, {"Program_ID", programId}, {"Pledge_ID", pledgeId} }; var programServiceResponse = new Program { CommunicationTemplateId = 1234, ProgramId = 3, Name = "Crossroads" }; _programService.Setup(mocked => mocked.GetProgramById(It.IsAny<int>())).Returns(programServiceResponse); var dictList = new List<Dictionary<string, object>>(); dictList.Add(new Dictionary<string, object>() { {"Donor_ID", donorId}, {"Processor_ID", "tx_123"}, {"Email","*****@*****.**"}, {"Contact_ID","1234"}, {"Statement_Type", "Individual"}, {"Statement_Type_ID", 1}, {"Statement_Frequency", "Quarterly"}, {"Statement_Method", "None"}, {"Household_ID", 1} }); _ministryPlatformService.Setup(mocked => mocked.GetPageViewRecords(viewKey, It.IsAny<string>(), searchString, sortString, 0)).Returns(dictList); var getTemplateResponse = new MessageTemplate() { Body = "Test Body Content", Subject = "Test Email Subject Line" }; _communicationService.Setup(mocked => mocked.GetTemplate(It.IsAny<int>())).Returns(getTemplateResponse); var donationAndDistribution = new DonationAndDistributionRecord { DonationAmt = donationAmt, FeeAmt = feeAmt, DonorId = donorId, ProgramId = programId, ChargeId = chargeId, PymtType = pymtType, ProcessorId = processorId, SetupDate = setupDate, RegisteredDonor = true, CheckScannerBatchName = checkScannerBatchName, PledgeId = pledgeId }; var response = _fixture.CreateDonationAndDistributionRecord(donationAndDistribution); // Explicitly verify each expectation... _communicationService.Verify(mocked => mocked.SendMessage(It.IsAny<Communication>())); _programService.Verify(mocked => mocked.GetProgramById(3)); _ministryPlatformService.Verify(mocked => mocked.CreateRecord(donationPageId, expectedDonationValues, It.IsAny<string>(), true)); _ministryPlatformService.Verify(mocked => mocked.CreateRecord(donationDistPageId, expectedDistributionValues, It.IsAny<string>(), true)); // _ministryPlatformService.VerifyAll(); _programService.VerifyAll(); _communicationService.VerifyAll(); Assert.IsNotNull(response); Assert.AreEqual(response, expectedDonationId); }
public MessageTemplate GetTemplate(int templateId) { var pageRecords = _ministryPlatformService.GetRecordDict(_messagePageId, templateId, ApiLogin()); if (pageRecords == null) { throw new InvalidOperationException("Couldn't find message template."); } var template = new MessageTemplate { Body = pageRecords["Body"].ToString(), Subject = pageRecords["Subject"].ToString() }; return template; }