createsend-sendowlfork 6.1.0.pre.hashie5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +9 -0
  4. data/.travis.yml +7 -0
  5. data/CONTRIBUTING.md +8 -0
  6. data/Gemfile +3 -0
  7. data/HISTORY.md +299 -0
  8. data/LICENSE +19 -0
  9. data/README.md +220 -0
  10. data/RELEASE.md +53 -0
  11. data/Rakefile +24 -0
  12. data/createsend.gemspec +31 -0
  13. data/lib/createsend/administrator.rb +49 -0
  14. data/lib/createsend/cacert.pem +3849 -0
  15. data/lib/createsend/campaign.rb +202 -0
  16. data/lib/createsend/client.rb +224 -0
  17. data/lib/createsend/createsend.rb +291 -0
  18. data/lib/createsend/journey.rb +58 -0
  19. data/lib/createsend/list.rb +258 -0
  20. data/lib/createsend/person.rb +59 -0
  21. data/lib/createsend/segment.rb +81 -0
  22. data/lib/createsend/subscriber.rb +113 -0
  23. data/lib/createsend/template.rb +42 -0
  24. data/lib/createsend/transactional_classic_email.rb +32 -0
  25. data/lib/createsend/transactional_smart_email.rb +31 -0
  26. data/lib/createsend/transactional_timeline.rb +45 -0
  27. data/lib/createsend/version.rb +3 -0
  28. data/lib/createsend.rb +17 -0
  29. data/samples/authentication_sample.rb +64 -0
  30. data/samples/clients_sample.rb +79 -0
  31. data/samples/journey_sample.rb +87 -0
  32. data/samples/lists_sample.rb +51 -0
  33. data/samples/segments_sample.rb +21 -0
  34. data/samples/subscribers_sample.rb +51 -0
  35. data/test/administrator_test.rb +37 -0
  36. data/test/campaign_test.rb +296 -0
  37. data/test/client_test.rb +253 -0
  38. data/test/createsend_test.rb +321 -0
  39. data/test/fixtures/active_subscribers.json +87 -0
  40. data/test/fixtures/add_admin.json +3 -0
  41. data/test/fixtures/add_person.json +3 -0
  42. data/test/fixtures/add_subscriber.json +1 -0
  43. data/test/fixtures/admin_details.json +5 -0
  44. data/test/fixtures/admin_get_primary_contact.json +3 -0
  45. data/test/fixtures/admin_set_primary_contact.json +3 -0
  46. data/test/fixtures/administrators.json +12 -0
  47. data/test/fixtures/billingdetails.json +3 -0
  48. data/test/fixtures/bounced_subscribers.json +20 -0
  49. data/test/fixtures/campaign_bounces.json +25 -0
  50. data/test/fixtures/campaign_clicks.json +50 -0
  51. data/test/fixtures/campaign_listsandsegments.json +15 -0
  52. data/test/fixtures/campaign_opens.json +71 -0
  53. data/test/fixtures/campaign_recipients.json +91 -0
  54. data/test/fixtures/campaign_spam.json +16 -0
  55. data/test/fixtures/campaign_summary.json +16 -0
  56. data/test/fixtures/campaign_unsubscribes.json +17 -0
  57. data/test/fixtures/campaigns.json +37 -0
  58. data/test/fixtures/client_details.json +28 -0
  59. data/test/fixtures/client_get_primary_contact.json +3 -0
  60. data/test/fixtures/client_set_primary_contact.json +3 -0
  61. data/test/fixtures/clients.json +10 -0
  62. data/test/fixtures/countries.json +247 -0
  63. data/test/fixtures/create_campaign.json +1 -0
  64. data/test/fixtures/create_client.json +1 -0
  65. data/test/fixtures/create_custom_field.json +1 -0
  66. data/test/fixtures/create_list.json +1 -0
  67. data/test/fixtures/create_list_webhook.json +1 -0
  68. data/test/fixtures/create_segment.json +1 -0
  69. data/test/fixtures/create_template.json +1 -0
  70. data/test/fixtures/custom_api_error.json +4 -0
  71. data/test/fixtures/custom_fields.json +23 -0
  72. data/test/fixtures/deleted_subscribers.json +61 -0
  73. data/test/fixtures/drafts.json +26 -0
  74. data/test/fixtures/email_client_usage.json +38 -0
  75. data/test/fixtures/expired_oauth_token_api_error.json +4 -0
  76. data/test/fixtures/external_session.json +3 -0
  77. data/test/fixtures/import_subscribers.json +7 -0
  78. data/test/fixtures/import_subscribers_partial_success.json +17 -0
  79. data/test/fixtures/invalid_oauth_token_api_error.json +4 -0
  80. data/test/fixtures/journey_bounces.json +35 -0
  81. data/test/fixtures/journey_clicks.json +35 -0
  82. data/test/fixtures/journey_opens.json +55 -0
  83. data/test/fixtures/journey_recipients.json +27 -0
  84. data/test/fixtures/journey_summary.json +18 -0
  85. data/test/fixtures/journey_unsubscribes.json +26 -0
  86. data/test/fixtures/journeys.json +20 -0
  87. data/test/fixtures/list_details.json +8 -0
  88. data/test/fixtures/list_stats.json +26 -0
  89. data/test/fixtures/list_webhooks.json +18 -0
  90. data/test/fixtures/lists.json +10 -0
  91. data/test/fixtures/listsforemail.json +14 -0
  92. data/test/fixtures/oauth_exchange_token.json +5 -0
  93. data/test/fixtures/oauth_exchange_token_error.json +4 -0
  94. data/test/fixtures/oauth_refresh_token_error.json +4 -0
  95. data/test/fixtures/people.json +14 -0
  96. data/test/fixtures/person_details.json +6 -0
  97. data/test/fixtures/refresh_oauth_token.json +5 -0
  98. data/test/fixtures/revoked_oauth_token_api_error.json +4 -0
  99. data/test/fixtures/scheduled_campaigns.json +30 -0
  100. data/test/fixtures/segment_details.json +24 -0
  101. data/test/fixtures/segment_subscribers.json +27 -0
  102. data/test/fixtures/segments.json +12 -0
  103. data/test/fixtures/subscriber_details.json +23 -0
  104. data/test/fixtures/subscriber_details_with_track_and_sms_pref.json +25 -0
  105. data/test/fixtures/subscriber_history.json +45 -0
  106. data/test/fixtures/suppressionlist.json +41 -0
  107. data/test/fixtures/systemdate.json +3 -0
  108. data/test/fixtures/tags.json +10 -0
  109. data/test/fixtures/template_details.json +6 -0
  110. data/test/fixtures/templates.json +14 -0
  111. data/test/fixtures/timezones.json +99 -0
  112. data/test/fixtures/transfer_credits.json +4 -0
  113. data/test/fixtures/tx_classicemail_groups.json +14 -0
  114. data/test/fixtures/tx_message_details.json +36 -0
  115. data/test/fixtures/tx_message_details_with_statistics.json +72 -0
  116. data/test/fixtures/tx_messages.json +38 -0
  117. data/test/fixtures/tx_messages_classic.json +15 -0
  118. data/test/fixtures/tx_messages_smart.json +15 -0
  119. data/test/fixtures/tx_resend_message.json +6 -0
  120. data/test/fixtures/tx_send_multiple.json +12 -0
  121. data/test/fixtures/tx_send_single.json +7 -0
  122. data/test/fixtures/tx_smartemail_details.json +23 -0
  123. data/test/fixtures/tx_smartemails.json +15 -0
  124. data/test/fixtures/tx_statistics_classic.json +14 -0
  125. data/test/fixtures/tx_statistics_smart.json +14 -0
  126. data/test/fixtures/unconfirmed_subscribers.json +43 -0
  127. data/test/fixtures/unsubscribed_subscribers.json +61 -0
  128. data/test/fixtures/update_custom_field.json +1 -0
  129. data/test/helper.rb +79 -0
  130. data/test/journey_test.rb +156 -0
  131. data/test/list_test.rb +288 -0
  132. data/test/person_test.rb +39 -0
  133. data/test/segment_test.rb +74 -0
  134. data/test/subscriber_test.rb +177 -0
  135. data/test/template_test.rb +36 -0
  136. data/test/transactional_classic_email_test.rb +60 -0
  137. data/test/transactional_smart_email_test.rb +83 -0
  138. data/test/transactional_timeline_test.rb +110 -0
  139. metadata +431 -0
@@ -0,0 +1,156 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class JourneyTest < Test::Unit::TestCase
4
+ multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
5
+ setup do
6
+ @journey = CreateSend::Journey.new @auth, 'a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1'
7
+ end
8
+
9
+ should "get the summary for a journey" do
10
+ stub_get(@auth, "journeys/#{@journey.journey_id}.json", "journey_summary.json")
11
+
12
+ summary = @journey.summary
13
+ summary.Name.should be == 'New journey'
14
+ summary.TriggerType.should be == 'On Subscription'
15
+ summary.Status.should be == 'Active'
16
+
17
+ summary.Emails.size.should be == 1
18
+ summary.Emails.first.EmailID.should be == 'b1b1b1b1b1b1b1b1b1b1'
19
+ summary.Emails.first.Name.should be == 'New Email'
20
+ summary.Emails.first.Bounced.should be == 0
21
+ summary.Emails.first.Clicked.should be == 0
22
+ summary.Emails.first.Opened.should be == 3
23
+ summary.Emails.first.Sent.should be == 1
24
+ summary.Emails.first.UniqueOpened.should be == 1
25
+ summary.Emails.first.Unsubscribed.should be == 0
26
+ end
27
+
28
+ should "return a paged list of recipients of a particular email" do
29
+ journey_date = "2019-07-12 09:22"
30
+ stub_get(@auth, "journeys/email/b1b1b1b1b1b1b1b1b1b1/recipients.json" \
31
+ "?date=#{ERB::Util.url_encode(journey_date)}" \
32
+ "&page=2" \
33
+ "&pagesize=5" \
34
+ "&orderdirection=asc", "journey_recipients.json")
35
+
36
+ recipients = @journey.email_recipients email_id = 'b1b1b1b1b1b1b1b1b1b1', date = journey_date, page = 2, page_size = 5, order_direction = 'asc'
37
+ recipients.Results.size.should be == 4
38
+ recipients.Results.first.EmailAddress.should be == 'example+1@example.com'
39
+ recipients.Results.first.SentDate.should be == '2019-07-12 09:45:00'
40
+
41
+ recipients.ResultsOrderedBy.should be == 'SentDate'
42
+ recipients.OrderDirection.should be == 'ASC'
43
+ recipients.PageNumber.should be == 2
44
+ recipients.PageSize.should be == 10
45
+ recipients.RecordsOnThisPage.should be == 4
46
+ recipients.TotalNumberOfRecords.should be == 14
47
+ recipients.NumberOfPages.should be == 2
48
+ end
49
+
50
+ should "return a paged list of subscribers who opened given journey email" do
51
+ journey_date = "2019-02-08 09:22"
52
+ stub_get(@auth, "journeys/email/b1b1b1b1b1b1b1b1b1b1/opens.json" \
53
+ "?date=#{ERB::Util.url_encode(journey_date)}" \
54
+ "&page=2" \
55
+ "&pagesize=5" \
56
+ "&orderdirection=asc", "journey_opens.json")
57
+
58
+ opens = @journey.email_opens email = 'b1b1b1b1b1b1b1b1b1b1', date = journey_date, page = 2, page_size = 5, order_direction = 'asc'
59
+ opens.Results.size.should be == 4
60
+ opens.Results.last.EmailAddress.should be == "example+4@example.com"
61
+ opens.Results.last.Date.should be == "2019-07-29 10:35:00"
62
+ opens.Results.last.IPAddress.should be == "192.168.0.3"
63
+ opens.Results.last.Latitude.should be == -33.8683
64
+ opens.Results.last.Longitude.should be == 151.2086
65
+ opens.Results.last.City.should be == "Sydney"
66
+ opens.Results.last.Region.should be == "New South Wales"
67
+ opens.Results.last.CountryCode.should be == "AU"
68
+ opens.Results.last.CountryName.should be == "Australia"
69
+
70
+ opens.ResultsOrderedBy.should be == "Date"
71
+ opens.OrderDirection.should be == "ASC"
72
+ opens.PageNumber.should be == 1
73
+ opens.PageSize.should be == 1000
74
+ opens.RecordsOnThisPage.should be == 4
75
+ opens.TotalNumberOfRecords.should be == 4
76
+ opens.NumberOfPages.should be == 1
77
+ end
78
+
79
+ should "return a paged list of subscribers who clicked on a journey email" do
80
+ journey_date = "2019-07-29 10:30"
81
+ stub_get(@auth, "journeys/email/b1b1b1b1b1b1b1b1b1b1/clicks.json" \
82
+ "?date=#{ERB::Util.url_encode(journey_date)}" \
83
+ "&page=1" \
84
+ "&pagesize=2" \
85
+ "&orderdirection=asc", "journey_clicks.json")
86
+
87
+ clicks = @journey.email_clicks email = 'b1b1b1b1b1b1b1b1b1b1', date = journey_date, page = 1, page_size = 2, order_direction = 'asc'
88
+ clicks.Results.size.should be == 2
89
+ clicks.Results.first.EmailAddress.should be == "example+1@example.com"
90
+ clicks.Results.first.Date.should be == "2019-07-29 10:33:00"
91
+ clicks.Results.first.URL.should be == "http://test.com"
92
+ clicks.Results.first.IPAddress.should be == "192.168.0.3"
93
+ clicks.Results.first.Latitude.should be == -33.8683
94
+ clicks.Results.first.Longitude.should be == 151.2086
95
+ clicks.Results.first.City.should be == "Sydney"
96
+ clicks.Results.first.Region.should be == "New South Wales"
97
+ clicks.Results.first.CountryCode.should be == "AU"
98
+ clicks.Results.first.CountryName.should be == "Australia"
99
+
100
+ clicks.ResultsOrderedBy.should be == "Date"
101
+ clicks.OrderDirection.should be == "ASC"
102
+ clicks.PageNumber.should be == 1
103
+ clicks.PageSize.should be == 2
104
+ clicks.RecordsOnThisPage.should be == 2
105
+ clicks.TotalNumberOfRecords.should be == 5
106
+ clicks.NumberOfPages.should be == 3
107
+ end
108
+
109
+ should "return a paged list of subscribers who unsubscribed from a journey email" do
110
+ journey_date = "2019-07-29 10:22"
111
+ stub_get(@auth, "journeys/email/b1b1b1b1b1b1b1b1b1b1/unsubscribes.json" \
112
+ "?date=#{ERB::Util.url_encode(journey_date)}" \
113
+ "&page=1" \
114
+ "&pagesize=10" \
115
+ "&orderdirection=desc", "journey_unsubscribes.json")
116
+
117
+ unsubscribes = @journey.email_unsubscribes email = 'b1b1b1b1b1b1b1b1b1b1', date = journey_date, page = 1, page_size = 10, order_direction = 'desc'
118
+ unsubscribes.Results.size.should be == 3
119
+ unsubscribes.Results.first.EmailAddress.should be == "example+1@example.com"
120
+ unsubscribes.Results.first.Date.should be == "2019-07-29 10:33:00"
121
+ unsubscribes.Results.first.IPAddress.should be == "192.168.0.3"
122
+
123
+ unsubscribes.ResultsOrderedBy.should be == "Date"
124
+ unsubscribes.OrderDirection.should be == "ASC"
125
+ unsubscribes.PageNumber.should be == 1
126
+ unsubscribes.PageSize.should be == 1000
127
+ unsubscribes.RecordsOnThisPage.should be == 4
128
+ unsubscribes.TotalNumberOfRecords.should be == 4
129
+ unsubscribes.NumberOfPages.should be == 1
130
+ end
131
+
132
+ should "return a paged list of emails that bounced for a journey email" do
133
+ journey_date = "2019-07-29 10:31"
134
+ stub_get(@auth, "journeys/email/b1b1b1b1b1b1b1b1b1b1/bounces.json" \
135
+ "?date=#{ERB::Util.url_encode(journey_date)}" \
136
+ "&page=20" \
137
+ "&pagesize=5" \
138
+ "&orderdirection=desc", "journey_bounces.json")
139
+
140
+ bounces = @journey.email_bounces email = 'b1b1b1b1b1b1b1b1b1b1', date = journey_date, page = 20, page_size = 5, order_direction = 'desc'
141
+ bounces.Results.size.should be == 4
142
+ bounces.Results.first.EmailAddress.should be == "example+1@example.com"
143
+ bounces.Results.first.BounceType.should be == "4"
144
+ bounces.Results.first.Date.should be == "2019-07-29 10:33:00"
145
+ bounces.Results.first.Reason.should be == "Soft Bounce - Mailbox Full"
146
+
147
+ bounces.ResultsOrderedBy.should be == "Date"
148
+ bounces.OrderDirection.should be == "ASC"
149
+ bounces.PageNumber.should be == 1
150
+ bounces.PageSize.should be == 1000
151
+ bounces.RecordsOnThisPage.should be == 4
152
+ bounces.TotalNumberOfRecords.should be == 4
153
+ bounces.NumberOfPages.should be == 1
154
+ end
155
+ end
156
+ end
data/test/list_test.rb ADDED
@@ -0,0 +1,288 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class ListTest < Test::Unit::TestCase
4
+ multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
5
+ setup do
6
+ @client_id = "87y8d7qyw8d7yq8w7ydwqwd"
7
+ @list_id = "e3c5f034d68744f7881fdccf13c2daee"
8
+ @list = CreateSend::List.new @auth, @list_id
9
+ end
10
+
11
+ should "create a list without passing in unsubscribe setting" do
12
+ stub_post(@auth, "lists/#{@client_id}.json", "create_list.json")
13
+ list_id = CreateSend::List.create @auth, @client_id, "List One", "", false, ""
14
+ list_id.should be == "e3c5f034d68744f7881fdccf13c2daee"
15
+ end
16
+
17
+ should "create a list passing in unsubscribe setting" do
18
+ stub_post(@auth, "lists/#{@client_id}.json", "create_list.json")
19
+ list_id = CreateSend::List.create @auth, @client_id, "List One", "", false, "", "OnlyThisList"
20
+ list_id.should be == "e3c5f034d68744f7881fdccf13c2daee"
21
+ end
22
+
23
+ should "update a list without passing in unsubscribe setting" do
24
+ stub_put(@auth, "lists/#{@list.list_id}.json", nil)
25
+ @list.update "List One Renamed", "", false, ""
26
+ end
27
+
28
+ should "update a list passing in unsubscribe setting" do
29
+ stub_put(@auth, "lists/#{@list.list_id}.json", nil)
30
+ @list.update "List One Renamed", "", false, "", "OnlyThisList"
31
+ end
32
+
33
+ should "update a list passing in unsubscribe setting and suppression list options" do
34
+ stub_put(@auth, "lists/#{@list.list_id}.json", nil)
35
+ @list.update "List One Renamed", "", false, "", "OnlyThisList", true, true
36
+ end
37
+
38
+ should "delete a list" do
39
+ stub_delete(@auth, "lists/#{@list.list_id}.json", nil)
40
+ @list.delete
41
+ end
42
+
43
+ should "create a custom field" do
44
+ stub_post(@auth, "lists/#{@list.list_id}/customfields.json", "create_custom_field.json")
45
+ personalisation_tag = @list.create_custom_field "new date field", "Date"
46
+ request = FakeWeb.last_request.body
47
+ request.include?("\"FieldName\":\"new date field\"").should be == true
48
+ request.include?("\"DataType\":\"Date\"").should be == true
49
+ request.include?("\"Options\":[]").should be == true
50
+ request.include?("\"VisibleInPreferenceCenter\":true").should be == true
51
+ personalisation_tag.should be == "[newdatefield]"
52
+ end
53
+
54
+ should "create a custom field with options and visible_in_preference_center" do
55
+ stub_post(@auth, "lists/#{@list.list_id}/customfields.json", "create_custom_field.json")
56
+ options = ["one", "two"]
57
+ personalisation_tag = @list.create_custom_field("newsletter format",
58
+ "MultiSelectOne", options, false)
59
+ request = FakeWeb.last_request.body
60
+ request.include?("\"FieldName\":\"newsletter format\"").should be == true
61
+ request.include?("\"DataType\":\"MultiSelectOne\"").should be == true
62
+ request.include?("\"Options\":[\"one\",\"two\"]").should be == true
63
+ request.include?("\"VisibleInPreferenceCenter\":false").should be == true
64
+ personalisation_tag.should be == "[newdatefield]"
65
+ end
66
+
67
+ should "update a custom field" do
68
+ key = "[mycustomfield]"
69
+ stub_put(@auth, "lists/#{@list.list_id}/customfields/#{ERB::Util.url_encode(key)}.json", "update_custom_field.json")
70
+ personalisation_tag = @list.update_custom_field key, "my renamed custom field", true
71
+ request = FakeWeb.last_request.body
72
+ request.include?("\"FieldName\":\"my renamed custom field\"").should be == true
73
+ request.include?("\"VisibleInPreferenceCenter\":true").should be == true
74
+ personalisation_tag.should be == "[myrenamedcustomfield]"
75
+ end
76
+
77
+ should "delete a custom field" do
78
+ custom_field_key = "[newdatefield]"
79
+ stub_delete(@auth, "lists/#{@list.list_id}/customfields/#{ERB::Util.url_encode(custom_field_key)}.json", nil)
80
+ @list.delete_custom_field custom_field_key
81
+ end
82
+
83
+ should "update the options of a multi-optioned custom field" do
84
+ custom_field_key = "[newdatefield]"
85
+ new_options = [ "one", "two", "three" ]
86
+ stub_put(@auth, "lists/#{@list.list_id}/customfields/#{ERB::Util.url_encode(custom_field_key)}/options.json", nil)
87
+ @list.update_custom_field_options custom_field_key, new_options, true
88
+ end
89
+
90
+ should "get the details of a list" do
91
+ stub_get(@auth, "lists/#{@list.list_id}.json", "list_details.json")
92
+ details = @list.details
93
+ details.ConfirmedOptIn.should be == false
94
+ details.Title.should be == "a non-basic list :)"
95
+ details.UnsubscribePage.should be == ""
96
+ details.ListID.should be == "2fe4c8f0373ce320e2200596d7ef168f"
97
+ details.ConfirmationSuccessPage.should be == ""
98
+ details.UnsubscribeSetting.should be == "AllClientLists"
99
+ end
100
+
101
+ should "get the custom fields for a list" do
102
+ stub_get(@auth, "lists/#{@list.list_id}/customfields.json", "custom_fields.json")
103
+ cfs = @list.custom_fields
104
+ cfs.size.should be == 3
105
+ cfs.first.FieldName.should be == "website"
106
+ cfs.first.Key.should be == "[website]"
107
+ cfs.first.DataType.should be == "Text"
108
+ cfs.first.FieldOptions.should be == []
109
+ cfs.first.VisibleInPreferenceCenter.should be == true
110
+ end
111
+
112
+ should "get the segments for a list" do
113
+ stub_get(@auth, "lists/#{@list.list_id}/segments.json", "segments.json")
114
+ segments = @list.segments
115
+ segments.size.should be == 2
116
+ segments.first.ListID.should be == 'a58ee1d3039b8bec838e6d1482a8a965'
117
+ segments.first.SegmentID.should be == '46aa5e01fd43381863d4e42cf277d3a9'
118
+ segments.first.Title.should be == 'Segment One'
119
+ end
120
+
121
+ should "get the stats for a list" do
122
+ stub_get(@auth, "lists/#{@list.list_id}/stats.json", "list_stats.json")
123
+ stats = @list.stats
124
+ stats.TotalActiveSubscribers.should be == 6
125
+ stats.TotalUnsubscribes.should be == 2
126
+ stats.TotalDeleted.should be == 0
127
+ stats.TotalBounces.should be == 0
128
+ end
129
+
130
+ should "get the active subscribers for a list" do
131
+ min_date = "2010-01-01"
132
+ stub_get(@auth, "lists/#{@list.list_id}/active.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}&includetrackingpreference=false&includesmspreference=false",
133
+ "active_subscribers.json")
134
+ res = @list.active min_date
135
+ res.ResultsOrderedBy.should be == "email"
136
+ res.OrderDirection.should be == "asc"
137
+ res.PageNumber.should be == 1
138
+ res.PageSize.should be == 1000
139
+ res.RecordsOnThisPage.should be == 5
140
+ res.TotalNumberOfRecords.should be == 5
141
+ res.NumberOfPages.should be == 1
142
+ res.Results.size.should be == 5
143
+ res.Results.first.EmailAddress.should be == "subs+7t8787Y@example.com"
144
+ res.Results.first.Name.should be =="Person One"
145
+ res.Results.first.Date.should be == "2010-10-25 10:28:00"
146
+ res.Results.first.ListJoinedDate.should be == "2010-10-25 10:28:00"
147
+ res.Results.first.State.should be == "Active"
148
+ res.Results.first.CustomFields.size.should be == 5
149
+ res.Results.first.CustomFields[0].Key.should be == "website"
150
+ res.Results.first.CustomFields[0].Value.should be == "http://example.com"
151
+ res.Results.first.CustomFields[1].Key.should be == "multi select field"
152
+ res.Results.first.CustomFields[1].Value.should be == "option one"
153
+ res.Results.first.CustomFields[2].Key.should be == "multi select field"
154
+ res.Results.first.CustomFields[2].Value.should be == "option two"
155
+ res.Results.first.ReadsEmailWith.should be == "Gmail"
156
+ end
157
+
158
+ should "get the unconfirmed subscribers for a list" do
159
+ min_date = "2010-01-01"
160
+ stub_get(@auth, "lists/#{@list.list_id}/unconfirmed.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}&includetrackingpreference=true&includesmspreference=true",
161
+ "unconfirmed_subscribers.json")
162
+ res = @list.unconfirmed(min_date, 1, 1000, "email", "asc", true, include_sms_preference:true)
163
+ res.ResultsOrderedBy.should be == "email"
164
+ res.OrderDirection.should be == "asc"
165
+ res.PageNumber.should be == 1
166
+ res.PageSize.should be == 1000
167
+ res.RecordsOnThisPage.should be == 2
168
+ res.TotalNumberOfRecords.should be == 2
169
+ res.NumberOfPages.should be == 1
170
+ res.Results.size.should be == 2
171
+ res.Results.first.EmailAddress.should be == "subs+7t8787Y@example.com"
172
+ res.Results.first.Name.should be =="Unconfirmed One"
173
+ res.Results.first.Date.should be =="2010-10-25 10:28:00"
174
+ res.Results.first.ListJoinedDate.should be =="2010-10-25 10:28:00"
175
+ res.Results.first.State.should be == "Unconfirmed"
176
+ res.Results.first.ConsentToTrack.should be == "Yes"
177
+ res.Results.first.ConsentToSendSms.should be == "No"
178
+ end
179
+
180
+ should "get the unsubscribed subscribers for a list" do
181
+ min_date = "2010-01-01"
182
+ stub_get(@auth, "lists/#{@list.list_id}/unsubscribed.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}&includetrackingpreference=false&includesmspreference=false",
183
+ "unsubscribed_subscribers.json")
184
+ res = @list.unsubscribed min_date
185
+ res.ResultsOrderedBy.should be == "email"
186
+ res.OrderDirection.should be == "asc"
187
+ res.PageNumber.should be == 1
188
+ res.PageSize.should be == 1000
189
+ res.RecordsOnThisPage.should be == 5
190
+ res.TotalNumberOfRecords.should be == 5
191
+ res.NumberOfPages.should be == 1
192
+ res.Results.size.should be == 5
193
+ res.Results.first.EmailAddress.should be == "subscriber@example.com"
194
+ res.Results.first.Name.should be == "Unsub One"
195
+ res.Results.first.Date.should be == "2010-10-25 13:11:00"
196
+ res.Results.first.ListJoinedDate.should be == "2010-10-25 13:11:00"
197
+ res.Results.first.State.should be == "Unsubscribed"
198
+ res.Results.first.CustomFields.size.should be == 0
199
+ res.Results.first.ReadsEmailWith.should be == "Gmail"
200
+ end
201
+
202
+ should "get the deleted subscribers for a list" do
203
+ min_date = "2010-01-01"
204
+ stub_get(@auth, "lists/#{@list.list_id}/deleted.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}&includetrackingpreference=false&includesmspreference=false",
205
+ "deleted_subscribers.json")
206
+ res = @list.deleted min_date
207
+ res.ResultsOrderedBy.should be == "email"
208
+ res.OrderDirection.should be == "asc"
209
+ res.PageNumber.should be == 1
210
+ res.PageSize.should be == 1000
211
+ res.RecordsOnThisPage.should be == 5
212
+ res.TotalNumberOfRecords.should be == 5
213
+ res.NumberOfPages.should be == 1
214
+ res.Results.size.should be == 5
215
+ res.Results.first.EmailAddress.should be == "subscriber@example.com"
216
+ res.Results.first.Name.should be == "Deleted One"
217
+ res.Results.first.Date.should be == "2010-10-25 13:11:00"
218
+ res.Results.first.ListJoinedDate.should be == "2010-10-25 13:11:00"
219
+ res.Results.first.State.should be == "Deleted"
220
+ res.Results.first.CustomFields.size.should be == 0
221
+ res.Results.first.ReadsEmailWith.should be == "Gmail"
222
+ end
223
+
224
+ should "get the bounced subscribers for a list" do
225
+ min_date = "2010-01-01"
226
+ stub_get(@auth, "lists/#{@list.list_id}/bounced.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}&includetrackingpreference=false&includesmspreference=false",
227
+ "bounced_subscribers.json")
228
+ res = @list.bounced min_date
229
+ res.ResultsOrderedBy.should be == "email"
230
+ res.OrderDirection.should be == "asc"
231
+ res.PageNumber.should be == 1
232
+ res.PageSize.should be == 1000
233
+ res.RecordsOnThisPage.should be == 1
234
+ res.TotalNumberOfRecords.should be == 1
235
+ res.NumberOfPages.should be == 1
236
+ res.Results.size.should be == 1
237
+ res.Results.first.EmailAddress.should be == "bouncedsubscriber@example.com"
238
+ res.Results.first.Name.should be == "Bounced One"
239
+ res.Results.first.Date.should be == "2010-10-25 13:11:00"
240
+ res.Results.first.ListJoinedDate.should be == "2010-10-25 13:11:00"
241
+ res.Results.first.State.should be == "Bounced"
242
+ res.Results.first.CustomFields.size.should be == 0
243
+ res.Results.first.ReadsEmailWith.should be == ""
244
+ end
245
+
246
+ should "get the webhooks for a list" do
247
+ stub_get(@auth, "lists/#{@list.list_id}/webhooks.json", "list_webhooks.json")
248
+ hooks = @list.webhooks
249
+ hooks.size.should be == 2
250
+ hooks.first.WebhookID.should be == "943678317049bc13"
251
+ hooks.first.Events.size.should be == 1
252
+ hooks.first.Events.first.should be == "Deactivate"
253
+ hooks.first.Url.should be == "http://www.postbin.org/d9w8ud9wud9w"
254
+ hooks.first.Status.should be == "Active"
255
+ hooks.first.PayloadFormat.should be == "Json"
256
+ end
257
+
258
+ should "create a webhook for a list" do
259
+ stub_post(@auth, "lists/#{@list.list_id}/webhooks.json", "create_list_webhook.json")
260
+ webhook_id = @list.create_webhook ["Unsubscribe", "Spam"], "http://example.com/unsub", "json"
261
+ webhook_id.should be == "6a783d359bd44ef62c6ca0d3eda4412a"
262
+ end
263
+
264
+ should "test a webhook for a list" do
265
+ webhook_id = "jiuweoiwueoiwueowiueo"
266
+ stub_get(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}/test.json", nil)
267
+ @list.test_webhook webhook_id
268
+ end
269
+
270
+ should "delete a webhook for a list" do
271
+ webhook_id = "jiuweoiwueoiwueowiueo"
272
+ stub_delete(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}.json", nil)
273
+ @list.delete_webhook webhook_id
274
+ end
275
+
276
+ should "activate a webhook for a list" do
277
+ webhook_id = "jiuweoiwueoiwueowiueo"
278
+ stub_put(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}/activate.json", nil)
279
+ @list.activate_webhook webhook_id
280
+ end
281
+
282
+ should "de-activate a webhook for a list" do
283
+ webhook_id = "jiuweoiwueoiwueowiueo"
284
+ stub_put(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}/deactivate.json", nil)
285
+ @list.deactivate_webhook webhook_id
286
+ end
287
+ end
288
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class PersonTest < Test::Unit::TestCase
4
+ multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
5
+ setup do
6
+ @client_id = "d98h2938d9283d982u3d98u88"
7
+ @person = CreateSend::Person.new @auth, @client_id, "person@example.com"
8
+ end
9
+
10
+ should "get a person by client id and email address" do
11
+ email = "person@example.com"
12
+ stub_get(@auth, "clients/#{@client_id}/people.json?email=#{ERB::Util.url_encode(email)}", "person_details.json")
13
+ person = CreateSend::Person.get @auth, @client_id, email
14
+ person.EmailAddress.should be == email
15
+ person.Name.should be == "Person One"
16
+ person.AccessLevel.should be == 1023
17
+ person.Status.should be == "Active"
18
+ end
19
+
20
+ should "add a person" do
21
+ stub_post(@auth, "clients/#{@client_id}/people.json", "add_person.json")
22
+ result = CreateSend::Person.add @auth, @client_id, "person@example.com", "Person", 0, "Password"
23
+ result.EmailAddress.should be == "person@example.com"
24
+ end
25
+
26
+ should "update a person" do
27
+ email = "person@example.com"
28
+ new_email = "new_email_address@example.com"
29
+ stub_put(@auth, "clients/#{@client_id}/people.json?email=#{ERB::Util.url_encode(email)}", nil)
30
+ @person.update new_email, "Person", 1023, "NewPassword"
31
+ @person.email_address.should be == new_email
32
+ end
33
+
34
+ should "delete a person" do
35
+ stub_delete(@auth, "clients/#{@person.client_id}/people.json?email=#{ERB::Util.url_encode(@person.email_address)}", nil)
36
+ @person.delete
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class SegmentTest < Test::Unit::TestCase
4
+ multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
5
+ setup do
6
+ @segment = CreateSend::Segment.new @auth, '98y2e98y289dh89h938389'
7
+ end
8
+
9
+ should "create a new segment" do
10
+ list_id = "2983492834987394879837498"
11
+ rule_groups = [ { :Rules => [ { :RuleType => "EmailAddress", :Clause => "CONTAINS example.com" } ] } ]
12
+ stub_post(@auth, "segments/#{list_id}.json", "create_segment.json")
13
+ res = CreateSend::Segment.create @auth, list_id, "new segment title", rule_groups
14
+ res.should be == "0246c2aea610a3545d9780bf6ab89006"
15
+ end
16
+
17
+ should "update a segment" do
18
+ rules = [ { :Rules => [ { :RuleType => "Name", :Clause => "PROVIDED" } ] } ]
19
+ stub_put(@auth, "segments/#{@segment.segment_id}.json", nil)
20
+ @segment.update "new title for segment", rules
21
+ end
22
+
23
+ should "add a rule group to a segment" do
24
+ rule_group = [ { :RuleType => "EmailAddress", :Clause => "CONTAINS @hello.com" } ]
25
+ stub_post(@auth, "segments/#{@segment.segment_id}/rules.json", nil)
26
+ @segment.add_rule_group rule_group
27
+ end
28
+
29
+ should "get the active subscribers for a particular segment in the list" do
30
+ min_date = "2010-01-01"
31
+ stub_get(@auth, "segments/#{@segment.segment_id}/active.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{ERB::Util.url_encode(min_date)}&includetrackingpreference=false",
32
+ "segment_subscribers.json")
33
+ res = @segment.subscribers min_date
34
+ res.ResultsOrderedBy.should be == "email"
35
+ res.OrderDirection.should be == "asc"
36
+ res.PageNumber.should be == 1
37
+ res.PageSize.should be == 1000
38
+ res.RecordsOnThisPage.should be == 2
39
+ res.TotalNumberOfRecords.should be == 2
40
+ res.NumberOfPages.should be == 1
41
+ res.Results.size.should be == 2
42
+ res.Results.first.EmailAddress.should be == "personone@example.com"
43
+ res.Results.first.Name.should be == "Person One"
44
+ res.Results.first.Date.should be == "2010-10-27 13:13:00"
45
+ res.Results.first.ListJoinedDate.should be == "2010-10-27 13:13:00"
46
+ res.Results.first.State.should be == "Active"
47
+ res.Results.first.CustomFields.should be == []
48
+ end
49
+
50
+ should "delete a segment" do
51
+ stub_delete(@auth, "segments/#{@segment.segment_id}.json", nil)
52
+ @segment.delete
53
+ end
54
+
55
+ should "get the details of a segment" do
56
+ stub_get(@auth, "segments/#{@segment.segment_id}.json", "segment_details.json")
57
+ res = @segment.details
58
+ res.ActiveSubscribers.should be == 0
59
+ res.RuleGroups.size.should be == 2
60
+ res.RuleGroups.first.Rules.size.should be == 1
61
+ res.RuleGroups.first.Rules.first.RuleType.should be == "EmailAddress"
62
+ res.RuleGroups.first.Rules.first.Clause.should be == "CONTAINS @hello.com"
63
+ res.ListID.should be == "2bea949d0bf96148c3e6a209d2e82060"
64
+ res.SegmentID.should be == "dba84a225d5ce3d19105d7257baac46f"
65
+ res.Title.should be == "My Segment"
66
+ end
67
+
68
+ should "clear a segment's rules" do
69
+ stub_delete(@auth, "segments/#{@segment.segment_id}/rules.json", nil)
70
+ @segment.clear_rules
71
+ end
72
+
73
+ end
74
+ end