constantcontact 1.0.2 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +127 -136
- data/constantcontact.gemspec +4 -3
- data/lib/constantcontact.rb +63 -44
- data/lib/constantcontact/api.rb +932 -535
- data/lib/constantcontact/auth/oauth2.rb +86 -66
- data/lib/constantcontact/components/account/verified_email_address.rb +14 -14
- data/lib/constantcontact/components/activities/activity.rb +30 -30
- data/lib/constantcontact/components/activities/activity_error.rb +14 -14
- data/lib/constantcontact/components/activities/add_contacts.rb +1 -1
- data/lib/constantcontact/components/activities/add_contacts_import_data.rb +37 -36
- data/lib/constantcontact/components/component.rb +25 -0
- data/lib/constantcontact/components/contacts/address.rb +12 -12
- data/lib/constantcontact/components/contacts/contact.rb +50 -44
- data/lib/constantcontact/components/contacts/contact_list.rb +12 -12
- data/lib/constantcontact/components/contacts/custom_field.rb +14 -14
- data/lib/constantcontact/components/contacts/email_address.rb +14 -14
- data/lib/constantcontact/components/contacts/note.rb +13 -13
- data/lib/constantcontact/components/email_marketing/campaign.rb +41 -41
- data/lib/constantcontact/components/email_marketing/click_through_details.rb +14 -14
- data/lib/constantcontact/components/email_marketing/message_footer.rb +14 -14
- data/lib/constantcontact/components/email_marketing/schedule.rb +14 -15
- data/lib/constantcontact/components/email_marketing/test_send.rb +21 -21
- data/lib/constantcontact/components/event_spot/contact.rb +27 -0
- data/lib/constantcontact/components/event_spot/event.rb +63 -0
- data/lib/constantcontact/components/event_spot/event_track.rb +28 -0
- data/lib/constantcontact/components/event_spot/fee.rb +27 -0
- data/lib/constantcontact/components/event_spot/guest.rb +31 -0
- data/lib/constantcontact/components/event_spot/notification_option.rb +27 -0
- data/lib/constantcontact/components/event_spot/promo_code.rb +26 -0
- data/lib/constantcontact/components/event_spot/registrant.rb +54 -0
- data/lib/constantcontact/components/event_spot/registrant_field.rb +27 -0
- data/lib/constantcontact/components/event_spot/registrant_section.rb +34 -0
- data/lib/constantcontact/components/event_spot/sale_item.rb +27 -0
- data/lib/constantcontact/components/library/file/library_file.rb +27 -0
- data/lib/constantcontact/components/library/folder/library_folder.rb +26 -0
- data/lib/constantcontact/components/library/info/library_summary.rb +26 -0
- data/lib/constantcontact/components/library/info/move_results.rb +26 -0
- data/lib/constantcontact/components/library/info/upload_status.rb +26 -0
- data/lib/constantcontact/components/tracking/bounce_activity.rb +14 -14
- data/lib/constantcontact/components/tracking/click_activity.rb +14 -14
- data/lib/constantcontact/components/tracking/forward_activity.rb +14 -14
- data/lib/constantcontact/components/tracking/open_activity.rb +14 -14
- data/lib/constantcontact/components/tracking/send_activity.rb +14 -14
- data/lib/constantcontact/components/tracking/tracking_summary.rb +17 -17
- data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +14 -14
- data/lib/constantcontact/services/account_service.rb +4 -3
- data/lib/constantcontact/services/activity_service.rb +40 -3
- data/lib/constantcontact/services/base_service.rb +34 -6
- data/lib/constantcontact/services/campaign_tracking_service.rb +20 -20
- data/lib/constantcontact/services/contact_service.rb +10 -12
- data/lib/constantcontact/services/contact_tracking_service.rb +20 -20
- data/lib/constantcontact/services/email_marketing_service.rb +8 -10
- data/lib/constantcontact/services/event_spot_service.rb +254 -0
- data/lib/constantcontact/services/library_service.rb +297 -0
- data/lib/constantcontact/services/list_service.rb +6 -5
- data/lib/constantcontact/util/config.rb +135 -117
- data/lib/constantcontact/version.rb +1 -1
- data/spec/constantcontact/api_spec.rb +1223 -173
- data/spec/constantcontact/auth/oauth2_spec.rb +60 -47
- data/spec/constantcontact/components/contacts/address_spec.rb +1 -1
- data/spec/constantcontact/components/contacts/contact_list_spec.rb +1 -1
- data/spec/constantcontact/components/contacts/contact_spec.rb +1 -1
- data/spec/constantcontact/components/contacts/email_address_spec.rb +1 -1
- data/spec/constantcontact/services/activity_service_spec.rb +201 -0
- data/spec/constantcontact/services/base_service_spec.rb +27 -0
- data/spec/constantcontact/services/campaign_schedule_service_spec.rb +111 -0
- data/spec/constantcontact/services/campaign_tracking_service_spec.rb +127 -0
- data/spec/constantcontact/services/contact_service_spec.rb +24 -22
- data/spec/constantcontact/services/contact_tracking_service_spec.rb +127 -0
- data/spec/constantcontact/services/email_marketing_spec.rb +72 -66
- data/spec/constantcontact/services/event_spot_spec.rb +217 -0
- data/spec/constantcontact/services/library_service_spec.rb +248 -0
- data/spec/constantcontact/services/list_service_spec.rb +33 -17
- data/spec/spec_helper.rb +3 -1
- metadata +63 -7
@@ -7,7 +7,7 @@
|
|
7
7
|
require 'spec_helper'
|
8
8
|
|
9
9
|
describe ConstantContact::Auth::OAuth2 do
|
10
|
-
|
10
|
+
|
11
11
|
before(:all) {
|
12
12
|
ConstantContact::Util::Config.configure do |config|
|
13
13
|
config[:auth].delete :api_key
|
@@ -15,21 +15,21 @@ describe ConstantContact::Auth::OAuth2 do
|
|
15
15
|
config[:auth].delete :redirect_uri
|
16
16
|
end
|
17
17
|
}
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
18
|
+
|
19
|
+
describe "#new" do
|
20
|
+
it "fails without arguments and no configuration" do
|
21
|
+
lambda {
|
22
|
+
ConstantContact::Auth::OAuth2.new
|
23
|
+
}.should raise_error(ArgumentError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "takes one argument" do
|
27
|
+
opts = {:api_key => 'api key', :api_secret => 'secret', :redirect_url => 'redirect url'}
|
28
|
+
lambda {
|
29
|
+
ConstantContact::Auth::OAuth2.new(opts)
|
30
|
+
}.should_not raise_error
|
31
|
+
end
|
32
|
+
end
|
33
33
|
|
34
34
|
context "with middle-ware configuration" do
|
35
35
|
before(:all) do
|
@@ -39,9 +39,9 @@ describe ConstantContact::Auth::OAuth2 do
|
|
39
39
|
config[:auth][:redirect_uri] = "config_redirect_uri"
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
let(:proc) { lambda { ConstantContact::Auth::OAuth2.new } }
|
43
43
|
it "without error" do
|
44
|
-
|
44
|
+
proc.should_not raise_error
|
45
45
|
end
|
46
46
|
let(:oauth) { proc.call }
|
47
47
|
it "has correct api_key" do
|
@@ -53,7 +53,7 @@ describe ConstantContact::Auth::OAuth2 do
|
|
53
53
|
it "has correct redirect_uri" do
|
54
54
|
oauth.redirect_uri.should == "config_redirect_uri"
|
55
55
|
end
|
56
|
-
|
56
|
+
end
|
57
57
|
|
58
58
|
context "with middle-ware configuration and explicit opts" do
|
59
59
|
before(:all) do
|
@@ -63,9 +63,9 @@ describe ConstantContact::Auth::OAuth2 do
|
|
63
63
|
config[:auth][:redirect_uri] = "config_redirect_uri"
|
64
64
|
end
|
65
65
|
end
|
66
|
-
|
66
|
+
let(:proc) { lambda { ConstantContact::Auth::OAuth2.new :api_key => 'explicit_api_key', :api_secret => 'explicit_api_secret', :redirect_url => 'explicit_redirect_uri' } }
|
67
67
|
it "without error" do
|
68
|
-
|
68
|
+
proc.should_not raise_error
|
69
69
|
end
|
70
70
|
let(:oauth) { proc.call }
|
71
71
|
it "has correct api_key" do
|
@@ -77,36 +77,49 @@ describe ConstantContact::Auth::OAuth2 do
|
|
77
77
|
it "has correct redirect_uri" do
|
78
78
|
oauth.redirect_uri.should == "explicit_redirect_uri"
|
79
79
|
end
|
80
|
-
|
80
|
+
end
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
82
|
+
it "with explicit arguments and no configuration" do
|
83
|
+
lambda {
|
84
|
+
ConstantContact::Auth::OAuth2.new :api_key => "api_key", :api_secret => "api_secret", :redirect_url => "redirect_uri"
|
85
|
+
}.should_not raise_error
|
86
|
+
end
|
87
87
|
|
88
|
+
let(:proc) { lambda { ConstantContact::Auth::OAuth2.new(:api_key => "api_key", :api_secret => "api_secret", :redirect_url => "redirect_uri") } }
|
89
|
+
let(:oauth) { proc.call }
|
88
90
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
describe "#get_authorization_url" do
|
92
|
+
it "returns a string" do
|
93
|
+
oauth.get_authorization_url.should be_kind_of(String)
|
94
|
+
oauth.get_authorization_url(true, 'my_param').should match('state=my_param')
|
95
|
+
end
|
96
|
+
end
|
94
97
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
98
|
+
describe "#get_access_token" do
|
99
|
+
it "returns a Hash" do
|
100
|
+
json = load_file('access_token.json')
|
101
|
+
RestClient.stub(:post).and_return(json)
|
102
|
+
oauth.get_access_token('token').should be_kind_of(Hash)
|
103
|
+
end
|
99
104
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
+
it "throws an OAuth2Exception in case of error" do
|
106
|
+
json = load_file('access_token_error.json')
|
107
|
+
RestClient.stub(:post).and_return(json)
|
108
|
+
lambda {
|
109
|
+
oauth.get_access_token('token')
|
110
|
+
}.should raise_exception(ConstantContact::Exceptions::OAuth2Exception,
|
111
|
+
'The resource owner or authorization server denied the request.')
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "#get_token_info" do
|
116
|
+
it "returns a Hash" do
|
117
|
+
json = load_file('token_info.json')
|
118
|
+
RestClient.stub(:post).and_return(json)
|
119
|
+
info = oauth.get_token_info('token')
|
120
|
+
info.should be_kind_of(Hash)
|
121
|
+
info['user_name'].should eq('ctcttest')
|
122
|
+
end
|
123
|
+
end
|
105
124
|
|
106
|
-
it "returns a Hash" do
|
107
|
-
json = load_json('access_token.json')
|
108
|
-
RestClient.stub(:post).and_return(json)
|
109
|
-
@auth.get_access_token('token').should be_kind_of(Hash)
|
110
|
-
end
|
111
|
-
end
|
112
125
|
end
|
@@ -9,7 +9,7 @@ require 'spec_helper'
|
|
9
9
|
describe ConstantContact::Components::Address do
|
10
10
|
describe "#from_list" do
|
11
11
|
it "should return an address" do
|
12
|
-
json =
|
12
|
+
json = load_file('address.json')
|
13
13
|
address = ConstantContact::Components::Address.create(JSON.parse(json))
|
14
14
|
|
15
15
|
address.line1.should eq('6 Main Street')
|
@@ -9,7 +9,7 @@ require 'spec_helper'
|
|
9
9
|
describe ConstantContact::Components::ContactList do
|
10
10
|
describe "#from_list" do
|
11
11
|
it "should return a list" do
|
12
|
-
json =
|
12
|
+
json = load_file('list.json')
|
13
13
|
list = ConstantContact::Components::ContactList.create(JSON.parse(json))
|
14
14
|
|
15
15
|
list.name.should eq('Fake List')
|
@@ -9,7 +9,7 @@ require 'spec_helper'
|
|
9
9
|
describe ConstantContact::Components::Contact do
|
10
10
|
describe "#from_list" do
|
11
11
|
it "should return a contact" do
|
12
|
-
json =
|
12
|
+
json = load_file('contact.json')
|
13
13
|
contact = ConstantContact::Components::Contact.create(JSON.parse(json))
|
14
14
|
|
15
15
|
contact.last_name.should eq('Smith')
|
@@ -9,7 +9,7 @@ require 'spec_helper'
|
|
9
9
|
describe ConstantContact::Components::EmailAddress do
|
10
10
|
describe "#from_list" do
|
11
11
|
it "should return an email address" do
|
12
|
-
json =
|
12
|
+
json = load_file('email_address.json')
|
13
13
|
email = ConstantContact::Components::EmailAddress.create(JSON.parse(json))
|
14
14
|
|
15
15
|
email.email_address.should eq('wm2q7rwtp77m@roving.com')
|
@@ -0,0 +1,201 @@
|
|
1
|
+
#
|
2
|
+
# activity_service_spec.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
require 'spec_helper'
|
8
|
+
|
9
|
+
describe ConstantContact::Services::ActivityService do
|
10
|
+
describe "#get_activities" do
|
11
|
+
it "gets a set of activities" do
|
12
|
+
json_response = load_file('activities_response.json')
|
13
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
14
|
+
|
15
|
+
response = RestClient::Response.create(json_response, net_http_resp, {})
|
16
|
+
RestClient.stub(:get).and_return(response)
|
17
|
+
|
18
|
+
activities = ConstantContact::Services::ActivityService.get_activities('token')
|
19
|
+
activities.first.should be_kind_of(ConstantContact::Components::Activity)
|
20
|
+
activities.first.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#get_activity" do
|
25
|
+
it "gets an activity" do
|
26
|
+
json_response = load_file('activity_response.json')
|
27
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
28
|
+
|
29
|
+
response = RestClient::Response.create(json_response, net_http_resp, {})
|
30
|
+
RestClient.stub(:get).and_return(response)
|
31
|
+
|
32
|
+
activity = ConstantContact::Services::ActivityService.get_activity('token', 'a07e1ilbm7shdg6ikeo')
|
33
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
34
|
+
activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#create_add_contacts_activity" do
|
39
|
+
it "creates an Add Contacts Activity" do
|
40
|
+
json_add_contacts = load_file('add_contacts_response.json')
|
41
|
+
json_lists = load_file('lists_response.json')
|
42
|
+
json_contacts = load_file('contacts_response.json')
|
43
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
44
|
+
|
45
|
+
response = RestClient::Response.create(json_add_contacts, net_http_resp, {})
|
46
|
+
RestClient.stub(:post).and_return(response)
|
47
|
+
|
48
|
+
import = ConstantContact::Components::AddContactsImportData.new
|
49
|
+
address = ConstantContact::Components::Address.create(
|
50
|
+
:line1 => "1601 Trapelo Rd",
|
51
|
+
:city => "Waltham",
|
52
|
+
:state => "MA"
|
53
|
+
)
|
54
|
+
import.add_address(address)
|
55
|
+
|
56
|
+
custom_field = ConstantContact::Components::CustomField.create(
|
57
|
+
:name => "custom_field_1",
|
58
|
+
:value => "my custom value"
|
59
|
+
)
|
60
|
+
import.add_custom_field(custom_field)
|
61
|
+
import.add_email("abc@def.com")
|
62
|
+
|
63
|
+
contacts = []
|
64
|
+
contacts << import
|
65
|
+
contacts_objects = JSON.parse(json_contacts)
|
66
|
+
contacts_objects['results'].each do |contact|
|
67
|
+
contacts << ConstantContact::Components::Contact.create(contact)
|
68
|
+
end
|
69
|
+
|
70
|
+
lists = []
|
71
|
+
lists_objects = JSON.parse(json_lists)
|
72
|
+
lists_objects.each do |list|
|
73
|
+
lists << ConstantContact::Components::ContactList.create(list)
|
74
|
+
end
|
75
|
+
|
76
|
+
add_contact = ConstantContact::Components::AddContacts.new(contacts, lists)
|
77
|
+
|
78
|
+
activity = ConstantContact::Services::ActivityService.create_add_contacts_activity(
|
79
|
+
'token', add_contact)
|
80
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
81
|
+
activity.type.should eq('ADD_CONTACTS')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#create_add_contacts_activity_from_file" do
|
86
|
+
it "creates an Add Contacts Activity from a file" do
|
87
|
+
content = load_file('add_contacts_request.csv')
|
88
|
+
json = load_file('add_contacts_response.json')
|
89
|
+
lists = 'list1, list2'
|
90
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
91
|
+
|
92
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
93
|
+
RestClient.stub(:post).and_return(response)
|
94
|
+
|
95
|
+
activity = ConstantContact::Services::ActivityService.create_add_contacts_activity_from_file(
|
96
|
+
'token', 'contacts.txt', content, lists)
|
97
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
98
|
+
activity.type.should eq('ADD_CONTACTS')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#add_clear_lists_activity" do
|
103
|
+
it "creates a Clear Lists Activity" do
|
104
|
+
json_clear_lists = load_file('clear_lists_response.json')
|
105
|
+
json_list = load_file('list_response.json')
|
106
|
+
|
107
|
+
lists = []
|
108
|
+
lists << ConstantContact::Components::ContactList.create(JSON.parse(json_list))
|
109
|
+
|
110
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
111
|
+
|
112
|
+
response = RestClient::Response.create(json_clear_lists, net_http_resp, {})
|
113
|
+
RestClient.stub(:post).and_return(response)
|
114
|
+
|
115
|
+
activity = ConstantContact::Services::ActivityService.add_clear_lists_activity(
|
116
|
+
'token', lists)
|
117
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
118
|
+
activity.type.should eq('CLEAR_CONTACTS_FROM_LISTS')
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "#add_remove_contacts_from_lists_activity" do
|
123
|
+
it "creates a Remove Contacts From Lists Activity" do
|
124
|
+
json = load_file('remove_contacts_response.json')
|
125
|
+
lists = 'list1, list2'
|
126
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
127
|
+
|
128
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
129
|
+
RestClient.stub(:post).and_return(response)
|
130
|
+
email_addresses = ["djellesma@constantcontact.com"]
|
131
|
+
|
132
|
+
activity = ConstantContact::Services::ActivityService.add_remove_contacts_from_lists_activity(
|
133
|
+
'token', email_addresses, lists)
|
134
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
135
|
+
activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "#add_remove_contacts_from_lists_activity_from_file" do
|
140
|
+
it "creates a Remove Contacts Activity from a file" do
|
141
|
+
content = load_file('remove_contacts_request.txt')
|
142
|
+
json = load_file('remove_contacts_response.json')
|
143
|
+
lists = 'list1, list2'
|
144
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
145
|
+
|
146
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
147
|
+
RestClient.stub(:post).and_return(response)
|
148
|
+
|
149
|
+
activity = ConstantContact::Services::ActivityService.add_remove_contacts_from_lists_activity_from_file(
|
150
|
+
'token', 'contacts.txt', content, lists)
|
151
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
152
|
+
activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "#add_export_contacts_activity" do
|
157
|
+
it "creates an Export Contacts Activity" do
|
158
|
+
json_request = load_file('export_contacts_request.json')
|
159
|
+
json_response = load_file('export_contacts_response.json')
|
160
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
161
|
+
|
162
|
+
response = RestClient::Response.create(json_response, net_http_resp, {})
|
163
|
+
RestClient.stub(:post).and_return(response)
|
164
|
+
|
165
|
+
export_contacts = ConstantContact::Components::ExportContacts.new(JSON.parse(json_request))
|
166
|
+
|
167
|
+
activity = ConstantContact::Services::ActivityService.add_export_contacts_activity(
|
168
|
+
'token', export_contacts)
|
169
|
+
activity.should be_kind_of(ConstantContact::Components::Activity)
|
170
|
+
activity.type.should eq('EXPORT_CONTACTS')
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "#add_remove_contacts_from_lists_activity" do
|
175
|
+
it "creates a Remove Contacts From Lists Activity" do
|
176
|
+
json_request = load_file('remove_contacts_from_lists_request.json')
|
177
|
+
json_response = load_file('remove_contacts_from_lists_response.json')
|
178
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
179
|
+
|
180
|
+
response = RestClient::Response.create(json_response, net_http_resp, {})
|
181
|
+
RestClient.stub(:post).and_return(response)
|
182
|
+
|
183
|
+
request_object = JSON.parse(json_request)
|
184
|
+
|
185
|
+
lists = [], email_addresses = []
|
186
|
+
request_object['lists'].each do |list|
|
187
|
+
lists << ConstantContact::Components::ContactList.create(:id => list)
|
188
|
+
end
|
189
|
+
request_object['import_data'].each do |data|
|
190
|
+
data['email_addresses'].each do |email_address|
|
191
|
+
email_addresses << email_address
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
activity = ConstantContact::Services::ActivityService.add_remove_contacts_from_lists_activity(
|
196
|
+
'token', email_addresses, lists)
|
197
|
+
|
198
|
+
activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# base_service_spec.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
require 'spec_helper'
|
8
|
+
|
9
|
+
describe ConstantContact::Services::BaseService do
|
10
|
+
describe "#get_headers" do
|
11
|
+
it "gets a hash of headers" do
|
12
|
+
token = 'foo'
|
13
|
+
headers = ConstantContact::Services::BaseService.send(:get_headers, token)
|
14
|
+
|
15
|
+
expect(headers).to be_a Hash
|
16
|
+
expect(headers[:content_type]).to be_a String
|
17
|
+
expect(headers[:content_type]).to eq('application/json')
|
18
|
+
expect(headers[:accept]).to be_a String
|
19
|
+
expect(headers[:accept]).to eq('application/json')
|
20
|
+
expect(headers[:authorization]).to be_a String
|
21
|
+
expect(headers[:authorization]).to eq("Bearer #{token}")
|
22
|
+
expect(headers[:user_agent]).to be_a String
|
23
|
+
expect(headers[:user_agent].include?("Ruby SDK v#{ConstantContact::SDK::VERSION}")).to be_true
|
24
|
+
expect(headers[:user_agent].include?(RUBY_DESCRIPTION)).to be_true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
#
|
2
|
+
# campaign_schedule_service_service_spec.rb
|
3
|
+
# ConstantContact
|
4
|
+
#
|
5
|
+
# Copyright (c) 2013 Constant Contact. All rights reserved.
|
6
|
+
|
7
|
+
require 'spec_helper'
|
8
|
+
|
9
|
+
describe ConstantContact::Services::CampaignScheduleService do
|
10
|
+
describe "#add_schedule" do
|
11
|
+
it "creates a new schedule for a campaign" do
|
12
|
+
campaign_id = 1
|
13
|
+
json = load_file('schedule_response.json')
|
14
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
15
|
+
|
16
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
17
|
+
RestClient.stub(:post).and_return(response)
|
18
|
+
new_schedule = ConstantContact::Components::Schedule.create(JSON.parse(json))
|
19
|
+
|
20
|
+
schedule = ConstantContact::Services::CampaignScheduleService.add_schedule(
|
21
|
+
'token', campaign_id, new_schedule)
|
22
|
+
schedule.should be_kind_of(ConstantContact::Components::Schedule)
|
23
|
+
schedule.scheduled_date.should eq('2013-05-10T11:07:43.626Z')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#get_schedules" do
|
28
|
+
it "gets a list of schedules for a campaign" do
|
29
|
+
campaign_id = 1
|
30
|
+
json = load_file('schedules_response.json')
|
31
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
32
|
+
|
33
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
34
|
+
RestClient.stub(:get).and_return(response)
|
35
|
+
|
36
|
+
schedules = ConstantContact::Services::CampaignScheduleService.get_schedules(
|
37
|
+
'token', campaign_id)
|
38
|
+
schedules.first.should be_kind_of(ConstantContact::Components::Schedule)
|
39
|
+
schedules.first.scheduled_date.should eq('2012-12-16T11:07:43.626Z')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#get_schedule" do
|
44
|
+
it "gets a specific schedule for a campaign" do
|
45
|
+
campaign_id = 1
|
46
|
+
schedule_id = 1
|
47
|
+
|
48
|
+
json = load_file('schedule_response.json')
|
49
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
50
|
+
|
51
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
52
|
+
RestClient.stub(:get).and_return(response)
|
53
|
+
|
54
|
+
schedule = ConstantContact::Services::CampaignScheduleService.get_schedule(
|
55
|
+
'token', campaign_id, schedule_id)
|
56
|
+
schedule.should be_kind_of(ConstantContact::Components::Schedule)
|
57
|
+
schedule.scheduled_date.should eq('2013-05-10T11:07:43.626Z')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "#delete_schedule" do
|
62
|
+
it "deletes a specific schedule for a campaign" do
|
63
|
+
campaign_id = 1
|
64
|
+
schedule_id = 1
|
65
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
|
66
|
+
|
67
|
+
response = RestClient::Response.create('', net_http_resp, {})
|
68
|
+
RestClient.stub(:delete).and_return(response)
|
69
|
+
|
70
|
+
result = ConstantContact::Services::CampaignScheduleService.delete_schedule(
|
71
|
+
'token', campaign_id, schedule_id)
|
72
|
+
result.should be_true
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#update_schedule" do
|
77
|
+
it "updates a specific schedule for a campaign" do
|
78
|
+
campaign_id = 1
|
79
|
+
json = load_file('schedule_response.json')
|
80
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
81
|
+
|
82
|
+
response = RestClient::Response.create(json, net_http_resp, {})
|
83
|
+
RestClient.stub(:put).and_return(response)
|
84
|
+
schedule = ConstantContact::Components::Schedule.create(JSON.parse(json))
|
85
|
+
|
86
|
+
result = ConstantContact::Services::CampaignScheduleService.update_schedule(
|
87
|
+
'token', campaign_id, schedule)
|
88
|
+
result.should be_kind_of(ConstantContact::Components::Schedule)
|
89
|
+
result.scheduled_date.should eq('2013-05-10T11:07:43.626Z')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "#send_test" do
|
94
|
+
it "sends a test send of a campaign" do
|
95
|
+
campaign_id = 1
|
96
|
+
json_request = load_file('test_send_request.json')
|
97
|
+
json_response = load_file('test_send_response.json')
|
98
|
+
net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
|
99
|
+
|
100
|
+
response = RestClient::Response.create(json_response, net_http_resp, {})
|
101
|
+
RestClient.stub(:post).and_return(response)
|
102
|
+
test_send = ConstantContact::Components::TestSend.create(JSON.parse(json_request))
|
103
|
+
|
104
|
+
result = ConstantContact::Services::CampaignScheduleService.send_test(
|
105
|
+
'token', campaign_id, test_send)
|
106
|
+
result.should be_kind_of(ConstantContact::Components::TestSend)
|
107
|
+
result.personal_message.should eq('This is a test send of the email campaign message.')
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|