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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +127 -136
  3. data/constantcontact.gemspec +4 -3
  4. data/lib/constantcontact.rb +63 -44
  5. data/lib/constantcontact/api.rb +932 -535
  6. data/lib/constantcontact/auth/oauth2.rb +86 -66
  7. data/lib/constantcontact/components/account/verified_email_address.rb +14 -14
  8. data/lib/constantcontact/components/activities/activity.rb +30 -30
  9. data/lib/constantcontact/components/activities/activity_error.rb +14 -14
  10. data/lib/constantcontact/components/activities/add_contacts.rb +1 -1
  11. data/lib/constantcontact/components/activities/add_contacts_import_data.rb +37 -36
  12. data/lib/constantcontact/components/component.rb +25 -0
  13. data/lib/constantcontact/components/contacts/address.rb +12 -12
  14. data/lib/constantcontact/components/contacts/contact.rb +50 -44
  15. data/lib/constantcontact/components/contacts/contact_list.rb +12 -12
  16. data/lib/constantcontact/components/contacts/custom_field.rb +14 -14
  17. data/lib/constantcontact/components/contacts/email_address.rb +14 -14
  18. data/lib/constantcontact/components/contacts/note.rb +13 -13
  19. data/lib/constantcontact/components/email_marketing/campaign.rb +41 -41
  20. data/lib/constantcontact/components/email_marketing/click_through_details.rb +14 -14
  21. data/lib/constantcontact/components/email_marketing/message_footer.rb +14 -14
  22. data/lib/constantcontact/components/email_marketing/schedule.rb +14 -15
  23. data/lib/constantcontact/components/email_marketing/test_send.rb +21 -21
  24. data/lib/constantcontact/components/event_spot/contact.rb +27 -0
  25. data/lib/constantcontact/components/event_spot/event.rb +63 -0
  26. data/lib/constantcontact/components/event_spot/event_track.rb +28 -0
  27. data/lib/constantcontact/components/event_spot/fee.rb +27 -0
  28. data/lib/constantcontact/components/event_spot/guest.rb +31 -0
  29. data/lib/constantcontact/components/event_spot/notification_option.rb +27 -0
  30. data/lib/constantcontact/components/event_spot/promo_code.rb +26 -0
  31. data/lib/constantcontact/components/event_spot/registrant.rb +54 -0
  32. data/lib/constantcontact/components/event_spot/registrant_field.rb +27 -0
  33. data/lib/constantcontact/components/event_spot/registrant_section.rb +34 -0
  34. data/lib/constantcontact/components/event_spot/sale_item.rb +27 -0
  35. data/lib/constantcontact/components/library/file/library_file.rb +27 -0
  36. data/lib/constantcontact/components/library/folder/library_folder.rb +26 -0
  37. data/lib/constantcontact/components/library/info/library_summary.rb +26 -0
  38. data/lib/constantcontact/components/library/info/move_results.rb +26 -0
  39. data/lib/constantcontact/components/library/info/upload_status.rb +26 -0
  40. data/lib/constantcontact/components/tracking/bounce_activity.rb +14 -14
  41. data/lib/constantcontact/components/tracking/click_activity.rb +14 -14
  42. data/lib/constantcontact/components/tracking/forward_activity.rb +14 -14
  43. data/lib/constantcontact/components/tracking/open_activity.rb +14 -14
  44. data/lib/constantcontact/components/tracking/send_activity.rb +14 -14
  45. data/lib/constantcontact/components/tracking/tracking_summary.rb +17 -17
  46. data/lib/constantcontact/components/tracking/unsubscribe_activity.rb +14 -14
  47. data/lib/constantcontact/services/account_service.rb +4 -3
  48. data/lib/constantcontact/services/activity_service.rb +40 -3
  49. data/lib/constantcontact/services/base_service.rb +34 -6
  50. data/lib/constantcontact/services/campaign_tracking_service.rb +20 -20
  51. data/lib/constantcontact/services/contact_service.rb +10 -12
  52. data/lib/constantcontact/services/contact_tracking_service.rb +20 -20
  53. data/lib/constantcontact/services/email_marketing_service.rb +8 -10
  54. data/lib/constantcontact/services/event_spot_service.rb +254 -0
  55. data/lib/constantcontact/services/library_service.rb +297 -0
  56. data/lib/constantcontact/services/list_service.rb +6 -5
  57. data/lib/constantcontact/util/config.rb +135 -117
  58. data/lib/constantcontact/version.rb +1 -1
  59. data/spec/constantcontact/api_spec.rb +1223 -173
  60. data/spec/constantcontact/auth/oauth2_spec.rb +60 -47
  61. data/spec/constantcontact/components/contacts/address_spec.rb +1 -1
  62. data/spec/constantcontact/components/contacts/contact_list_spec.rb +1 -1
  63. data/spec/constantcontact/components/contacts/contact_spec.rb +1 -1
  64. data/spec/constantcontact/components/contacts/email_address_spec.rb +1 -1
  65. data/spec/constantcontact/services/activity_service_spec.rb +201 -0
  66. data/spec/constantcontact/services/base_service_spec.rb +27 -0
  67. data/spec/constantcontact/services/campaign_schedule_service_spec.rb +111 -0
  68. data/spec/constantcontact/services/campaign_tracking_service_spec.rb +127 -0
  69. data/spec/constantcontact/services/contact_service_spec.rb +24 -22
  70. data/spec/constantcontact/services/contact_tracking_service_spec.rb +127 -0
  71. data/spec/constantcontact/services/email_marketing_spec.rb +72 -66
  72. data/spec/constantcontact/services/event_spot_spec.rb +217 -0
  73. data/spec/constantcontact/services/library_service_spec.rb +248 -0
  74. data/spec/constantcontact/services/list_service_spec.rb +33 -17
  75. data/spec/spec_helper.rb +3 -1
  76. metadata +63 -7
@@ -7,6 +7,6 @@
7
7
  module ConstantContact
8
8
  module SDK
9
9
  # Gem version
10
- VERSION = "1.0.2"
10
+ VERSION = "1.1.0"
11
11
  end
12
12
  end
@@ -56,178 +56,1228 @@ describe ConstantContact::Api do
56
56
  end
57
57
 
58
58
  describe "test methods" do
59
- before(:each) do
60
- @api = ConstantContact::Api.new('api key')
61
- end
62
-
63
- describe "#get_contacts" do
64
- it "returns an array of contacts" do
65
- json = load_json('contacts.json')
66
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
67
-
68
- response = RestClient::Response.create(json, net_http_resp, {})
69
- RestClient.stub(:get).and_return(response)
70
- contacts = @api.get_contacts('token')
71
- contact = contacts.results[0]
72
-
73
- contacts.should be_kind_of(ConstantContact::Components::ResultSet)
74
- contact.should be_kind_of(ConstantContact::Components::Contact)
75
- end
76
- end
77
-
78
- describe "#get_contact" do
79
- it "returns a contact" do
80
- json = load_json('contact.json')
81
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
82
-
83
- response = RestClient::Response.create(json, net_http_resp, {})
84
- RestClient.stub(:get).and_return(response)
85
- contact = @api.get_contact('token', 1)
86
-
87
- contact.should be_kind_of(ConstantContact::Components::Contact)
88
- end
89
- end
90
-
91
- describe "#get_contact_by_email" do
92
- it "returns a contact" do
93
- json = load_json('contacts.json')
94
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
95
-
96
- response = RestClient::Response.create(json, net_http_resp, {})
97
- RestClient.stub(:get).and_return(response)
98
- contacts = @api.get_contact_by_email('token', 'john.smith@gmail.com')
99
- contact = contacts.results[0]
100
-
101
- contact.should be_kind_of(ConstantContact::Components::Contact)
102
- end
103
- end
104
-
105
- describe "#add_contact" do
106
- it "adds a contact" do
107
- json = load_json('contact.json')
108
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
109
-
110
- response = RestClient::Response.create(json, net_http_resp, {})
111
- RestClient.stub(:post).and_return(response)
112
- contact = ConstantContact::Components::Contact.create(JSON.parse(json))
113
- added = @api.add_contact('token', contact)
114
-
115
- added.should respond_to(:status)
116
- added.status.should eq('REMOVED')
117
- end
118
- end
119
-
120
- describe "#delete_contact" do
121
- it "deletes a contact" do
122
- json = load_json('contact.json')
123
- net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
124
-
125
- response = RestClient::Response.create('', net_http_resp, {})
126
- RestClient.stub(:delete).and_return(response)
127
- contact = ConstantContact::Components::Contact.create(JSON.parse(json))
128
- @api.delete_contact('token', contact).should be_true
129
- end
130
- end
131
-
132
- describe "#delete_contact_from_lists" do
133
- it "deletes a contact" do
134
- json = load_json('contact.json')
135
- net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
136
-
137
- response = RestClient::Response.create('', net_http_resp, {})
138
- RestClient.stub(:delete).and_return(response)
139
- contact = ConstantContact::Components::Contact.create(JSON.parse(json))
140
- @api.delete_contact_from_lists('token', contact).should be_true
141
- end
142
- end
143
-
144
- describe "#delete_contact_from_list" do
145
- it "deletes a contact" do
146
- contact_json = load_json('contact.json')
147
- list_json = load_json('list.json')
148
- net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
149
-
150
- response = RestClient::Response.create('', net_http_resp, {})
151
- RestClient.stub(:delete).and_return(response)
152
- contact = ConstantContact::Components::Contact.create(JSON.parse(contact_json))
153
- list = ConstantContact::Components::ContactList.create(JSON.parse(list_json))
154
- @api.delete_contact_from_list('token', contact, list).should be_true
155
- end
156
- end
157
-
158
- describe "#update_contact" do
159
- it "updates a contact" do
160
- json = load_json('contact.json')
161
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
162
-
163
- response = RestClient::Response.create(json, net_http_resp, {})
164
- RestClient.stub(:put).and_return(response)
165
- contact = ConstantContact::Components::Contact.create(JSON.parse(json))
166
- added = @api.update_contact('token', contact)
167
-
168
- added.should respond_to(:status)
169
- added.status.should eq('REMOVED')
170
- end
171
- end
172
-
173
- describe "#get_lists" do
174
- it "returns an array of lists" do
175
- json = load_json('lists.json')
176
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
177
-
178
- response = RestClient::Response.create(json, net_http_resp, {})
179
- RestClient.stub(:get).and_return(response)
180
- lists = @api.get_lists('token')
181
- list = lists[0]
182
-
183
- lists.should be_kind_of(Array)
184
- list.should be_kind_of(ConstantContact::Components::ContactList)
185
- end
186
- end
187
-
188
- describe "#get_list" do
189
- it "returns a list" do
190
- json = load_json('list.json')
191
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
192
-
193
- response = RestClient::Response.create(json, net_http_resp, {})
194
- RestClient.stub(:get).and_return(response)
195
- contact = @api.get_list('token', 1)
196
-
197
- contact.should be_kind_of(ConstantContact::Components::ContactList)
198
- end
199
- end
200
-
201
- describe "#add_list" do
202
- it "adds a list" do
203
- json = load_json('list.json')
204
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
205
-
206
- response = RestClient::Response.create(json, net_http_resp, {})
207
- RestClient.stub(:post).and_return(response)
208
- list = ConstantContact::Components::ContactList.create(JSON.parse(json))
209
- added = @api.add_list('token', list)
210
-
211
- added.should respond_to(:status)
212
- added.status.should eq('ACTIVE')
213
- end
214
- end
215
-
216
- describe "#get_contacts_from_list" do
217
- it "returns an array of contacts" do
218
- json_list = load_json('list.json')
219
- json_contacts = load_json('contacts.json')
220
- net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
221
-
222
- response = RestClient::Response.create(json_contacts, net_http_resp, {})
223
- RestClient.stub(:get).and_return(response)
224
- list = ConstantContact::Components::ContactList.create(JSON.parse(json_list))
225
- contacts = @api.get_contacts_from_list('token', list)
226
- contact = contacts.results[0]
227
-
228
- contacts.should be_kind_of(ConstantContact::Components::ResultSet)
229
- contact.should be_kind_of(ConstantContact::Components::Contact)
230
- end
231
- end
59
+ before(:each) do
60
+ @api = ConstantContact::Api.new('api key')
61
+ end
62
+
63
+ describe "#get_verified_email_addresses" do
64
+ it "gets verified addresses for the account" do
65
+ json_response = load_file('verified_email_addresses_response.json')
66
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
67
+
68
+ response = RestClient::Response.create(json_response, net_http_resp, {})
69
+ RestClient.stub(:get).and_return(response)
70
+
71
+ email_addresses = @api.get_verified_email_addresses('token')
72
+
73
+ email_addresses.should be_kind_of(Array)
74
+ email_addresses.first.should be_kind_of(ConstantContact::Components::VerifiedEmailAddress)
75
+ email_addresses.first.email_address.should eq('abc@def.com')
76
+ end
77
+ end
78
+
79
+ describe "#get_contacts" do
80
+ it "returns an array of contacts" do
81
+ json_response = load_file('contacts_response.json')
82
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
83
+
84
+ response = RestClient::Response.create(json_response, net_http_resp, {})
85
+ RestClient.stub(:get).and_return(response)
86
+ contacts = @api.get_contacts('token', {:limit => 60})
87
+
88
+ contacts.should be_kind_of(ConstantContact::Components::ResultSet)
89
+ contacts.results.first.should be_kind_of(ConstantContact::Components::Contact)
90
+ contacts.results.first.fax.should eq('318-978-7575')
91
+ end
92
+ end
93
+
94
+ describe "#get_contact" do
95
+ it "returns a contact" do
96
+ json_response = load_file('contact_response.json')
97
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
98
+
99
+ response = RestClient::Response.create(json_response, net_http_resp, {})
100
+ RestClient.stub(:get).and_return(response)
101
+ contact = @api.get_contact('token', 1)
102
+
103
+ contact.should be_kind_of(ConstantContact::Components::Contact)
104
+ end
105
+ end
106
+
107
+ describe "#get_contact_by_email" do
108
+ it "returns a contact" do
109
+ json_response = load_file('contacts_response.json')
110
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
111
+
112
+ response = RestClient::Response.create(json_response, net_http_resp, {})
113
+ RestClient.stub(:get).and_return(response)
114
+ contacts = @api.get_contact_by_email('token', 'rmartone@systems.com')
115
+
116
+ contacts.results.first.should be_kind_of(ConstantContact::Components::Contact)
117
+ end
118
+ end
119
+
120
+ describe "#add_contact" do
121
+ it "adds a contact" do
122
+ json_response = load_file('contact_response.json')
123
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
124
+
125
+ response = RestClient::Response.create(json_response, net_http_resp, {})
126
+ RestClient.stub(:post).and_return(response)
127
+ new_contact = ConstantContact::Components::Contact.create(JSON.parse(json_response))
128
+
129
+ contact = @api.add_contact('token', new_contact)
130
+ contact.should be_kind_of(ConstantContact::Components::Contact)
131
+ contact.status.should eq('ACTIVE')
132
+ end
133
+ end
134
+
135
+ describe "#delete_contact" do
136
+ it "deletes a contact" do
137
+ contact_id = 196
138
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
139
+
140
+ response = RestClient::Response.create('', net_http_resp, {})
141
+ RestClient.stub(:delete).and_return(response)
142
+
143
+ result = @api.delete_contact('token', contact_id)
144
+ result.should be_true
145
+ end
146
+ end
147
+
148
+ describe "#delete_contact_from_lists" do
149
+ it "deletes a contact" do
150
+ contact_id = 196
151
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
152
+
153
+ response = RestClient::Response.create('', net_http_resp, {})
154
+ RestClient.stub(:delete).and_return(response)
155
+
156
+ result = @api.delete_contact_from_lists('token', contact_id)
157
+ result.should be_true
158
+ end
159
+ end
160
+
161
+ describe "#delete_contact_from_list" do
162
+ it "deletes a contact" do
163
+ contact_id = 196
164
+ list_id = 1
165
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
166
+
167
+ response = RestClient::Response.create('', net_http_resp, {})
168
+ RestClient.stub(:delete).and_return(response)
169
+
170
+ result = @api.delete_contact_from_list('token', contact_id, list_id)
171
+ result.should be_true
172
+ end
173
+ end
174
+
175
+ describe "#update_contact" do
176
+ it "updates a contact" do
177
+ json = load_file('contact_response.json')
178
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
179
+
180
+ response = RestClient::Response.create(json, net_http_resp, {})
181
+ RestClient.stub(:put).and_return(response)
182
+ contact = ConstantContact::Components::Contact.create(JSON.parse(json))
183
+ result = @api.update_contact('token', contact)
184
+
185
+ result.should be_kind_of(ConstantContact::Components::Contact)
186
+ result.status.should eq('ACTIVE')
187
+ end
188
+ end
189
+
190
+ describe "#get_lists" do
191
+ it "returns an array of lists" do
192
+ json_response = load_file('lists_response.json')
193
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
194
+
195
+ response = RestClient::Response.create(json_response, net_http_resp, {})
196
+ RestClient.stub(:get).and_return(response)
197
+ lists = @api.get_lists('token')
198
+
199
+ lists.should be_kind_of(Array)
200
+ lists.first.should be_kind_of(ConstantContact::Components::ContactList)
201
+ lists.first.name.should eq('General Interest')
202
+ end
203
+ end
204
+
205
+ describe "#get_list" do
206
+ it "returns a list" do
207
+ json = load_file('list_response.json')
208
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
209
+
210
+ response = RestClient::Response.create(json, net_http_resp, {})
211
+ RestClient.stub(:get).and_return(response)
212
+
213
+ list = @api.get_list('token', 1)
214
+ list.should be_kind_of(ConstantContact::Components::ContactList)
215
+ list.name.should eq('Monthly Specials')
216
+ end
217
+ end
218
+
219
+ describe "#add_list" do
220
+ it "adds a list" do
221
+ json = load_file('list_response.json')
222
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
223
+
224
+ response = RestClient::Response.create(json, net_http_resp, {})
225
+ RestClient.stub(:post).and_return(response)
226
+ new_list = ConstantContact::Components::ContactList.create(JSON.parse(json))
227
+
228
+ list = @api.add_list('token', new_list)
229
+ list.should be_kind_of(ConstantContact::Components::ContactList)
230
+ list.status.should eq('ACTIVE')
231
+ end
232
+ end
233
+
234
+ describe "#update_list" do
235
+ it "updates a list" do
236
+ json = load_file('list_response.json')
237
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
238
+
239
+ response = RestClient::Response.create(json, net_http_resp, {})
240
+ RestClient.stub(:put).and_return(response)
241
+ list = ConstantContact::Components::ContactList.create(JSON.parse(json))
242
+
243
+ result = @api.update_list('token', list)
244
+ result.should be_kind_of(ConstantContact::Components::ContactList)
245
+ result.status.should eq('ACTIVE')
246
+ end
247
+ end
248
+
249
+ describe "#get_contacts_from_list" do
250
+ it "returns an array of contacts" do
251
+ json_list = load_file('list_response.json')
252
+ json_contacts = load_file('contacts_response.json')
253
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
254
+
255
+ response = RestClient::Response.create(json_contacts, net_http_resp, {})
256
+ RestClient.stub(:get).and_return(response)
257
+ list = ConstantContact::Components::ContactList.create(JSON.parse(json_list))
258
+
259
+ contacts = @api.get_contacts_from_list('token', list, "?limit=4&next=true")
260
+ contacts.should be_kind_of(ConstantContact::Components::ResultSet)
261
+ contacts.results.first.should be_kind_of(ConstantContact::Components::Contact)
262
+ contacts.results.first.fax.should eq('318-978-7575')
263
+
264
+ contacts = @api.get_contacts_from_list('token', list, 4)
265
+ contacts.should be_kind_of(ConstantContact::Components::ResultSet)
266
+ contacts.results.first.should be_kind_of(ConstantContact::Components::Contact)
267
+ contacts.results.first.fax.should eq('318-978-7575')
268
+ end
269
+ end
270
+
271
+ describe "#get_events" do
272
+ it "returns an array of events" do
273
+ json = load_file('events.json')
274
+
275
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
276
+ response = RestClient::Response.create(json, net_http_resp, {})
277
+ RestClient.stub(:get).and_return(response)
278
+
279
+ events = @api.get_events('token')
280
+ events.should be_kind_of(ConstantContact::Components::ResultSet)
281
+ events.results.collect{|e| e.should be_kind_of(ConstantContact::Components::Event) }
282
+ end
283
+ end
284
+
285
+ describe "#get_event" do
286
+ it "returns an event" do
287
+ json = load_file('event.json')
288
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
289
+
290
+ response = RestClient::Response.create(json, net_http_resp, {})
291
+ RestClient.stub(:get).and_return(response)
292
+ event = @api.get_event('token', 1)
293
+
294
+ event.should be_kind_of(ConstantContact::Components::Event)
295
+ end
296
+ end
297
+
298
+ describe "#add_event" do
299
+ it "adds an event" do
300
+ json = load_file('event.json')
301
+
302
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
303
+ response = RestClient::Response.create(json, net_http_resp, {})
304
+ RestClient.stub(:post).and_return(response)
305
+
306
+ event = ConstantContact::Components::Event.create(JSON.parse(json))
307
+ added = @api.add_event('token', event)
308
+
309
+ added.should respond_to(:id)
310
+ added.id.should_not be_empty
311
+ end
312
+ end
313
+
314
+ describe "#delete_event" do
315
+ it "deletes an event" do
316
+ json = load_file('event.json')
317
+
318
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
319
+ response = RestClient::Response.create('', net_http_resp, {})
320
+ RestClient.stub(:delete).and_return(response)
321
+
322
+ event = ConstantContact::Components::Event.create(JSON.parse(json))
323
+ @api.delete_event('token', event).should be_true
324
+ end
325
+ end
326
+
327
+ describe "#publish_event" do
328
+ it "updates an event with status of ACTIVE" do
329
+ json = load_file('event.json')
330
+ hash = JSON.parse json
331
+ hash["status"] = "ACTIVE"
332
+
333
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
334
+ response = RestClient::Response.create(hash.to_json, net_http_resp, {})
335
+ RestClient.stub(:patch).and_return(response)
336
+
337
+ event = ConstantContact::Components::Event.create(JSON.parse(json))
338
+ updated = @api.publish_event('token', event)
339
+ updated.should be_kind_of(ConstantContact::Components::Event)
340
+ updated.should respond_to(:status)
341
+ updated.status.should eq("ACTIVE")
342
+ end
343
+ end
344
+
345
+ describe "#cancel_event" do
346
+ it "updates an event's status to CANCELLED" do
347
+ json = load_file('event.json')
348
+ hash = JSON.parse json
349
+ hash["status"] = "CANCELLED"
350
+
351
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
352
+ response = RestClient::Response.create(hash.to_json, net_http_resp, {})
353
+ RestClient.stub(:patch).and_return(response)
354
+
355
+ event = ConstantContact::Components::Event.create(JSON.parse(json))
356
+ updated = @api.cancel_event('token', event)
357
+ updated.should be_kind_of(ConstantContact::Components::Event)
358
+ updated.should respond_to(:status)
359
+ updated.status.should eq("CANCELLED")
360
+ end
361
+ end
362
+
363
+ describe "#get_fees" do
364
+ it "returns an array of fees for an event" do
365
+ event_json = load_file('event.json')
366
+ fees_json = load_file('fees.json')
367
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
368
+
369
+ response = RestClient::Response.create(fees_json, net_http_resp, {})
370
+ RestClient.stub(:get).and_return(response)
371
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
372
+ fees = @api.get_event_fees('token', event)
373
+ #fees.should be_kind_of(ConstantContact::Components::ResultSet)
374
+ #fees.results.collect{|f| f.should be_kind_of(ConstantContact::Components::Fee) }
375
+
376
+ fees.should be_kind_of(Array) # inconsistent with oether APIs.
377
+ fees.collect{|f| f.should be_kind_of(ConstantContact::Components::Fee) }
378
+ end
379
+ end
380
+
381
+ describe "#get_fee" do
382
+ it "return an event fee" do
383
+ event_json = load_file('event.json')
384
+ fee_json = load_file('fees.json')
385
+
386
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
387
+ response = RestClient::Response.create(fee_json, net_http_resp, {})
388
+ RestClient.stub(:get).and_return(response)
389
+
390
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
391
+ fee = ConstantContact::Components::Fee.create(JSON.parse(fee_json))
392
+ retrieved = @api.get_event_fee('token', event, fee)
393
+ retrieved.should be_kind_of(ConstantContact::Components::Fee)
394
+ end
395
+ end
396
+
397
+ describe "#add_fee" do
398
+ it "adds an event fee" do
399
+ event_json = load_file('event.json')
400
+ fee_json = load_file('fee.json')
401
+
402
+ net_http_resp = Net::HTTPResponse.new(1.0, 201, 'Created')
403
+ response = RestClient::Response.create(fee_json, net_http_resp, {})
404
+ RestClient.stub(:post).and_return(response)
405
+
406
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
407
+ fee = ConstantContact::Components::Fee.create(JSON.parse(fee_json))
408
+ added = @api.add_event_fee('token', event, fee)
409
+ added.should be_kind_of(ConstantContact::Components::Fee)
410
+ added.id.should_not be_empty
411
+ end
412
+ end
413
+
414
+ describe "#update_fee" do
415
+ it "updates an event fee" do
416
+ event_json = load_file('event.json')
417
+ fee_json = load_file('fee.json')
418
+ hash = JSON.parse fee_json
419
+ hash['fee'] += 1
420
+
421
+ net_http_resp = Net::HTTPResponse.new(1.0, 201, 'Created')
422
+ response = RestClient::Response.create(hash.to_json, net_http_resp, {})
423
+ RestClient.stub(:put).and_return(response)
424
+
425
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
426
+ fee = ConstantContact::Components::Fee.create(JSON.parse(fee_json))
427
+ updated = @api.update_event_fee('token', event, fee)
428
+ updated.should be_kind_of(ConstantContact::Components::Fee)
429
+ updated.fee.should_not eq(fee.fee)
430
+ updated.fee.should eq(fee.fee + 1)
431
+ end
432
+ end
433
+
434
+ describe "#delete_fee" do
435
+ it "deletes an event fee" do
436
+ event_json = load_file('event.json')
437
+ fee_json = load_file('fees.json')
438
+
439
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
440
+ response = RestClient::Response.create('', net_http_resp, {})
441
+ RestClient.stub(:delete).and_return(response)
442
+
443
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
444
+ fee = ConstantContact::Components::Fee.create(JSON.parse(fee_json))
445
+ @api.delete_event_fee('token', event, fee).should be_true
446
+ end
447
+ end
448
+
449
+ describe "#get_registrants" do
450
+ it "returns an array of event registrants" do
451
+ event_json = load_file('event.json')
452
+ registrants_json = load_file('registrants.json')
453
+
454
+ net_http_resp = Net::HTTPResponse.new(1.0, 201, 'Created')
455
+ response = RestClient::Response.create(registrants_json, net_http_resp, {})
456
+ RestClient.stub(:get).and_return(response)
457
+
458
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
459
+ registrants = @api.get_event_registrants('token', event)
460
+ registrants.should be_kind_of(ConstantContact::Components::ResultSet)
461
+ registrants.results.collect{|r| r .should be_kind_of(ConstantContact::Components::Registrant) }
462
+ end
463
+ end
464
+
465
+ describe "#get_registrant" do
466
+ it "returns an event registrant" do
467
+ event_json = load_file('event.json')
468
+ registrant_json = load_file('registrant.json')
469
+
470
+ net_http_resp = Net::HTTPResponse.new(1.0, 201, 'Created')
471
+ response = RestClient::Response.create(registrant_json, net_http_resp, {})
472
+ RestClient.stub(:get).and_return(response)
473
+
474
+ event = ConstantContact::Components::Event.create(JSON.parse(event_json))
475
+ registrant = ConstantContact::Components::Registrant.create(JSON.parse(registrant_json))
476
+ retrieved = @api.get_event_registrant('token', event, registrant)
477
+ retrieved.should be_kind_of(ConstantContact::Components::Registrant)
478
+ retrieved.id.should_not be_empty
479
+ end
480
+ end
481
+
482
+ describe "#get_email_campaigns" do
483
+ it "gets a set of campaigns" do
484
+ json_response = load_file('email_campaigns_response.json')
485
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
486
+
487
+ response = RestClient::Response.create(json_response, net_http_resp, {})
488
+ RestClient.stub(:get).and_return(response)
489
+
490
+ campaigns = @api.get_email_campaigns('token', {:limit => 2})
491
+ campaigns.should be_kind_of(ConstantContact::Components::ResultSet)
492
+ campaigns.results.first.should be_kind_of(ConstantContact::Components::Campaign)
493
+ campaigns.results.first.name.should eq('1357157252225')
494
+ end
495
+ end
496
+
497
+ describe "#get_email_campaign" do
498
+ it "gets an individual campaign" do
499
+ json_response = load_file('email_campaign_response.json')
500
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
501
+
502
+ response = RestClient::Response.create(json_response, net_http_resp, {})
503
+ RestClient.stub(:get).and_return(response)
504
+
505
+ campaign = @api.get_email_campaign('token', 1)
506
+ campaign.should be_kind_of(ConstantContact::Components::Campaign)
507
+ campaign.name.should eq('Campaign Name')
508
+ end
509
+ end
510
+
511
+ describe "#add_email_campaign" do
512
+ it "creates a new campaign" do
513
+ json = load_file('email_campaign_response.json')
514
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
515
+
516
+ response = RestClient::Response.create(json, net_http_resp, {})
517
+ RestClient.stub(:post).and_return(response)
518
+ new_campaign = ConstantContact::Components::Campaign.create(JSON.parse(json))
519
+
520
+ campaign = @api.add_email_campaign('token', new_campaign)
521
+ campaign.should be_kind_of(ConstantContact::Components::Campaign)
522
+ campaign.name.should eq('Campaign Name')
523
+ end
524
+ end
525
+
526
+ describe "#delete_email_campaign" do
527
+ it "deletes an individual campaign" do
528
+ json = load_file('email_campaign_response.json')
529
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
530
+
531
+ response = RestClient::Response.create('', net_http_resp, {})
532
+ RestClient.stub(:delete).and_return(response)
533
+ campaign = ConstantContact::Components::Campaign.create(JSON.parse(json))
534
+
535
+ result = @api.delete_email_campaign('token', campaign)
536
+ result.should be_true
537
+ end
538
+ end
539
+
540
+ describe "#update_email_campaign" do
541
+ it "updates a specific campaign" do
542
+ json = load_file('email_campaign_response.json')
543
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
544
+
545
+ response = RestClient::Response.create(json, net_http_resp, {})
546
+ RestClient.stub(:put).and_return(response)
547
+ campaign = ConstantContact::Components::Campaign.create(JSON.parse(json))
548
+
549
+ result = @api.update_email_campaign('token', campaign)
550
+ result.should be_kind_of(ConstantContact::Components::Campaign)
551
+ result.name.should eq('Campaign Name')
552
+ end
553
+ end
554
+
555
+ describe "#add_email_campaign_schedule" do
556
+ it "schedules a campaign to be sent" do
557
+ campaign_id = 1
558
+ json = load_file('schedule_response.json')
559
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
560
+
561
+ response = RestClient::Response.create(json, net_http_resp, {})
562
+ RestClient.stub(:post).and_return(response)
563
+ new_schedule = ConstantContact::Components::Schedule.create(JSON.parse(json))
564
+
565
+ schedule = @api.add_email_campaign_schedule('token', campaign_id, new_schedule)
566
+ schedule.should be_kind_of(ConstantContact::Components::Schedule)
567
+ schedule.scheduled_date.should eq('2013-05-10T11:07:43.626Z')
568
+ end
569
+ end
570
+
571
+ describe "#get_email_campaign_schedules" do
572
+ it "gets an array of schedules associated with a given campaign" do
573
+ campaign_id = 1
574
+ json = load_file('schedules_response.json')
575
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
576
+
577
+ response = RestClient::Response.create(json, net_http_resp, {})
578
+ RestClient.stub(:get).and_return(response)
579
+
580
+ schedules = @api.get_email_campaign_schedules('token', campaign_id)
581
+ schedules.first.should be_kind_of(ConstantContact::Components::Schedule)
582
+ schedules.first.scheduled_date.should eq('2012-12-16T11:07:43.626Z')
583
+ end
584
+ end
585
+
586
+ describe "#get_email_campaign_schedule" do
587
+ it "gets a specific schedule associated with a given campaign" do
588
+ campaign_id = 1
589
+ schedule_id = 1
590
+
591
+ json = load_file('schedule_response.json')
592
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
593
+
594
+ response = RestClient::Response.create(json, net_http_resp, {})
595
+ RestClient.stub(:get).and_return(response)
596
+
597
+ schedule = @api.get_email_campaign_schedule('token', campaign_id, schedule_id)
598
+ schedule.should be_kind_of(ConstantContact::Components::Schedule)
599
+ schedule.scheduled_date.should eq('2013-05-10T11:07:43.626Z')
600
+ end
601
+ end
602
+
603
+ describe "#delete_email_campaign_schedule" do
604
+ it "deletes a specific schedule associated with a given campaign" do
605
+ campaign_id = 1
606
+ schedule_id = 1
607
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
608
+
609
+ response = RestClient::Response.create('', net_http_resp, {})
610
+ RestClient.stub(:delete).and_return(response)
611
+
612
+ result = @api.delete_email_campaign_schedule('token', campaign_id, schedule_id)
613
+ result.should be_true
614
+ end
615
+ end
616
+
617
+ describe "#update_email_campaign_schedule" do
618
+ it "updates a specific schedule associated with a given campaign" do
619
+ campaign_id = 1
620
+ json = load_file('schedule_response.json')
621
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
622
+
623
+ response = RestClient::Response.create(json, net_http_resp, {})
624
+ RestClient.stub(:put).and_return(response)
625
+ schedule = ConstantContact::Components::Schedule.create(JSON.parse(json))
626
+
627
+ result = @api.update_email_campaign_schedule('token', campaign_id, schedule)
628
+ result.should be_kind_of(ConstantContact::Components::Schedule)
629
+ result.scheduled_date.should eq('2013-05-10T11:07:43.626Z')
630
+ end
631
+ end
632
+
633
+ describe "#send_email_campaign_test" do
634
+ it "sends a test send of a campaign" do
635
+ campaign_id = 1
636
+ json_request = load_file('test_send_request.json')
637
+ json_response = load_file('test_send_response.json')
638
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
639
+
640
+ response = RestClient::Response.create(json_response, net_http_resp, {})
641
+ RestClient.stub(:post).and_return(response)
642
+ test_send = ConstantContact::Components::TestSend.create(JSON.parse(json_request))
643
+
644
+ result = @api.send_email_campaign_test('token', campaign_id, test_send)
645
+ result.should be_kind_of(ConstantContact::Components::TestSend)
646
+ result.personal_message.should eq('This is a test send of the email campaign message.')
647
+ end
648
+ end
649
+
650
+ describe "#get_email_campaign_bounces" do
651
+ it "gets bounces for a campaign" do
652
+ campaign_id = 1
653
+ params = {:limit => 5}
654
+ json = load_file('campaign_tracking_bounces_response.json')
655
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
656
+
657
+ response = RestClient::Response.create(json, net_http_resp, {})
658
+ RestClient.stub(:get).and_return(response)
659
+
660
+ set = @api.get_email_campaign_bounces('token', campaign_id, params)
661
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
662
+ set.results.first.should be_kind_of(ConstantContact::Components::BounceActivity)
663
+ set.results.first.activity_type.should eq('EMAIL_BOUNCE')
664
+ end
665
+ end
666
+
667
+ describe "#get_email_campaign_clicks" do
668
+ it "gets clicks for a campaign" do
669
+ campaign_id = 1
670
+ params = {:limit => 5}
671
+ json = load_file('campaign_tracking_clicks_response.json')
672
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
673
+
674
+ response = RestClient::Response.create(json, net_http_resp, {})
675
+ RestClient.stub(:get).and_return(response)
676
+
677
+ set = @api.get_email_campaign_clicks('token', campaign_id, params)
678
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
679
+ set.results.first.should be_kind_of(ConstantContact::Components::ClickActivity)
680
+ set.results.first.activity_type.should eq('EMAIL_CLICK')
681
+ end
682
+ end
683
+
684
+ describe "#get_email_campaign_forwards" do
685
+ it "gets forwards for a campaign" do
686
+ campaign_id = 1
687
+ params = {:limit => 5}
688
+ json = load_file('campaign_tracking_forwards_response.json')
689
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
690
+
691
+ response = RestClient::Response.create(json, net_http_resp, {})
692
+ RestClient.stub(:get).and_return(response)
693
+
694
+ set = @api.get_email_campaign_forwards('token', campaign_id, params)
695
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
696
+ set.results.first.should be_kind_of(ConstantContact::Components::ForwardActivity)
697
+ set.results.first.activity_type.should eq('EMAIL_FORWARD')
698
+ end
699
+ end
700
+
701
+ describe "#get_email_campaign_opens" do
702
+ it "gets opens for a campaign" do
703
+ campaign_id = 1
704
+ params = {:limit => 5}
705
+ json = load_file('campaign_tracking_opens_response.json')
706
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
707
+
708
+ response = RestClient::Response.create(json, net_http_resp, {})
709
+ RestClient.stub(:get).and_return(response)
710
+
711
+ set = @api.get_email_campaign_opens('token', campaign_id, params)
712
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
713
+ set.results.first.should be_kind_of(ConstantContact::Components::OpenActivity)
714
+ set.results.first.activity_type.should eq('EMAIL_OPEN')
715
+ end
716
+ end
717
+
718
+ describe "#get_email_campaign_sends" do
719
+ it "gets sends for a given campaign" do
720
+ campaign_id = 1
721
+ params = {:limit => 5}
722
+ json = load_file('campaign_tracking_sends_response.json')
723
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
724
+
725
+ response = RestClient::Response.create(json, net_http_resp, {})
726
+ RestClient.stub(:get).and_return(response)
727
+
728
+ set = @api.get_email_campaign_sends('token', campaign_id, params)
729
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
730
+ set.results.first.should be_kind_of(ConstantContact::Components::SendActivity)
731
+ set.results.first.activity_type.should eq('EMAIL_SEND')
732
+ end
733
+ end
734
+
735
+ describe "#get_email_campaign_unsubscribes" do
736
+ it "gets unsubscribes for a campaign" do
737
+ campaign_id = 1
738
+ params = {:limit => 5}
739
+ json = load_file('campaign_tracking_unsubscribes_response.json')
740
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
741
+
742
+ response = RestClient::Response.create(json, net_http_resp, {})
743
+ RestClient.stub(:get).and_return(response)
744
+
745
+ set = @api.get_email_campaign_unsubscribes('token', campaign_id, params)
746
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
747
+ set.results.first.should be_kind_of(ConstantContact::Components::UnsubscribeActivity)
748
+ set.results.first.activity_type.should eq('EMAIL_UNSUBSCRIBE')
749
+ end
750
+ end
751
+
752
+ describe "#get_email_campaign_summary_report" do
753
+ it "gets a reporting summary for a campaign" do
754
+ campaign_id = 1
755
+ json = load_file('campaign_tracking_summary_response.json')
756
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
757
+
758
+ response = RestClient::Response.create(json, net_http_resp, {})
759
+ RestClient.stub(:get).and_return(response)
760
+
761
+ summary = @api.get_email_campaign_summary_report('token', campaign_id)
762
+ summary.should be_kind_of(ConstantContact::Components::TrackingSummary)
763
+ summary.sends.should eq(15)
764
+ end
765
+ end
766
+
767
+ describe "#get_contact_bounces" do
768
+ it "gets bounces for a contact" do
769
+ contact_id = 1
770
+ params = {:limit => 5}
771
+ json = load_file('contact_tracking_bounces_response.json')
772
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
773
+
774
+ response = RestClient::Response.create(json, net_http_resp, {})
775
+ RestClient.stub(:get).and_return(response)
776
+
777
+ set = @api.get_contact_bounces('token', contact_id, params)
778
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
779
+ set.results.first.should be_kind_of(ConstantContact::Components::BounceActivity)
780
+ set.results.first.activity_type.should eq('EMAIL_BOUNCE')
781
+ end
782
+ end
783
+
784
+ describe "#get_contact_clicks" do
785
+ it "gets clicks for a contact" do
786
+ contact_id = 1
787
+ params = {:limit => 5}
788
+ json = load_file('contact_tracking_clicks_response.json')
789
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
790
+
791
+ response = RestClient::Response.create(json, net_http_resp, {})
792
+ RestClient.stub(:get).and_return(response)
793
+
794
+ set = @api.get_contact_clicks('token', contact_id, params)
795
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
796
+ set.results.first.should be_kind_of(ConstantContact::Components::ClickActivity)
797
+ set.results.first.activity_type.should eq('EMAIL_CLICK')
798
+ end
799
+ end
800
+
801
+ describe "#get_contact_forwards" do
802
+ it "gets forwards for a contact" do
803
+ contact_id = 1
804
+ params = {:limit => 5}
805
+ json = load_file('contact_tracking_forwards_response.json')
806
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
807
+
808
+ response = RestClient::Response.create(json, net_http_resp, {})
809
+ RestClient.stub(:get).and_return(response)
810
+
811
+ set = @api.get_contact_forwards('token', contact_id, params)
812
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
813
+ set.results.first.should be_kind_of(ConstantContact::Components::ForwardActivity)
814
+ set.results.first.activity_type.should eq('EMAIL_FORWARD')
815
+ end
816
+ end
817
+
818
+ describe "#get_contact_opens" do
819
+ it "gets opens for a given contact" do
820
+ contact_id = 1
821
+ params = {:limit => 5}
822
+ json = load_file('contact_tracking_opens_response.json')
823
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
824
+
825
+ response = RestClient::Response.create(json, net_http_resp, {})
826
+ RestClient.stub(:get).and_return(response)
827
+
828
+ set = @api.get_contact_opens('token', contact_id, params)
829
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
830
+ set.results.first.should be_kind_of(ConstantContact::Components::OpenActivity)
831
+ set.results.first.activity_type.should eq('EMAIL_OPEN')
832
+ end
833
+ end
834
+
835
+ describe "#get_contact_sends" do
836
+ it "gets sends for a contact" do
837
+ contact_id = 1
838
+ params = {:limit => 5}
839
+ json = load_file('contact_tracking_sends_response.json')
840
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
841
+
842
+ response = RestClient::Response.create(json, net_http_resp, {})
843
+ RestClient.stub(:get).and_return(response)
844
+
845
+ set = @api.get_contact_sends('token', contact_id, params)
846
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
847
+ set.results.first.should be_kind_of(ConstantContact::Components::SendActivity)
848
+ set.results.first.activity_type.should eq('EMAIL_SEND')
849
+ end
850
+ end
851
+
852
+ describe "#get_contact_unsubscribes" do
853
+ it "gets unsubscribes for a given contact" do
854
+ contact_id = 1
855
+ params = {:limit => 5}
856
+ json = load_file('contact_tracking_unsubscribes_response.json')
857
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
858
+
859
+ response = RestClient::Response.create(json, net_http_resp, {})
860
+ RestClient.stub(:get).and_return(response)
861
+
862
+ set = @api.get_contact_unsubscribes('token', contact_id, params)
863
+ set.should be_kind_of(ConstantContact::Components::ResultSet)
864
+ set.results.first.should be_kind_of(ConstantContact::Components::UnsubscribeActivity)
865
+ set.results.first.activity_type.should eq('EMAIL_UNSUBSCRIBE')
866
+ end
867
+ end
868
+
869
+ describe "#get_contact_summary_report" do
870
+ it "gets a reporting summary for a Contact" do
871
+ contact_id = 1
872
+ json = load_file('contact_tracking_summary_response.json')
873
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
874
+
875
+ response = RestClient::Response.create(json, net_http_resp, {})
876
+ RestClient.stub(:get).and_return(response)
877
+
878
+ summary = @api.get_contact_summary_report('token', contact_id)
879
+ summary.should be_kind_of(ConstantContact::Components::TrackingSummary)
880
+ summary.sends.should eq(15)
881
+ end
882
+ end
883
+
884
+ describe "#get_activities" do
885
+ it "gets an array of activities" do
886
+ json_response = load_file('activities_response.json')
887
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
888
+
889
+ response = RestClient::Response.create(json_response, net_http_resp, {})
890
+ RestClient.stub(:get).and_return(response)
891
+
892
+ activities = @api.get_activities('token')
893
+ activities.first.should be_kind_of(ConstantContact::Components::Activity)
894
+ activities.first.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
895
+ end
896
+ end
897
+
898
+ describe "#update_email_campaign" do
899
+ it "updates a specific campaign" do
900
+ json_response = load_file('activity_response.json')
901
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
902
+
903
+ response = RestClient::Response.create(json_response, net_http_resp, {})
904
+ RestClient.stub(:get).and_return(response)
905
+
906
+ activity = @api.get_activity('token', 'a07e1ilbm7shdg6ikeo')
907
+ activity.should be_kind_of(ConstantContact::Components::Activity)
908
+ activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
909
+ end
910
+ end
911
+
912
+ describe "#add_create_contacts_activity" do
913
+ it "adds an AddContacts activity to add contacts in bulk" do
914
+ json_add_contacts = load_file('add_contacts_response.json')
915
+ json_lists = load_file('lists_response.json')
916
+ json_contacts = load_file('contacts_response.json')
917
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
918
+
919
+ response = RestClient::Response.create(json_add_contacts, net_http_resp, {})
920
+ RestClient.stub(:post).and_return(response)
921
+
922
+ import = ConstantContact::Components::AddContactsImportData.new
923
+ address = ConstantContact::Components::Address.create(
924
+ :line1 => "1601 Trapelo Rd",
925
+ :city => "Waltham",
926
+ :state => "MA"
927
+ )
928
+ import.add_address(address)
929
+
930
+ custom_field = ConstantContact::Components::CustomField.create(
931
+ :name => "custom_field_1",
932
+ :value => "my custom value"
933
+ )
934
+ import.add_custom_field(custom_field)
935
+ import.add_email("abc@def.com")
936
+
937
+ contacts = []
938
+ contacts << import
939
+ contacts_objects = JSON.parse(json_contacts)
940
+ contacts_objects['results'].each do |contact|
941
+ contacts << ConstantContact::Components::Contact.create(contact)
942
+ end
943
+
944
+ lists = []
945
+ lists_objects = JSON.parse(json_lists)
946
+ lists_objects.each do |list|
947
+ lists << ConstantContact::Components::ContactList.create(list)
948
+ end
949
+
950
+ add_contact = ConstantContact::Components::AddContacts.new(contacts, lists)
951
+
952
+ activity = @api.add_create_contacts_activity('token', add_contact)
953
+ activity.should be_kind_of(ConstantContact::Components::Activity)
954
+ activity.type.should eq('ADD_CONTACTS')
955
+ end
956
+ end
957
+
958
+ describe "#add_create_contacts_activity_from_file" do
959
+ it "creates an Add Contacts Activity from a file. Valid file types are txt, csv, xls, xlsx" do
960
+ content = load_file('add_contacts_request.csv')
961
+ json = load_file('add_contacts_response.json')
962
+ lists = 'list1, list2'
963
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
964
+
965
+ response = RestClient::Response.create(json, net_http_resp, {})
966
+ RestClient.stub(:post).and_return(response)
967
+
968
+ activity = @api.add_create_contacts_activity_from_file('token', 'contacts.txt', content, lists)
969
+ activity.should be_kind_of(ConstantContact::Components::Activity)
970
+ activity.type.should eq('ADD_CONTACTS')
971
+ end
972
+ end
973
+
974
+ describe "#add_clear_lists_activity" do
975
+ it "adds a ClearLists Activity to remove all contacts from the provided lists" do
976
+ json_clear_lists = load_file('clear_lists_response.json')
977
+ json_list = load_file('list_response.json')
978
+
979
+ lists = []
980
+ lists << ConstantContact::Components::ContactList.create(JSON.parse(json_list))
981
+
982
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
983
+
984
+ response = RestClient::Response.create(json_clear_lists, net_http_resp, {})
985
+ RestClient.stub(:post).and_return(response)
986
+
987
+ activity = @api.add_clear_lists_activity('token', lists)
988
+ activity.should be_kind_of(ConstantContact::Components::Activity)
989
+ activity.type.should eq('CLEAR_CONTACTS_FROM_LISTS')
990
+ end
991
+ end
992
+
993
+ describe "#add_remove_contacts_from_lists_activity" do
994
+ it "adds a Remove Contacts From Lists Activity" do
995
+ json = load_file('remove_contacts_response.json')
996
+ lists = 'list1, list2'
997
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
998
+
999
+ response = RestClient::Response.create(json, net_http_resp, {})
1000
+ RestClient.stub(:post).and_return(response)
1001
+ email_addresses = ["djellesma@constantcontact.com"]
1002
+
1003
+ activity = @api.add_remove_contacts_from_lists_activity(
1004
+ 'token', email_addresses, lists)
1005
+ activity.should be_kind_of(ConstantContact::Components::Activity)
1006
+ activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
1007
+ end
1008
+ end
1009
+
1010
+ describe "#add_remove_contacts_from_lists_activity_from_file" do
1011
+ it "adds a Remove Contacts From Lists Activity from a file. Valid file types are txt, csv, xls, xlsx" do
1012
+ content = load_file('remove_contacts_request.txt')
1013
+ json = load_file('remove_contacts_response.json')
1014
+ lists = 'list1, list2'
1015
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1016
+
1017
+ response = RestClient::Response.create(json, net_http_resp, {})
1018
+ RestClient.stub(:post).and_return(response)
1019
+
1020
+ activity = @api.add_remove_contacts_from_lists_activity_from_file(
1021
+ 'token', 'contacts.txt', content, lists)
1022
+ activity.should be_kind_of(ConstantContact::Components::Activity)
1023
+ activity.type.should eq('REMOVE_CONTACTS_FROM_LISTS')
1024
+ end
1025
+ end
1026
+
1027
+ describe "#add_export_contacts_activity" do
1028
+ it "creates an Export Contacts Activity" do
1029
+ json_request = load_file('export_contacts_request.json')
1030
+ json_response = load_file('export_contacts_response.json')
1031
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1032
+
1033
+ response = RestClient::Response.create(json_response, net_http_resp, {})
1034
+ RestClient.stub(:post).and_return(response)
1035
+ export_contacts = ConstantContact::Components::ExportContacts.new(JSON.parse(json_request))
1036
+
1037
+ activity = @api.add_export_contacts_activity(
1038
+ 'token', export_contacts)
1039
+ activity.should be_kind_of(ConstantContact::Components::Activity)
1040
+ activity.type.should eq('EXPORT_CONTACTS')
1041
+ end
1042
+ end
1043
+
1044
+ describe "#get_library_info" do
1045
+ it "retrieves a MyLibrary usage information" do
1046
+ json_response = load_file('library_info_response.json')
1047
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1048
+
1049
+ response = RestClient::Response.create(json_response, net_http_resp, {})
1050
+ RestClient.stub(:get).and_return(response)
1051
+
1052
+ info = @api.get_library_info('token')
1053
+ info.should be_kind_of(ConstantContact::Components::LibrarySummary)
1054
+ info.usage_summary['folder_count'].should eq(6)
1055
+ end
1056
+ end
1057
+
1058
+ describe "#get_library_folders" do
1059
+ it "retrieves a list of MyLibrary folders" do
1060
+ json_response = load_file('library_folders_response.json')
1061
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1062
+
1063
+ response = RestClient::Response.create(json_response, net_http_resp, {})
1064
+ RestClient.stub(:get).and_return(response)
1065
+
1066
+ folders = @api.get_library_folders('token', {:limit => 2})
1067
+ folders.should be_kind_of(ConstantContact::Components::ResultSet)
1068
+ folders.results.first.should be_kind_of(ConstantContact::Components::LibraryFolder)
1069
+ folders.results.first.name.should eq('backgrounds')
1070
+ end
1071
+ end
1072
+
1073
+ describe "#add_library_folder" do
1074
+ it "creates a new MyLibrary folder" do
1075
+ json = load_file('library_folder_response.json')
1076
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1077
+
1078
+ response = RestClient::Response.create(json, net_http_resp, {})
1079
+ RestClient.stub(:post).and_return(response)
1080
+ new_folder = ConstantContact::Components::LibraryFolder.create(JSON.parse(json))
1081
+
1082
+ folder = @api.add_library_folder('token', new_folder)
1083
+ folder.should be_kind_of(ConstantContact::Components::LibraryFolder)
1084
+ folder.name.should eq('wildflowers')
1085
+ end
1086
+ end
1087
+
1088
+ describe "#get_library_folder" do
1089
+ it "retrieves a specific MyLibrary folder using the folder_id path parameter" do
1090
+ json = load_file('library_folder_response.json')
1091
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1092
+
1093
+ response = RestClient::Response.create(json, net_http_resp, {})
1094
+ RestClient.stub(:get).and_return(response)
1095
+
1096
+ folder = @api.get_library_folder('token', 6)
1097
+ folder.should be_kind_of(ConstantContact::Components::LibraryFolder)
1098
+ folder.name.should eq('wildflowers')
1099
+ end
1100
+ end
1101
+
1102
+ describe "#update_library_folder" do
1103
+ it "retrieves a specific MyLibrary folder using the folder_id path parameter" do
1104
+ json = load_file('library_folder_response.json')
1105
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1106
+
1107
+ response = RestClient::Response.create(json, net_http_resp, {})
1108
+ RestClient.stub(:put).and_return(response)
1109
+ folder = ConstantContact::Components::LibraryFolder.create(JSON.parse(json))
1110
+
1111
+ response = @api.update_library_folder('token', folder)
1112
+ response.should be_kind_of(ConstantContact::Components::LibraryFolder)
1113
+ response.name.should eq('wildflowers')
1114
+ end
1115
+ end
1116
+
1117
+ describe "#delete_library_folder" do
1118
+ it "deletes a MyLibrary folder" do
1119
+ folder_id = 6
1120
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
1121
+
1122
+ response = RestClient::Response.create('', net_http_resp, {})
1123
+ RestClient.stub(:delete).and_return(response)
1124
+
1125
+ result = @api.delete_library_folder('token', folder_id)
1126
+ result.should be_true
1127
+ end
1128
+ end
1129
+
1130
+ describe "#get_library_trash" do
1131
+ it "retrieve all files in the Trash folder" do
1132
+ json = load_file('library_trash_response.json')
1133
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1134
+
1135
+ response = RestClient::Response.create(json, net_http_resp, {})
1136
+ RestClient.stub(:get).and_return(response)
1137
+
1138
+ files = @api.get_library_trash('token', {:sort_by => 'SIZE_DESC'})
1139
+ files.should be_kind_of(ConstantContact::Components::ResultSet)
1140
+ files.results.first.should be_kind_of(ConstantContact::Components::LibraryFile)
1141
+ files.results.first.name.should eq('menu_form.pdf')
1142
+ end
1143
+ end
1144
+
1145
+ describe "#delete_library_trash" do
1146
+ it "permanently deletes all files in the Trash folder" do
1147
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
1148
+
1149
+ response = RestClient::Response.create('', net_http_resp, {})
1150
+ RestClient.stub(:delete).and_return(response)
1151
+
1152
+ result = @api.delete_library_trash('token')
1153
+ result.should be_true
1154
+ end
1155
+ end
1156
+
1157
+ describe "#get_library_files" do
1158
+ it "retrieves a collection of MyLibrary files in the Constant Contact account" do
1159
+ json_response = load_file('library_files_response.json')
1160
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1161
+
1162
+ response = RestClient::Response.create(json_response, net_http_resp, {})
1163
+ RestClient.stub(:get).and_return(response)
1164
+
1165
+ files = @api.get_library_files('token', {:type => 'ALL'})
1166
+ files.should be_kind_of(ConstantContact::Components::ResultSet)
1167
+ files.results.first.should be_kind_of(ConstantContact::Components::LibraryFile)
1168
+ files.results.first.name.should eq('IMG_0341.JPG')
1169
+ end
1170
+ end
1171
+
1172
+ describe "#get_library_files_by_folder" do
1173
+ it "retrieves a collection of MyLibrary files in the Constant Contact account" do
1174
+ folder_id = -1
1175
+ json_response = load_file('library_files_by_folder_response.json')
1176
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1177
+
1178
+ response = RestClient::Response.create(json_response, net_http_resp, {})
1179
+ RestClient.stub(:get).and_return(response)
1180
+
1181
+ files = @api.get_library_files_by_folder('token', folder_id, {:limit => 10})
1182
+ files.should be_kind_of(ConstantContact::Components::ResultSet)
1183
+ files.results.first.should be_kind_of(ConstantContact::Components::LibraryFile)
1184
+ files.results.first.name.should eq('IMG_0341.JPG')
1185
+ end
1186
+ end
1187
+
1188
+ describe "#get_library_file" do
1189
+ it "retrieve a MyLibrary file using the file_id path parameter" do
1190
+ json = load_file('library_file_response.json')
1191
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1192
+
1193
+ response = RestClient::Response.create(json, net_http_resp, {})
1194
+ RestClient.stub(:get).and_return(response)
1195
+
1196
+ file = @api.get_library_file('token', 6)
1197
+ file.should be_kind_of(ConstantContact::Components::LibraryFile)
1198
+ file.name.should eq('IMG_0261.JPG')
1199
+ end
1200
+ end
1201
+
1202
+ describe "#add_library_file" do
1203
+ it "adds a new MyLibrary file using the multipart content-type" do
1204
+ file_name = 'logo.jpg'
1205
+ folder_id = 1
1206
+ description = 'Logo'
1207
+ source = 'MyComputer'
1208
+ file_type = 'JPG'
1209
+ contents = load_file('logo.jpg')
1210
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1211
+ net_http_resp.add_field('Location', '"https://api.d1.constantcontact.com/v2/library/files/123456789')
1212
+
1213
+ response = RestClient::Response.create("", net_http_resp, {})
1214
+ RestClient.stub(:post).and_return(response)
1215
+
1216
+ response = @api.add_library_file('token', file_name, folder_id, description, source, file_type, contents)
1217
+ response.should be_kind_of(String)
1218
+ response.should eq('123456789')
1219
+ end
1220
+ end
1221
+
1222
+ describe "#update_library_file" do
1223
+ it "updates information for a specific MyLibrary file" do
1224
+ json = load_file('library_file_response.json')
1225
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1226
+
1227
+ response = RestClient::Response.create(json, net_http_resp, {})
1228
+ RestClient.stub(:put).and_return(response)
1229
+ file = ConstantContact::Components::LibraryFile.create(JSON.parse(json))
1230
+
1231
+ response = @api.update_library_file('token', file)
1232
+ response.should be_kind_of(ConstantContact::Components::LibraryFile)
1233
+ response.name.should eq('IMG_0261.JPG')
1234
+ end
1235
+ end
1236
+
1237
+ describe "#delete_library_file" do
1238
+ it "deletes one or more MyLibrary files specified by the fileId path parameter" do
1239
+ file_id = '6, 7'
1240
+ net_http_resp = Net::HTTPResponse.new(1.0, 204, 'No Content')
1241
+
1242
+ response = RestClient::Response.create('', net_http_resp, {})
1243
+ RestClient.stub(:delete).and_return(response)
1244
+
1245
+ result = @api.delete_library_file('token', file_id)
1246
+ result.should be_true
1247
+ end
1248
+ end
1249
+
1250
+ describe "#get_library_files_upload_status" do
1251
+ it "retrieves the upload status for one or more MyLibrary files using the file_id path parameter" do
1252
+ file_id = '6, 7'
1253
+ json = load_file('library_files_upload_status_response.json')
1254
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1255
+
1256
+ response = RestClient::Response.create(json, net_http_resp, {})
1257
+ RestClient.stub(:get).and_return(response)
1258
+
1259
+ statuses = @api.get_library_files_upload_status('token', file_id)
1260
+ statuses.should be_kind_of(Array)
1261
+ statuses.first.should be_kind_of(ConstantContact::Components::UploadStatus)
1262
+ statuses.first.status.should eq('Active')
1263
+ end
1264
+ end
1265
+
1266
+ describe "#move_library_files" do
1267
+ it "moves one or more MyLibrary files to a different folder in the user's account" do
1268
+ folder_id = 1
1269
+ file_id = '8, 9'
1270
+ json = load_file('library_files_move_results_response.json')
1271
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
1272
+
1273
+ response = RestClient::Response.create(json, net_http_resp, {})
1274
+ RestClient.stub(:put).and_return(response)
1275
+
1276
+ results = @api.move_library_files('token', folder_id, file_id)
1277
+ results.should be_kind_of(Array)
1278
+ results.first.should be_kind_of(ConstantContact::Components::MoveResults)
1279
+ results.first.uri.should eq('https://api.d1.constantcontact.com/v2/library/files/9')
1280
+ end
1281
+ end
232
1282
  end
233
1283
  end