createsend 2.5.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +3 -2
- data/Gemfile.lock +16 -14
- data/HISTORY.md +55 -2
- data/LICENSE +1 -1
- data/README.md +162 -44
- data/createsend.gemspec +7 -8
- data/lib/createsend.rb +1 -156
- data/lib/createsend/administrator.rb +15 -15
- data/lib/createsend/campaign.rb +29 -47
- data/lib/createsend/client.rb +11 -12
- data/lib/createsend/createsend.rb +245 -0
- data/lib/createsend/list.rb +36 -55
- data/lib/createsend/person.rb +13 -13
- data/lib/createsend/segment.rb +14 -15
- data/lib/createsend/subscriber.rb +16 -15
- data/lib/createsend/template.rb +9 -10
- data/lib/createsend/version.rb +1 -1
- data/test/administrator_test.rb +10 -12
- data/test/campaign_test.rb +23 -25
- data/test/client_test.rb +26 -28
- data/test/createsend_test.rb +202 -61
- data/test/fixtures/expired_oauth_token_api_error.json +4 -0
- data/test/fixtures/oauth_exchange_token.json +5 -0
- data/test/fixtures/oauth_exchange_token_error.json +4 -0
- data/test/fixtures/refresh_oauth_token.json +5 -0
- data/test/helper.rb +38 -5
- data/test/list_test.rb +30 -32
- data/test/person_test.rb +9 -11
- data/test/segment_test.rb +12 -14
- data/test/subscriber_test.rb +24 -26
- data/test/template_test.rb +7 -9
- metadata +22 -23
data/test/helper.rb
CHANGED
@@ -3,7 +3,6 @@ require 'pathname'
|
|
3
3
|
|
4
4
|
require 'shoulda'
|
5
5
|
require 'matchy'
|
6
|
-
require 'mocha/setup'
|
7
6
|
require 'fakeweb'
|
8
7
|
|
9
8
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -18,19 +17,53 @@ def fixture_file(filename)
|
|
18
17
|
File.read(file_path)
|
19
18
|
end
|
20
19
|
|
21
|
-
def createsend_url(
|
22
|
-
|
20
|
+
def createsend_url(auth, url)
|
21
|
+
if not url =~ /^http/
|
22
|
+
auth_section = ''
|
23
|
+
auth_section = "#{auth[:api_key]}:x@" if auth and auth.has_key? :api_key
|
24
|
+
result = "https://#{auth_section}api.createsend.com/api/v3/#{url}"
|
25
|
+
else
|
26
|
+
result = url
|
27
|
+
end
|
28
|
+
result
|
23
29
|
end
|
24
30
|
|
25
|
-
def stub_request(method,
|
31
|
+
def stub_request(method, auth, url, filename, status=nil)
|
26
32
|
options = {:body => ""}
|
27
33
|
options.merge!({:body => fixture_file(filename)}) if filename
|
28
34
|
options.merge!({:status => status}) if status
|
29
35
|
options.merge!(:content_type => "application/json; charset=utf-8")
|
30
|
-
FakeWeb.register_uri(method, createsend_url(
|
36
|
+
FakeWeb.register_uri(method, createsend_url(auth, url), options)
|
31
37
|
end
|
32
38
|
|
33
39
|
def stub_get(*args); stub_request(:get, *args) end
|
34
40
|
def stub_post(*args); stub_request(:post, *args) end
|
35
41
|
def stub_put(*args); stub_request(:put, *args) end
|
36
42
|
def stub_delete(*args); stub_request(:delete, *args) end
|
43
|
+
|
44
|
+
def multiple_contexts(*contexts, &blk)
|
45
|
+
contexts.each do |context|
|
46
|
+
send(context, &blk)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def authenticated_using_oauth_context(&blk)
|
51
|
+
context "when an api caller is authenticated using oauth" do
|
52
|
+
setup do
|
53
|
+
@access_token = 'joidjo2i3joi3je'
|
54
|
+
@refresh_token = 'j89u98eu9e8ufe'
|
55
|
+
@auth = {:access_token => @access_token, :refresh_token => @refresh_token}
|
56
|
+
end
|
57
|
+
merge_block(&blk)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def authenticated_using_api_key_context(&blk)
|
62
|
+
context "when an api caller is authenticated using an api key" do
|
63
|
+
setup do
|
64
|
+
@api_key = '123123123123123123123'
|
65
|
+
@auth = {:api_key => @api_key}
|
66
|
+
end
|
67
|
+
merge_block(&blk)
|
68
|
+
end
|
69
|
+
end
|
data/test/list_test.rb
CHANGED
@@ -1,49 +1,47 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/helper'
|
2
2
|
|
3
3
|
class ListTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
|
5
5
|
setup do
|
6
|
-
@api_key = '123123123123123123123'
|
7
|
-
CreateSend.api_key @api_key
|
8
6
|
@client_id = "87y8d7qyw8d7yq8w7ydwqwd"
|
9
7
|
@list_id = "e3c5f034d68744f7881fdccf13c2daee"
|
10
|
-
@list = CreateSend::List.new @list_id
|
8
|
+
@list = CreateSend::List.new @auth, @list_id
|
11
9
|
end
|
12
10
|
|
13
11
|
should "create a list without passing in unsubscribe setting" do
|
14
|
-
stub_post(@
|
15
|
-
list_id = CreateSend::List.create @client_id, "List One", "", false, ""
|
12
|
+
stub_post(@auth, "lists/#{@client_id}.json", "create_list.json")
|
13
|
+
list_id = CreateSend::List.create @auth, @client_id, "List One", "", false, ""
|
16
14
|
list_id.should == "e3c5f034d68744f7881fdccf13c2daee"
|
17
15
|
end
|
18
16
|
|
19
17
|
should "create a list passing in unsubscribe setting" do
|
20
|
-
stub_post(@
|
21
|
-
list_id = CreateSend::List.create @client_id, "List One", "", false, "", "OnlyThisList"
|
18
|
+
stub_post(@auth, "lists/#{@client_id}.json", "create_list.json")
|
19
|
+
list_id = CreateSend::List.create @auth, @client_id, "List One", "", false, "", "OnlyThisList"
|
22
20
|
list_id.should == "e3c5f034d68744f7881fdccf13c2daee"
|
23
21
|
end
|
24
22
|
|
25
23
|
should "update a list without passing in unsubscribe setting" do
|
26
|
-
stub_put(@
|
24
|
+
stub_put(@auth, "lists/#{@list.list_id}.json", nil)
|
27
25
|
@list.update "List One Renamed", "", false, ""
|
28
26
|
end
|
29
27
|
|
30
28
|
should "update a list passing in unsubscribe setting" do
|
31
|
-
stub_put(@
|
29
|
+
stub_put(@auth, "lists/#{@list.list_id}.json", nil)
|
32
30
|
@list.update "List One Renamed", "", false, "", "OnlyThisList"
|
33
31
|
end
|
34
32
|
|
35
33
|
should "update a list passing in unsubscribe setting and suppression list options" do
|
36
|
-
stub_put(@
|
34
|
+
stub_put(@auth, "lists/#{@list.list_id}.json", nil)
|
37
35
|
@list.update "List One Renamed", "", false, "", "OnlyThisList", true, true
|
38
36
|
end
|
39
37
|
|
40
38
|
should "delete a list" do
|
41
|
-
stub_delete(@
|
39
|
+
stub_delete(@auth, "lists/#{@list.list_id}.json", nil)
|
42
40
|
@list.delete
|
43
41
|
end
|
44
42
|
|
45
43
|
should "create a custom field" do
|
46
|
-
stub_post(@
|
44
|
+
stub_post(@auth, "lists/#{@list.list_id}/customfields.json", "create_custom_field.json")
|
47
45
|
personalisation_tag = @list.create_custom_field "new date field", "Date"
|
48
46
|
request = FakeWeb.last_request.body
|
49
47
|
request.include?("\"FieldName\":\"new date field\"").should == true
|
@@ -54,7 +52,7 @@ class ListTest < Test::Unit::TestCase
|
|
54
52
|
end
|
55
53
|
|
56
54
|
should "create a custom field with options and visible_in_preference_center" do
|
57
|
-
stub_post(@
|
55
|
+
stub_post(@auth, "lists/#{@list.list_id}/customfields.json", "create_custom_field.json")
|
58
56
|
options = ["one", "two"]
|
59
57
|
personalisation_tag = @list.create_custom_field("newsletter format",
|
60
58
|
"MultiSelectOne", options, false)
|
@@ -68,7 +66,7 @@ class ListTest < Test::Unit::TestCase
|
|
68
66
|
|
69
67
|
should "update a custom field" do
|
70
68
|
key = "[mycustomfield]"
|
71
|
-
stub_put(@
|
69
|
+
stub_put(@auth, "lists/#{@list.list_id}/customfields/#{CGI.escape(key)}.json", "update_custom_field.json")
|
72
70
|
personalisation_tag = @list.update_custom_field key, "my renamed custom field", true
|
73
71
|
request = FakeWeb.last_request.body
|
74
72
|
request.include?("\"FieldName\":\"my renamed custom field\"").should == true
|
@@ -78,19 +76,19 @@ class ListTest < Test::Unit::TestCase
|
|
78
76
|
|
79
77
|
should "delete a custom field" do
|
80
78
|
custom_field_key = "[newdatefield]"
|
81
|
-
stub_delete(@
|
79
|
+
stub_delete(@auth, "lists/#{@list.list_id}/customfields/#{CGI.escape(custom_field_key)}.json", nil)
|
82
80
|
@list.delete_custom_field custom_field_key
|
83
81
|
end
|
84
82
|
|
85
83
|
should "update the options of a multi-optioned custom field" do
|
86
84
|
custom_field_key = "[newdatefield]"
|
87
85
|
new_options = [ "one", "two", "three" ]
|
88
|
-
stub_put(@
|
86
|
+
stub_put(@auth, "lists/#{@list.list_id}/customfields/#{CGI.escape(custom_field_key)}/options.json", nil)
|
89
87
|
@list.update_custom_field_options custom_field_key, new_options, true
|
90
88
|
end
|
91
89
|
|
92
90
|
should "get the details of a list" do
|
93
|
-
stub_get(@
|
91
|
+
stub_get(@auth, "lists/#{@list.list_id}.json", "list_details.json")
|
94
92
|
details = @list.details
|
95
93
|
details.ConfirmedOptIn.should == false
|
96
94
|
details.Title.should == "a non-basic list :)"
|
@@ -101,7 +99,7 @@ class ListTest < Test::Unit::TestCase
|
|
101
99
|
end
|
102
100
|
|
103
101
|
should "get the custom fields for a list" do
|
104
|
-
stub_get(@
|
102
|
+
stub_get(@auth, "lists/#{@list.list_id}/customfields.json", "custom_fields.json")
|
105
103
|
cfs = @list.custom_fields
|
106
104
|
cfs.size.should == 3
|
107
105
|
cfs.first.FieldName.should == "website"
|
@@ -112,7 +110,7 @@ class ListTest < Test::Unit::TestCase
|
|
112
110
|
end
|
113
111
|
|
114
112
|
should "get the segments for a list" do
|
115
|
-
stub_get(@
|
113
|
+
stub_get(@auth, "lists/#{@list.list_id}/segments.json", "segments.json")
|
116
114
|
segments = @list.segments
|
117
115
|
segments.size.should == 2
|
118
116
|
segments.first.ListID.should == 'a58ee1d3039b8bec838e6d1482a8a965'
|
@@ -121,7 +119,7 @@ class ListTest < Test::Unit::TestCase
|
|
121
119
|
end
|
122
120
|
|
123
121
|
should "get the stats for a list" do
|
124
|
-
stub_get(@
|
122
|
+
stub_get(@auth, "lists/#{@list.list_id}/stats.json", "list_stats.json")
|
125
123
|
stats = @list.stats
|
126
124
|
stats.TotalActiveSubscribers.should == 6
|
127
125
|
stats.TotalUnsubscribes.should == 2
|
@@ -131,7 +129,7 @@ class ListTest < Test::Unit::TestCase
|
|
131
129
|
|
132
130
|
should "get the active subscribers for a list" do
|
133
131
|
min_date = "2010-01-01"
|
134
|
-
stub_get(@
|
132
|
+
stub_get(@auth, "lists/#{@list.list_id}/active.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
135
133
|
"active_subscribers.json")
|
136
134
|
res = @list.active min_date
|
137
135
|
res.ResultsOrderedBy.should == "email"
|
@@ -158,7 +156,7 @@ class ListTest < Test::Unit::TestCase
|
|
158
156
|
|
159
157
|
should "get the unconfirmed subscribers for a list" do
|
160
158
|
min_date = "2010-01-01"
|
161
|
-
stub_get(@
|
159
|
+
stub_get(@auth, "lists/#{@list.list_id}/unconfirmed.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
162
160
|
"unconfirmed_subscribers.json")
|
163
161
|
res = @list.unconfirmed min_date
|
164
162
|
res.ResultsOrderedBy.should == "email"
|
@@ -176,7 +174,7 @@ class ListTest < Test::Unit::TestCase
|
|
176
174
|
|
177
175
|
should "get the unsubscribed subscribers for a list" do
|
178
176
|
min_date = "2010-01-01"
|
179
|
-
stub_get(@
|
177
|
+
stub_get(@auth, "lists/#{@list.list_id}/unsubscribed.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
180
178
|
"unsubscribed_subscribers.json")
|
181
179
|
res = @list.unsubscribed min_date
|
182
180
|
res.ResultsOrderedBy.should == "email"
|
@@ -197,7 +195,7 @@ class ListTest < Test::Unit::TestCase
|
|
197
195
|
|
198
196
|
should "get the deleted subscribers for a list" do
|
199
197
|
min_date = "2010-01-01"
|
200
|
-
stub_get(@
|
198
|
+
stub_get(@auth, "lists/#{@list.list_id}/deleted.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
201
199
|
"deleted_subscribers.json")
|
202
200
|
res = @list.deleted min_date
|
203
201
|
res.ResultsOrderedBy.should == "email"
|
@@ -218,7 +216,7 @@ class ListTest < Test::Unit::TestCase
|
|
218
216
|
|
219
217
|
should "get the bounced subscribers for a list" do
|
220
218
|
min_date = "2010-01-01"
|
221
|
-
stub_get(@
|
219
|
+
stub_get(@auth, "lists/#{@list.list_id}/bounced.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
222
220
|
"bounced_subscribers.json")
|
223
221
|
res = @list.bounced min_date
|
224
222
|
res.ResultsOrderedBy.should == "email"
|
@@ -238,7 +236,7 @@ class ListTest < Test::Unit::TestCase
|
|
238
236
|
end
|
239
237
|
|
240
238
|
should "get the webhooks for a list" do
|
241
|
-
stub_get(@
|
239
|
+
stub_get(@auth, "lists/#{@list.list_id}/webhooks.json", "list_webhooks.json")
|
242
240
|
hooks = @list.webhooks
|
243
241
|
hooks.size.should == 2
|
244
242
|
hooks.first.WebhookID.should == "943678317049bc13"
|
@@ -250,32 +248,32 @@ class ListTest < Test::Unit::TestCase
|
|
250
248
|
end
|
251
249
|
|
252
250
|
should "create a webhook for a list" do
|
253
|
-
stub_post(@
|
251
|
+
stub_post(@auth, "lists/#{@list.list_id}/webhooks.json", "create_list_webhook.json")
|
254
252
|
webhook_id = @list.create_webhook ["Unsubscribe", "Spam"], "http://example.com/unsub", "json"
|
255
253
|
webhook_id.should == "6a783d359bd44ef62c6ca0d3eda4412a"
|
256
254
|
end
|
257
255
|
|
258
256
|
should "test a webhook for a list" do
|
259
257
|
webhook_id = "jiuweoiwueoiwueowiueo"
|
260
|
-
stub_get(@
|
258
|
+
stub_get(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}/test.json", nil)
|
261
259
|
@list.test_webhook webhook_id
|
262
260
|
end
|
263
261
|
|
264
262
|
should "delete a webhook for a list" do
|
265
263
|
webhook_id = "jiuweoiwueoiwueowiueo"
|
266
|
-
stub_delete(@
|
264
|
+
stub_delete(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}.json", nil)
|
267
265
|
@list.delete_webhook webhook_id
|
268
266
|
end
|
269
267
|
|
270
268
|
should "activate a webhook for a list" do
|
271
269
|
webhook_id = "jiuweoiwueoiwueowiueo"
|
272
|
-
stub_put(@
|
270
|
+
stub_put(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}/activate.json", nil)
|
273
271
|
@list.activate_webhook webhook_id
|
274
272
|
end
|
275
273
|
|
276
274
|
should "de-activate a webhook for a list" do
|
277
275
|
webhook_id = "jiuweoiwueoiwueowiueo"
|
278
|
-
stub_put(@
|
276
|
+
stub_put(@auth, "lists/#{@list.list_id}/webhooks/#{webhook_id}/deactivate.json", nil)
|
279
277
|
@list.deactivate_webhook webhook_id
|
280
278
|
end
|
281
279
|
end
|
data/test/person_test.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/helper'
|
2
2
|
|
3
3
|
class PersonTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
|
5
5
|
setup do
|
6
|
-
@api_key = '123123123123123123123'
|
7
|
-
CreateSend.api_key @api_key
|
8
6
|
@client_id = "d98h2938d9283d982u3d98u88"
|
9
|
-
@person = CreateSend::Person.new @client_id, "person@example.com"
|
7
|
+
@person = CreateSend::Person.new @auth, @client_id, "person@example.com"
|
10
8
|
end
|
11
|
-
|
9
|
+
|
12
10
|
should "get a person by client id and email address" do
|
13
11
|
email = "person@example.com"
|
14
|
-
stub_get(@
|
15
|
-
person = CreateSend::Person.get @client_id, email
|
12
|
+
stub_get(@auth, "clients/#{@client_id}/people.json?email=#{CGI.escape(email)}", "person_details.json")
|
13
|
+
person = CreateSend::Person.get @auth, @client_id, email
|
16
14
|
person.EmailAddress.should == email
|
17
15
|
person.Name.should == "Person One"
|
18
16
|
person.AccessLevel.should == 1023
|
@@ -20,21 +18,21 @@ class PersonTest < Test::Unit::TestCase
|
|
20
18
|
end
|
21
19
|
|
22
20
|
should "add a person" do
|
23
|
-
stub_post(@
|
24
|
-
result = CreateSend::Person.add @client_id, "person@example.com", "Person", 0, "Password"
|
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"
|
25
23
|
result.EmailAddress.should == "person@example.com"
|
26
24
|
end
|
27
25
|
|
28
26
|
should "update a person" do
|
29
27
|
email = "person@example.com"
|
30
28
|
new_email = "new_email_address@example.com"
|
31
|
-
stub_put(@
|
29
|
+
stub_put(@auth, "clients/#{@client_id}/people.json?email=#{CGI.escape(email)}", nil)
|
32
30
|
@person.update new_email, "Person", 1023, "NewPassword"
|
33
31
|
@person.email_address.should == new_email
|
34
32
|
end
|
35
33
|
|
36
34
|
should "delete a person" do
|
37
|
-
stub_delete(@
|
35
|
+
stub_delete(@auth, "clients/#{@person.client_id}/people.json?email=#{CGI.escape(@person.email_address)}", nil)
|
38
36
|
@person.delete
|
39
37
|
end
|
40
38
|
end
|
data/test/segment_test.rb
CHANGED
@@ -1,36 +1,34 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/helper'
|
2
2
|
|
3
3
|
class SegmentTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
|
5
5
|
setup do
|
6
|
-
@
|
7
|
-
CreateSend.api_key @api_key
|
8
|
-
@segment = CreateSend::Segment.new('98y2e98y289dh89h938389')
|
6
|
+
@segment = CreateSend::Segment.new @auth, '98y2e98y289dh89h938389'
|
9
7
|
end
|
10
8
|
|
11
9
|
should "create a new segment" do
|
12
10
|
list_id = "2983492834987394879837498"
|
13
11
|
rules = [ { :Subject => "EmailAddress", :Clauses => [ "CONTAINS example.com" ] } ]
|
14
|
-
stub_post(@
|
15
|
-
res = CreateSend::Segment.create list_id, "new segment title", rules
|
12
|
+
stub_post(@auth, "segments/#{list_id}.json", "create_segment.json")
|
13
|
+
res = CreateSend::Segment.create @auth, list_id, "new segment title", rules
|
16
14
|
res.should == "0246c2aea610a3545d9780bf6ab89006"
|
17
15
|
end
|
18
16
|
|
19
17
|
should "update a segment" do
|
20
18
|
rules = [ { :Subject => "Name", :Clauses => [ "EQUALS subscriber" ] } ]
|
21
|
-
stub_put(@
|
19
|
+
stub_put(@auth, "segments/#{@segment.segment_id}.json", nil)
|
22
20
|
@segment.update "new title for segment", rules
|
23
21
|
end
|
24
|
-
|
22
|
+
|
25
23
|
should "add a rule to a segment" do
|
26
24
|
clauses = [ "CONTAINS example.com" ]
|
27
|
-
stub_post(@
|
25
|
+
stub_post(@auth, "segments/#{@segment.segment_id}/rules.json", nil)
|
28
26
|
@segment.add_rule "EmailAddress", clauses
|
29
27
|
end
|
30
28
|
|
31
29
|
should "get the active subscribers for a particular segment in the list" do
|
32
30
|
min_date = "2010-01-01"
|
33
|
-
stub_get(@
|
31
|
+
stub_get(@auth, "segments/#{@segment.segment_id}/active.json?pagesize=1000&orderfield=email&page=1&orderdirection=asc&date=#{CGI.escape(min_date)}",
|
34
32
|
"segment_subscribers.json")
|
35
33
|
res = @segment.subscribers min_date
|
36
34
|
res.ResultsOrderedBy.should == "email"
|
@@ -47,14 +45,14 @@ class SegmentTest < Test::Unit::TestCase
|
|
47
45
|
res.Results.first.State.should == "Active"
|
48
46
|
res.Results.first.CustomFields.should == []
|
49
47
|
end
|
50
|
-
|
48
|
+
|
51
49
|
should "delete a segment" do
|
52
|
-
stub_delete(@
|
50
|
+
stub_delete(@auth, "segments/#{@segment.segment_id}.json", nil)
|
53
51
|
@segment.delete
|
54
52
|
end
|
55
53
|
|
56
54
|
should "get the details of a segment" do
|
57
|
-
stub_get(@
|
55
|
+
stub_get(@auth, "segments/#{@segment.segment_id}.json", "segment_details.json")
|
58
56
|
res = @segment.details
|
59
57
|
res.ActiveSubscribers.should == 0
|
60
58
|
res.Rules.size.should == 2
|
@@ -67,7 +65,7 @@ class SegmentTest < Test::Unit::TestCase
|
|
67
65
|
end
|
68
66
|
|
69
67
|
should "clear a segment's rules" do
|
70
|
-
stub_delete(@
|
68
|
+
stub_delete(@auth, "segments/#{@segment.segment_id}/rules.json", nil)
|
71
69
|
@segment.clear_rules
|
72
70
|
end
|
73
71
|
|
data/test/subscriber_test.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/helper'
|
2
2
|
|
3
3
|
class SubscriberTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
multiple_contexts "authenticated_using_oauth_context", "authenticated_using_api_key_context" do
|
5
5
|
setup do
|
6
|
-
@api_key = '123123123123123123123'
|
7
|
-
CreateSend.api_key @api_key
|
8
6
|
@list_id = "d98h2938d9283d982u3d98u88"
|
9
|
-
@subscriber = CreateSend::Subscriber.new @list_id, "subscriber@example.com"
|
7
|
+
@subscriber = CreateSend::Subscriber.new @auth, @list_id, "subscriber@example.com"
|
10
8
|
end
|
11
9
|
|
12
10
|
should "get a subscriber by list id and email address" do
|
13
11
|
email = "subscriber@example.com"
|
14
|
-
stub_get(@
|
15
|
-
subscriber = CreateSend::Subscriber.get @list_id, email
|
12
|
+
stub_get(@auth, "subscribers/#{@list_id}.json?email=#{CGI.escape(email)}", "subscriber_details.json")
|
13
|
+
subscriber = CreateSend::Subscriber.get @auth, @list_id, email
|
16
14
|
subscriber.EmailAddress.should == email
|
17
15
|
subscriber.Name.should == "Subscriber One"
|
18
16
|
subscriber.Date.should == "2010-10-25 10:28:00"
|
@@ -24,31 +22,31 @@ class SubscriberTest < Test::Unit::TestCase
|
|
24
22
|
end
|
25
23
|
|
26
24
|
should "add a subscriber without custom fields" do
|
27
|
-
stub_post(@
|
28
|
-
email_address = CreateSend::Subscriber.add @list_id, "subscriber@example.com", "Subscriber", [], true
|
25
|
+
stub_post(@auth, "subscribers/#{@list_id}.json", "add_subscriber.json")
|
26
|
+
email_address = CreateSend::Subscriber.add @auth, @list_id, "subscriber@example.com", "Subscriber", [], true
|
29
27
|
email_address.should == "subscriber@example.com"
|
30
28
|
end
|
31
29
|
|
32
30
|
should "add a subscriber with custom fields" do
|
33
|
-
stub_post(@
|
31
|
+
stub_post(@auth, "subscribers/#{@list_id}.json", "add_subscriber.json")
|
34
32
|
custom_fields = [ { :Key => 'website', :Value => 'http://example.com/' } ]
|
35
|
-
email_address = CreateSend::Subscriber.add @list_id, "subscriber@example.com", "Subscriber", custom_fields, true
|
33
|
+
email_address = CreateSend::Subscriber.add @auth, @list_id, "subscriber@example.com", "Subscriber", custom_fields, true
|
36
34
|
email_address.should == "subscriber@example.com"
|
37
35
|
end
|
38
36
|
|
39
37
|
should "add a subscriber with custom fields including multi-option fields" do
|
40
|
-
stub_post(@
|
38
|
+
stub_post(@auth, "subscribers/#{@list_id}.json", "add_subscriber.json")
|
41
39
|
custom_fields = [ { :Key => 'multioptionselectone', :Value => 'myoption' },
|
42
40
|
{ :Key => 'multioptionselectmany', :Value => 'firstoption' },
|
43
41
|
{ :Key => 'multioptionselectmany', :Value => 'secondoption' } ]
|
44
|
-
email_address = CreateSend::Subscriber.add @list_id, "subscriber@example.com", "Subscriber", custom_fields, true
|
42
|
+
email_address = CreateSend::Subscriber.add @auth, @list_id, "subscriber@example.com", "Subscriber", custom_fields, true
|
45
43
|
email_address.should == "subscriber@example.com"
|
46
44
|
end
|
47
45
|
|
48
46
|
should "update a subscriber with custom fields" do
|
49
47
|
email = "subscriber@example.com"
|
50
48
|
new_email = "new_email_address@example.com"
|
51
|
-
stub_put(@
|
49
|
+
stub_put(@auth, "subscribers/#{@list_id}.json?email=#{CGI.escape(email)}", nil)
|
52
50
|
custom_fields = [ { :Key => 'website', :Value => 'http://example.com/' } ]
|
53
51
|
@subscriber.update new_email, "Subscriber", custom_fields, true
|
54
52
|
@subscriber.email_address.should == new_email
|
@@ -57,20 +55,20 @@ class SubscriberTest < Test::Unit::TestCase
|
|
57
55
|
should "update a subscriber with custom fields including the clear option" do
|
58
56
|
email = "subscriber@example.com"
|
59
57
|
new_email = "new_email_address@example.com"
|
60
|
-
stub_put(@
|
58
|
+
stub_put(@auth, "subscribers/#{@list_id}.json?email=#{CGI.escape(email)}", nil)
|
61
59
|
custom_fields = [ { :Key => 'website', :Value => '', :Clear => true } ]
|
62
60
|
@subscriber.update new_email, "Subscriber", custom_fields, true
|
63
61
|
@subscriber.email_address.should == new_email
|
64
62
|
end
|
65
63
|
|
66
64
|
should "import many subscribers at once" do
|
67
|
-
stub_post(@
|
65
|
+
stub_post(@auth, "subscribers/#{@list_id}/import.json", "import_subscribers.json")
|
68
66
|
subscribers = [
|
69
67
|
{ :EmailAddress => "example+1@example.com", :Name => "Example One" },
|
70
68
|
{ :EmailAddress => "example+2@example.com", :Name => "Example Two" },
|
71
69
|
{ :EmailAddress => "example+3@example.com", :Name => "Example Three" },
|
72
70
|
]
|
73
|
-
import_result = CreateSend::Subscriber.import @list_id, subscribers, true
|
71
|
+
import_result = CreateSend::Subscriber.import @auth, @list_id, subscribers, true
|
74
72
|
import_result.FailureDetails.size.should == 0
|
75
73
|
import_result.TotalUniqueEmailsSubmitted.should == 3
|
76
74
|
import_result.TotalExistingSubscribers.should == 0
|
@@ -79,13 +77,13 @@ class SubscriberTest < Test::Unit::TestCase
|
|
79
77
|
end
|
80
78
|
|
81
79
|
should "import many subscribers at once, and start subscription-based autoresponders" do
|
82
|
-
stub_post(@
|
80
|
+
stub_post(@auth, "subscribers/#{@list_id}/import.json", "import_subscribers.json")
|
83
81
|
subscribers = [
|
84
82
|
{ :EmailAddress => "example+1@example.com", :Name => "Example One" },
|
85
83
|
{ :EmailAddress => "example+2@example.com", :Name => "Example Two" },
|
86
84
|
{ :EmailAddress => "example+3@example.com", :Name => "Example Three" },
|
87
85
|
]
|
88
|
-
import_result = CreateSend::Subscriber.import @list_id, subscribers, true, true
|
86
|
+
import_result = CreateSend::Subscriber.import @auth, @list_id, subscribers, true, true
|
89
87
|
import_result.FailureDetails.size.should == 0
|
90
88
|
import_result.TotalUniqueEmailsSubmitted.should == 3
|
91
89
|
import_result.TotalExistingSubscribers.should == 0
|
@@ -94,13 +92,13 @@ class SubscriberTest < Test::Unit::TestCase
|
|
94
92
|
end
|
95
93
|
|
96
94
|
should "import many subscribers at once with custom fields, including the clear option" do
|
97
|
-
stub_post(@
|
95
|
+
stub_post(@auth, "subscribers/#{@list_id}/import.json", "import_subscribers.json")
|
98
96
|
subscribers = [
|
99
97
|
{ :EmailAddress => "example+1@example.com", :Name => "Example One", :CustomFields => [ { :Key => 'website', :Value => '', :Clear => true } ] },
|
100
98
|
{ :EmailAddress => "example+2@example.com", :Name => "Example Two", :CustomFields => [ { :Key => 'website', :Value => '', :Clear => false } ] },
|
101
99
|
{ :EmailAddress => "example+3@example.com", :Name => "Example Three", :CustomFields => [ { :Key => 'website', :Value => '', :Clear => false } ] },
|
102
100
|
]
|
103
|
-
import_result = CreateSend::Subscriber.import @list_id, subscribers, true
|
101
|
+
import_result = CreateSend::Subscriber.import @auth, @list_id, subscribers, true
|
104
102
|
import_result.FailureDetails.size.should == 0
|
105
103
|
import_result.TotalUniqueEmailsSubmitted.should == 3
|
106
104
|
import_result.TotalExistingSubscribers.should == 0
|
@@ -110,13 +108,13 @@ class SubscriberTest < Test::Unit::TestCase
|
|
110
108
|
|
111
109
|
should "import many subscribers at once with partial success" do
|
112
110
|
# Stub request with 400 Bad Request as the expected response status
|
113
|
-
stub_post(@
|
111
|
+
stub_post(@auth, "subscribers/#{@list_id}/import.json", "import_subscribers_partial_success.json", 400)
|
114
112
|
subscribers = [
|
115
113
|
{ :EmailAddress => "example+1@example", :Name => "Example One" },
|
116
114
|
{ :EmailAddress => "example+2@example.com", :Name => "Example Two" },
|
117
115
|
{ :EmailAddress => "example+3@example.com", :Name => "Example Three" },
|
118
116
|
]
|
119
|
-
import_result = CreateSend::Subscriber.import @list_id, subscribers, true
|
117
|
+
import_result = CreateSend::Subscriber.import @auth, @list_id, subscribers, true
|
120
118
|
import_result.FailureDetails.size.should == 1
|
121
119
|
import_result.FailureDetails.first.EmailAddress.should == "example+1@example"
|
122
120
|
import_result.FailureDetails.first.Code.should == 1
|
@@ -128,12 +126,12 @@ class SubscriberTest < Test::Unit::TestCase
|
|
128
126
|
end
|
129
127
|
|
130
128
|
should "unsubscribe a subscriber" do
|
131
|
-
stub_post(@
|
129
|
+
stub_post(@auth, "subscribers/#{@subscriber.list_id}/unsubscribe.json", nil)
|
132
130
|
@subscriber.unsubscribe
|
133
131
|
end
|
134
|
-
|
132
|
+
|
135
133
|
should "get a subscriber's history" do
|
136
|
-
stub_get(@
|
134
|
+
stub_get(@auth, "subscribers/#{@subscriber.list_id}/history.json?email=#{CGI.escape(@subscriber.email_address)}", "subscriber_history.json")
|
137
135
|
history = @subscriber.history
|
138
136
|
history.size.should == 1
|
139
137
|
history.first.Name.should == "Campaign One"
|
@@ -147,7 +145,7 @@ class SubscriberTest < Test::Unit::TestCase
|
|
147
145
|
end
|
148
146
|
|
149
147
|
should "delete a subscriber" do
|
150
|
-
stub_delete(@
|
148
|
+
stub_delete(@auth, "subscribers/#{@subscriber.list_id}.json?email=#{CGI.escape(@subscriber.email_address)}", nil)
|
151
149
|
@subscriber.delete
|
152
150
|
end
|
153
151
|
end
|