using System;
using NUnit.Framework;
using SendGrid.Helpers.Mail;
using System.Collections.Generic;
using System.Net;
using Newtonsoft.Json;
using System.Diagnostics;
namespace UnitTest
{
[TestFixture]
public class UnitTests
{
static string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY");
static string host = "http://localhost:4010";
public dynamic sg = new SendGrid.SendGridAPIClient(_apiKey, host);
Process process = new Process();
[TestFixtureSetUp]
public void Init()
{
if (Environment.GetEnvironmentVariable("TRAVIS") != "true")
{
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
Trace.WriteLine("Starting Prism (~20 seconds)");
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "prism.exe";
startInfo.Arguments = "run -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json";
process.StartInfo = startInfo;
process.Start();
System.Threading.Thread.Sleep(15000);
}
else
{
System.Threading.Thread.Sleep(15000);
}
}
// Base case for sending an email
[Test]
public void TestHelloEmail()
{
Mail mail = new Mail();
Email email = new Email();
email.Address = "test@example.com";
mail.From = email;
Personalization personalization = new Personalization();
email = new Email();
email.Address = "test@example.com";
personalization.AddTo(email);
mail.AddPersonalization(personalization);
mail.Subject = "Hello World from the SendGrid CSharp Library";
Content content = new Content();
content.Type = "text/plain";
content.Value = "Textual content";
mail.AddContent(content);
content = new Content();
content.Type = "text/html";
content.Value = "
HTML content";
mail.AddContent(content);
String ret = mail.Get();
String final = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(ret),
Formatting.None,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Include });
Assert.AreEqual(final, "{\"from\":{\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid CSharp Library\",\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}]}],\"content\":[{\"type\":\"text/plain\",\"value\":\"Textual content\"},{\"type\":\"text/html\",\"value\":\"HTML content\"}]}");
}
// All paramaters available for sending an email
[Test]
public void TestKitchenSink()
{
Mail mail = new Mail();
Email email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
mail.From = email;
mail.Subject = "Hello World from the SendGrid CSharp Library";
Personalization personalization = new Personalization();
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddTo(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
personalization.Subject = "Thank you for signing up, %name%";
personalization.AddHeader("X-Test", "True");
personalization.AddHeader("X-Mock", "True");
personalization.AddSubstitution("%name%", "Example User");
personalization.AddSubstitution("%city%", "Denver");
personalization.AddCustomArgs("marketing", "false");
personalization.AddCustomArgs("transactional", "true");
personalization.SendAt = 1461775051;
mail.AddPersonalization(personalization);
personalization = new Personalization();
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddTo(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
personalization.Subject = "Thank you for signing up, %name%";
personalization.AddHeader("X-Test", "True");
personalization.AddHeader("X-Mock", "True");
personalization.AddSubstitution("%name%", "Example User");
personalization.AddSubstitution("%city%", "Denver");
personalization.AddCustomArgs("marketing", "false");
personalization.AddCustomArgs("transactional", "true");
personalization.SendAt = 1461775051;
mail.AddPersonalization(personalization);
Content content = new Content();
content.Type = "text/plain";
content.Value = "Textual content";
mail.AddContent(content);
content = new Content();
content.Type = "text/html";
content.Value = "HTML content";
mail.AddContent(content);
content = new Content();
content.Type = "text/calendar";
content.Value = "Party Time!!";
mail.AddContent(content);
Attachment attachment = new Attachment();
attachment.Content = "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12";
attachment.Type = "application/pdf";
attachment.Filename = "balance_001.pdf";
attachment.Disposition = "attachment";
attachment.ContentId = "Balance Sheet";
mail.AddAttachment(attachment);
attachment = new Attachment();
attachment.Content = "BwdW";
attachment.Type = "image/png";
attachment.Filename = "banner.png";
attachment.Disposition = "inline";
attachment.ContentId = "Banner";
mail.AddAttachment(attachment);
mail.TemplateId = "13b8f94f-bcae-4ec6-b752-70d6cb59f932";
mail.AddHeader("X-Day", "Monday");
mail.AddHeader("X-Month", "January");
mail.AddSection("%section1", "Substitution for Section 1 Tag");
mail.AddSection("%section2", "Substitution for Section 2 Tag");
mail.AddCategory("customer");
mail.AddCategory("vip");
mail.AddCustomArgs("campaign", "welcome");
mail.AddCustomArgs("sequence", "2");
ASM asm = new ASM();
asm.GroupId = 3;
List groups_to_display = new List()
{
1, 4, 5
};
asm.GroupsToDisplay = groups_to_display;
mail.Asm = asm;
mail.SendAt = 1461775051;
mail.SetIpPoolId = "23";
// This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html)
// mail.BatchId = "some_batch_id";
MailSettings mailSettings = new MailSettings();
BCCSettings bccSettings = new BCCSettings();
bccSettings.Enable = true;
bccSettings.Email = "test@example.com";
mailSettings.BccSettings = bccSettings;
BypassListManagement bypassListManagement = new BypassListManagement();
bypassListManagement.Enable = true;
mailSettings.BypassListManagement = bypassListManagement;
FooterSettings footerSettings = new FooterSettings();
footerSettings.Enable = true;
footerSettings.Text = "Some Footer Text";
footerSettings.Html = "Some HTML Here";
mailSettings.FooterSettings = footerSettings;
SandboxMode sandboxMode = new SandboxMode();
sandboxMode.Enable = true;
mailSettings.SandboxMode = sandboxMode;
SpamCheck spamCheck = new SpamCheck();
spamCheck.Enable = true;
spamCheck.Threshold = 1;
spamCheck.PostToUrl = "https://gotchya.example.com";
mailSettings.SpamCheck = spamCheck;
mail.MailSettings = mailSettings;
TrackingSettings trackingSettings = new TrackingSettings();
ClickTracking clickTracking = new ClickTracking();
clickTracking.Enable = true;
clickTracking.EnableText = false;
trackingSettings.ClickTracking = clickTracking;
OpenTracking openTracking = new OpenTracking();
openTracking.Enable = true;
openTracking.SubstitutionTag = "Optional tag to replace with the open image in the body of the message";
trackingSettings.OpenTracking = openTracking;
SubscriptionTracking subscriptionTracking = new SubscriptionTracking();
subscriptionTracking.Enable = true;
subscriptionTracking.Text = "text to insert into the text/plain portion of the message";
subscriptionTracking.Html = "HTML to insert into the text/html portion of the message";
subscriptionTracking.SubstitutionTag = "text to insert into the text/plain portion of the message";
trackingSettings.SubscriptionTracking = subscriptionTracking;
Ganalytics ganalytics = new Ganalytics();
ganalytics.Enable = true;
ganalytics.UtmCampaign = "some campaign";
ganalytics.UtmContent = "some content";
ganalytics.UtmMedium = "some medium";
ganalytics.UtmSource = "some source";
ganalytics.UtmTerm = "some term";
trackingSettings.Ganalytics = ganalytics;
mail.TrackingSettings = trackingSettings;
email = new Email();
email.Address = "test@example.com";
mail.ReplyTo = email;
String ret = mail.Get();
String final = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(ret),
Formatting.None,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Include });
Assert.AreEqual(final, "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid CSharp Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Thank you for signing up, %name%\",\"headers\":{\"X-Test\":\"True\",\"X-Mock\":\"True\"},\"substitutions\":{\"%name%\":\"Example User\",\"%city%\":\"Denver\"},\"custom_args\":{\"marketing\":\"false\",\"transactional\":\"true\"},\"send_at\":1461775051},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Thank you for signing up, %name%\",\"headers\":{\"X-Test\":\"True\",\"X-Mock\":\"True\"},\"substitutions\":{\"%name%\":\"Example User\",\"%city%\":\"Denver\"},\"custom_args\":{\"marketing\":\"false\",\"transactional\":\"true\"},\"send_at\":1461775051}],\"content\":[{\"type\":\"text/plain\",\"value\":\"Textual content\"},{\"type\":\"text/html\",\"value\":\"HTML content\"},{\"type\":\"text/calendar\",\"value\":\"Party Time!!\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"headers\":{\"X-Day\":\"Monday\",\"X-Month\":\"January\"},\"sections\":{\"%section1\":\"Substitution for Section 1 Tag\",\"%section2\":\"Substitution for Section 2 Tag\"},\"categories\":[\"customer\",\"vip\"],\"custom_args\":{\"campaign\":\"welcome\",\"sequence\":\"2\"},\"send_at\":1461775051,\"asm\":{\"group_id\":3,\"groups_to_display\":[1,4,5]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Some Footer Text\",\"html\":\"Some HTML Here\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://gotchya.example.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"HTML to insert into the text/html portion of the message\",\"substitution_tag\":\"text to insert into the text/plain portion of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_medium\":\"some medium\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some campaign\"}},\"reply_to\":{\"email\":\"test@example.com\"}}");
}
// All paramaters available for sending an email
[Test]
public void TestKitchenSinkInverse()
{
Mail mail = new Mail();
Email email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
mail.From = email;
mail.Subject = "Hello World from the SendGrid CSharp Library";
Personalization personalization = new Personalization();
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddTo(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
personalization.Subject = "Thank you for signing up, %name%";
personalization.AddHeader("X-Test", "True");
personalization.AddHeader("X-Mock", "True");
personalization.AddSubstitution("%name%", "Example User");
personalization.AddSubstitution("%city%", "Denver");
personalization.AddCustomArgs("marketing", "false");
personalization.AddCustomArgs("transactional", "true");
personalization.SendAt = 1461775051;
mail.AddPersonalization(personalization);
personalization = new Personalization();
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddTo(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddCc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
email = new Email();
email.Name = "Example User";
email.Address = "test@example.com";
personalization.AddBcc(email);
personalization.Subject = "Thank you for signing up, %name%";
personalization.AddHeader("X-Test", "True");
personalization.AddHeader("X-Mock", "True");
personalization.AddSubstitution("%name%", "Example User");
personalization.AddSubstitution("%city%", "Denver");
personalization.AddCustomArgs("marketing", "false");
personalization.AddCustomArgs("transactional", "true");
personalization.SendAt = 1461775051;
mail.AddPersonalization(personalization);
Content content = new Content();
content.Type = "text/plain";
content.Value = "Textual content";
mail.AddContent(content);
content = new Content();
content.Type = "text/html";
content.Value = "HTML content";
mail.AddContent(content);
content = new Content();
content.Type = "text/calendar";
content.Value = "Party Time!!";
mail.AddContent(content);
Attachment attachment = new Attachment();
attachment.Content = "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12";
attachment.Type = "application/pdf";
attachment.Filename = "balance_001.pdf";
attachment.Disposition = "attachment";
attachment.ContentId = "Balance Sheet";
mail.AddAttachment(attachment);
attachment = new Attachment();
attachment.Content = "BwdW";
attachment.Type = "image/png";
attachment.Filename = "banner.png";
attachment.Disposition = "inline";
attachment.ContentId = "Banner";
mail.AddAttachment(attachment);
mail.TemplateId = "13b8f94f-bcae-4ec6-b752-70d6cb59f932";
mail.AddHeader("X-Day", "Monday");
mail.AddHeader("X-Month", "January");
mail.AddSection("%section1", "Substitution for Section 1 Tag");
mail.AddSection("%section2", "Substitution for Section 2 Tag");
mail.AddCategory("customer");
mail.AddCategory("vip");
mail.AddCustomArgs("campaign", "welcome");
mail.AddCustomArgs("sequence", "2");
ASM asm = new ASM();
asm.GroupId = 3;
List groups_to_display = new List()
{
1, 4, 5
};
asm.GroupsToDisplay = groups_to_display;
mail.Asm = asm;
mail.SendAt = 1461775051;
mail.SetIpPoolId = "23";
// This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html)
// mail.BatchId = "some_batch_id";
MailSettings mailSettings = new MailSettings();
BCCSettings bccSettings = new BCCSettings();
bccSettings.Enable = false;
mailSettings.BccSettings = bccSettings;
BypassListManagement bypassListManagement = new BypassListManagement();
bypassListManagement.Enable = false;
mailSettings.BypassListManagement = bypassListManagement;
FooterSettings footerSettings = new FooterSettings();
footerSettings.Enable = false;
mailSettings.FooterSettings = footerSettings;
SandboxMode sandboxMode = new SandboxMode();
sandboxMode.Enable = false;
mailSettings.SandboxMode = sandboxMode;
SpamCheck spamCheck = new SpamCheck();
spamCheck.Enable = false;
mailSettings.SpamCheck = spamCheck;
mail.MailSettings = mailSettings;
TrackingSettings trackingSettings = new TrackingSettings();
ClickTracking clickTracking = new ClickTracking();
clickTracking.Enable = false;
trackingSettings.ClickTracking = clickTracking;
OpenTracking openTracking = new OpenTracking();
openTracking.Enable = false;
trackingSettings.OpenTracking = openTracking;
SubscriptionTracking subscriptionTracking = new SubscriptionTracking();
subscriptionTracking.Enable = false;
trackingSettings.SubscriptionTracking = subscriptionTracking;
Ganalytics ganalytics = new Ganalytics();
ganalytics.Enable = false;
trackingSettings.Ganalytics = ganalytics;
mail.TrackingSettings = trackingSettings;
email = new Email();
email.Address = "test@example.com";
mail.ReplyTo = email;
String ret = mail.Get();
String final = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(ret),
Formatting.None,
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore });
Assert.AreEqual(final, "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid CSharp Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Thank you for signing up, %name%\",\"headers\":{\"X-Test\":\"True\",\"X-Mock\":\"True\"},\"substitutions\":{\"%name%\":\"Example User\",\"%city%\":\"Denver\"},\"custom_args\":{\"marketing\":\"false\",\"transactional\":\"true\"},\"send_at\":1461775051},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Thank you for signing up, %name%\",\"headers\":{\"X-Test\":\"True\",\"X-Mock\":\"True\"},\"substitutions\":{\"%name%\":\"Example User\",\"%city%\":\"Denver\"},\"custom_args\":{\"marketing\":\"false\",\"transactional\":\"true\"},\"send_at\":1461775051}],\"content\":[{\"type\":\"text/plain\",\"value\":\"Textual content\"},{\"type\":\"text/html\",\"value\":\"HTML content\"},{\"type\":\"text/calendar\",\"value\":\"Party Time!!\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"headers\":{\"X-Day\":\"Monday\",\"X-Month\":\"January\"},\"sections\":{\"%section1\":\"Substitution for Section 1 Tag\",\"%section2\":\"Substitution for Section 2 Tag\"},\"categories\":[\"customer\",\"vip\"],\"custom_args\":{\"campaign\":\"welcome\",\"sequence\":\"2\"},\"send_at\":1461775051,\"asm\":{\"group_id\":3,\"groups_to_display\":[1,4,5]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":false},\"bypass_list_management\":{\"enable\":false},\"footer\":{\"enable\":false},\"sandbox_mode\":{\"enable\":false},\"spam_check\":{\"enable\":false}},\"tracking_settings\":{\"click_tracking\":{\"enable\":false},\"open_tracking\":{\"enable\":false},\"subscription_tracking\":{\"enable\":false},\"ganalytics\":{\"enable\":false}},\"reply_to\":{\"email\":\"test@example.com\"}}");
}
[Test]
public async void test_access_settings_activity_get()
{
string queryParams = @"{
'limit': 1
}";
Dictionary headers = new Dictionary();
headers.Clear();
headers.Add("X-Mock", "200");
dynamic response = await sg.client.access_settings.activity.get(queryParams: queryParams, requestHeaders: headers);
Assert.AreEqual(response.StatusCode, HttpStatusCode.OK);
}
[Test]
public async void test_access_settings_whitelist_post()
{
string data = @"{
'ips': [
{
'ip': '192.168.1.1'
},
{
'ip': '192.*.*.*'
},
{
'ip': '192.168.1.3/32'
}
]
}";
Object json = JsonConvert.DeserializeObject