sendgrid4r 1.8.1 → 1.10.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 (145) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -2
  3. data/README.md +1 -0
  4. data/lib/sendgrid4r/factory/campaign_factory.rb +18 -5
  5. data/lib/sendgrid4r/factory/condition_factory.rb +1 -1
  6. data/lib/sendgrid4r/factory/mail_factory.rb +57 -0
  7. data/lib/sendgrid4r/factory/segment_factory.rb +2 -5
  8. data/lib/sendgrid4r/factory/version_factory.rb +1 -1
  9. data/lib/sendgrid4r/rest/api.rb +48 -49
  10. data/lib/sendgrid4r/rest/api_keys_management/api_keys.rb +75 -0
  11. data/lib/sendgrid4r/rest/api_keys_management/permissions.rb +31 -0
  12. data/lib/sendgrid4r/rest/blocks.rb +49 -68
  13. data/lib/sendgrid4r/rest/bounces.rb +45 -64
  14. data/lib/sendgrid4r/rest/cancel_scheduled_sends.rb +53 -72
  15. data/lib/sendgrid4r/rest/categories.rb +31 -0
  16. data/lib/sendgrid4r/rest/email_activity.rb +72 -0
  17. data/lib/sendgrid4r/rest/invalid_emails.rb +50 -68
  18. data/lib/sendgrid4r/rest/ip_access_management.rb +86 -111
  19. data/lib/sendgrid4r/rest/ips/addresses.rb +50 -59
  20. data/lib/sendgrid4r/rest/ips/pools.rb +42 -53
  21. data/lib/sendgrid4r/rest/ips/warmup.rb +46 -55
  22. data/lib/sendgrid4r/rest/mail/address.rb +14 -0
  23. data/lib/sendgrid4r/rest/mail/attachment.rb +22 -0
  24. data/lib/sendgrid4r/rest/mail/content.rb +10 -0
  25. data/lib/sendgrid4r/rest/mail/mail.rb +28 -0
  26. data/lib/sendgrid4r/rest/mail/mail_settings.rb +62 -0
  27. data/lib/sendgrid4r/rest/mail/params.rb +64 -0
  28. data/lib/sendgrid4r/rest/mail/personalization.rb +33 -0
  29. data/lib/sendgrid4r/rest/mail/tracking_settings.rb +74 -0
  30. data/lib/sendgrid4r/rest/{contacts → marketing_campaigns/contacts}/custom_fields.rb +12 -27
  31. data/lib/sendgrid4r/rest/{contacts → marketing_campaigns/contacts}/lists.rb +20 -34
  32. data/lib/sendgrid4r/rest/marketing_campaigns/contacts/recipients.rb +134 -0
  33. data/lib/sendgrid4r/rest/{contacts → marketing_campaigns/contacts}/reserved_fields.rb +6 -9
  34. data/lib/sendgrid4r/rest/marketing_campaigns/contacts/segments.rb +86 -0
  35. data/lib/sendgrid4r/rest/marketing_campaigns/marketing_campaigns.rb +119 -0
  36. data/lib/sendgrid4r/rest/marketing_campaigns/senders.rb +101 -0
  37. data/lib/sendgrid4r/rest/request.rb +61 -63
  38. data/lib/sendgrid4r/rest/settings/enforced_tls.rb +23 -26
  39. data/lib/sendgrid4r/rest/settings/mail.rb +167 -183
  40. data/lib/sendgrid4r/rest/settings/partner.rb +33 -36
  41. data/lib/sendgrid4r/rest/settings/settings.rb +17 -22
  42. data/lib/sendgrid4r/rest/settings/tracking.rb +97 -107
  43. data/lib/sendgrid4r/rest/sm/global_unsubscribes.rb +52 -60
  44. data/lib/sendgrid4r/rest/sm/groups.rb +52 -58
  45. data/lib/sendgrid4r/rest/sm/sm.rb +15 -17
  46. data/lib/sendgrid4r/rest/sm/suppressions.rb +50 -67
  47. data/lib/sendgrid4r/rest/spam_reports.rb +49 -69
  48. data/lib/sendgrid4r/rest/stats/advanced.rb +100 -102
  49. data/lib/sendgrid4r/rest/stats/category.rb +31 -33
  50. data/lib/sendgrid4r/rest/stats/global.rb +17 -19
  51. data/lib/sendgrid4r/rest/stats/parse.rb +18 -20
  52. data/lib/sendgrid4r/rest/stats/stats.rb +59 -69
  53. data/lib/sendgrid4r/rest/stats/subuser.rb +70 -32
  54. data/lib/sendgrid4r/rest/subusers.rb +106 -134
  55. data/lib/sendgrid4r/rest/transactional_templates/templates.rb +63 -0
  56. data/lib/sendgrid4r/rest/transactional_templates/versions.rb +90 -0
  57. data/lib/sendgrid4r/rest/users.rb +125 -57
  58. data/lib/sendgrid4r/rest/webhooks/event.rb +36 -42
  59. data/lib/sendgrid4r/rest/webhooks/parse.rb +28 -37
  60. data/lib/sendgrid4r/rest/whitelabel/domains.rb +176 -222
  61. data/lib/sendgrid4r/rest/whitelabel/ips.rb +107 -128
  62. data/lib/sendgrid4r/rest/whitelabel/links.rb +131 -167
  63. data/lib/sendgrid4r/version.rb +1 -1
  64. data/lib/sendgrid4r.rb +23 -13
  65. data/sendgrid4r.gemspec +1 -1
  66. data/spec/client_spec.rb +12 -1
  67. data/spec/factory/campaign_factory_spec.rb +75 -35
  68. data/spec/factory/condition_factory_spec.rb +19 -18
  69. data/spec/factory/segment_factory_spec.rb +28 -21
  70. data/spec/factory/version_factory_spec.rb +28 -27
  71. data/spec/photo.jpg +0 -0
  72. data/spec/rest/api_keys_management/api_keys_spec.rb +174 -0
  73. data/spec/rest/api_keys_management/permissions_spec.rb +54 -0
  74. data/spec/rest/blocks_spec.rb +78 -106
  75. data/spec/rest/bounces_spec.rb +91 -118
  76. data/spec/rest/cancel_scheduled_sends_spec.rb +94 -149
  77. data/spec/rest/categories_spec.rb +77 -0
  78. data/spec/rest/email_activity_spec.rb +151 -0
  79. data/spec/rest/invalid_emails_spec.rb +85 -119
  80. data/spec/rest/ip_access_management_spec.rb +157 -195
  81. data/spec/rest/ips/addresses_spec.rb +94 -122
  82. data/spec/rest/ips/pools_spec.rb +84 -112
  83. data/spec/rest/ips/warmup_spec.rb +63 -71
  84. data/spec/rest/mail/address_spec.rb +28 -0
  85. data/spec/rest/mail/attachment_spec.rb +48 -0
  86. data/spec/rest/mail/content_spec.rb +32 -0
  87. data/spec/rest/mail/mail_settings_spec.rb +51 -0
  88. data/spec/rest/mail/mail_spec.rb +136 -0
  89. data/spec/rest/mail/params_spec.rb +152 -0
  90. data/spec/rest/mail/personalization_spec.rb +66 -0
  91. data/spec/rest/mail/tracking_settings_spec.rb +63 -0
  92. data/spec/rest/marketing_campaigns/contacts/custom_fields_spec.rb +146 -0
  93. data/spec/rest/marketing_campaigns/contacts/lists_spec.rb +307 -0
  94. data/spec/rest/marketing_campaigns/contacts/recipients_spec.rb +331 -0
  95. data/spec/rest/marketing_campaigns/contacts/reserved_fields_spec.rb +119 -0
  96. data/spec/rest/marketing_campaigns/contacts/segments_spec.rb +268 -0
  97. data/spec/rest/marketing_campaigns/marketing_campaigns_spec.rb +427 -0
  98. data/spec/rest/marketing_campaigns/senders_spec.rb +230 -0
  99. data/spec/rest/settings/enforced_tls_spec.rb +38 -54
  100. data/spec/rest/settings/mail_spec.rb +227 -330
  101. data/spec/rest/settings/partner_spec.rb +40 -59
  102. data/spec/rest/settings/settings_spec.rb +44 -42
  103. data/spec/rest/settings/tracking_spec.rb +130 -189
  104. data/spec/rest/sm/global_unsubscribes_spec.rb +47 -72
  105. data/spec/rest/sm/groups_spec.rb +88 -123
  106. data/spec/rest/sm/sm_spec.rb +32 -30
  107. data/spec/rest/sm/suppressions_spec.rb +105 -140
  108. data/spec/rest/spam_reports_spec.rb +81 -109
  109. data/spec/rest/stats/advanced_spec.rb +67 -125
  110. data/spec/rest/stats/category_spec.rb +27 -45
  111. data/spec/rest/stats/global_spec.rb +34 -42
  112. data/spec/rest/stats/parse_spec.rb +32 -30
  113. data/spec/rest/stats/stats_spec.rb +174 -172
  114. data/spec/rest/stats/subuser_spec.rb +97 -57
  115. data/spec/rest/subusers_spec.rb +156 -209
  116. data/spec/rest/transactional_templates/templates_spec.rb +199 -0
  117. data/spec/rest/transactional_templates/versions_spec.rb +228 -0
  118. data/spec/rest/users_spec.rb +176 -91
  119. data/spec/rest/webhooks/event_spec.rb +59 -85
  120. data/spec/rest/webhooks/parse_spec.rb +51 -71
  121. data/spec/rest/whitelabel/domains_spec.rb +333 -513
  122. data/spec/rest/whitelabel/ips_spec.rb +109 -147
  123. data/spec/rest/whitelabel/links_spec.rb +181 -265
  124. metadata +70 -40
  125. data/lib/sendgrid4r/rest/api_keys/api_keys.rb +0 -80
  126. data/lib/sendgrid4r/rest/api_keys/permissions.rb +0 -33
  127. data/lib/sendgrid4r/rest/campaigns/campaigns.rb +0 -126
  128. data/lib/sendgrid4r/rest/categories/categories.rb +0 -43
  129. data/lib/sendgrid4r/rest/contacts/recipients.rb +0 -150
  130. data/lib/sendgrid4r/rest/contacts/segments.rb +0 -97
  131. data/lib/sendgrid4r/rest/email_activity/email_activity.rb +0 -81
  132. data/lib/sendgrid4r/rest/templates/templates.rb +0 -69
  133. data/lib/sendgrid4r/rest/templates/versions.rb +0 -95
  134. data/spec/rest/api_keys/api_keys_spec.rb +0 -210
  135. data/spec/rest/api_keys/permissions_spec.rb +0 -65
  136. data/spec/rest/campaigns/campaigns_spec.rb +0 -492
  137. data/spec/rest/categories/categories_spec.rb +0 -96
  138. data/spec/rest/contacts/custom_fields_spec.rb +0 -174
  139. data/spec/rest/contacts/lists_spec.rb +0 -372
  140. data/spec/rest/contacts/recipients_spec.rb +0 -343
  141. data/spec/rest/contacts/reserved_fields_spec.rb +0 -146
  142. data/spec/rest/contacts/segments_spec.rb +0 -307
  143. data/spec/rest/email_activity/email_activity_spec.rb +0 -179
  144. data/spec/rest/templates/templates_spec.rb +0 -222
  145. data/spec/rest/templates/versions_spec.rb +0 -252
@@ -0,0 +1,268 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/../../../spec_helper'
3
+
4
+ module SendGrid4r::REST::MarketingCampaigns::Contacts
5
+ describe Segments do
6
+ describe 'integration test', :it do
7
+ before do
8
+ Dotenv.load
9
+ @client = SendGrid4r::Client.new(api_key: ENV['SILVER_API_KEY'])
10
+ @name1 = 'test_segment1'
11
+ @name2 = 'test_segment2'
12
+ @edit_name1 = 'test_segment_edit'
13
+ @field = 'last_name1'
14
+ @value = 'Miller'
15
+ @operator = 'eq'
16
+ @and_or = ''
17
+ @condition_factory = SendGrid4r::Factory::ConditionFactory.new
18
+ @segment_factory = SendGrid4r::Factory::SegmentFactory.new
19
+
20
+ # celan up test env(segment)
21
+ @client.get_segments.segments.each do |segment|
22
+ @client.delete_segment(
23
+ segment_id: segment.id
24
+ ) if segment.name == @name1
25
+ @client.delete_segment(
26
+ segment_id: segment.id
27
+ ) if segment.name == @edit_name1
28
+ @client.delete_segment(
29
+ segment_id: segment.id
30
+ ) if segment.name == @name2
31
+ end
32
+ # clean up test env(custom_fields)
33
+ @client.get_custom_fields.custom_fields.each do |field|
34
+ @client.delete_custom_field(
35
+ custom_field_id: field.id
36
+ ) if field.name == @field
37
+ end
38
+ # post a custom field and a segment
39
+ @client.post_custom_field(name: @field, type: 'text')
40
+ @condition = @condition_factory.create(
41
+ field: @field, value: @value, operator: @operator, and_or: @and_or
42
+ )
43
+ params1 = @segment_factory.create(
44
+ name: @name1, list_id: nil, conditions: [@condition]
45
+ )
46
+ @segment1 = @client.post_segment(params: params1)
47
+ end
48
+
49
+ context 'without block call' do
50
+ it '#post_segment' do
51
+ lists = @client.get_lists
52
+ params2 = @segment_factory.create(
53
+ name: @name2, list_id: lists.lists[0].id, conditions: [@condition]
54
+ )
55
+ segment = @client.post_segment(params: params2)
56
+ expect(segment.id).to be_a(Fixnum)
57
+ expect(segment.name).to eq(@name2)
58
+ expect(segment.list_id).to eq(lists.lists[0].id)
59
+ expect(segment.conditions.length).to eq(1)
60
+ expect(segment.recipient_count).to eq(0)
61
+ condition = segment.conditions[0]
62
+ expect(condition.field).to eq(@field)
63
+ expect(condition.value).to eq(@value)
64
+ expect(condition.operator).to eq(@operator)
65
+ expect(condition.and_or).to eq(nil)
66
+ expect(segment.recipient_count).to eq(0)
67
+ end
68
+
69
+ it '#get_segments' do
70
+ segments = @client.get_segments
71
+ segments.segments.each do |segment|
72
+ expect(segment).to be_a(Segments::Segment)
73
+ end
74
+ end
75
+
76
+ it '#get_segment' do
77
+ segment = @client.get_segment(segment_id: @segment1.id)
78
+ expect(segment.id).to eq(@segment1.id)
79
+ expect(segment.name).to eq(@segment1.name)
80
+ expect(segment.list_id).to eq(nil)
81
+ condition = segment.conditions[0]
82
+ expect(condition.field).to eq(@field)
83
+ expect(condition.value).to eq(@value)
84
+ expect(condition.operator).to eq(@operator)
85
+ expect(condition.and_or).to eq(nil)
86
+ expect(segment.recipient_count).to be_a(Fixnum)
87
+ end
88
+
89
+ it '#patch_segment' do
90
+ edit_params = @segment_factory.create(
91
+ name: @edit_name1, conditions: [@condition]
92
+ )
93
+ edit_segment = @client.patch_segment(
94
+ segment_id: @segment1.id, params: edit_params
95
+ )
96
+ expect(edit_segment.name).to eq(@edit_name1)
97
+ end
98
+
99
+ it '#delete_segment' do
100
+ @client.delete_segment(segment_id: @segment1.id)
101
+ end
102
+
103
+ it '#get_recipients_on_segment' do
104
+ recipients = @client.get_recipients_on_segment(
105
+ segment_id: @segment1.id
106
+ )
107
+ recipients.recipients.each do |recipient|
108
+ expect(recipient).to be_a(Recipients::Recipient)
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ describe 'unit test', :ut do
115
+ let(:client) do
116
+ SendGrid4r::Client.new(api_key: '')
117
+ end
118
+
119
+ let(:condition) do
120
+ JSON.parse(
121
+ '{'\
122
+ '"field": "last_name",'\
123
+ '"value": "Miller",'\
124
+ '"operator": "eq",'\
125
+ '"and_or": ""'\
126
+ '}'
127
+ )
128
+ end
129
+
130
+ let(:segment) do
131
+ JSON.parse(
132
+ '{'\
133
+ '"id": 1,'\
134
+ '"name": "Last Name Miller",'\
135
+ '"list_id": 4,'\
136
+ '"conditions": ['\
137
+ '{'\
138
+ '"field": "last_name",'\
139
+ '"value": "Miller",'\
140
+ '"operator": "eq",'\
141
+ '"and_or": ""'\
142
+ '}'\
143
+ '],'\
144
+ '"recipient_count": 1'\
145
+ '}'
146
+ )
147
+ end
148
+
149
+ let(:segments) do
150
+ JSON.parse(
151
+ '{'\
152
+ '"segments": ['\
153
+ '{'\
154
+ '"id": 1,'\
155
+ '"name": "Last Name Miller",'\
156
+ '"list_id": 4,'\
157
+ '"conditions": ['\
158
+ '{'\
159
+ '"field": "last_name",'\
160
+ '"value": "Miller",'\
161
+ '"operator": "eq",'\
162
+ '"and_or": ""'\
163
+ '}'\
164
+ '],'\
165
+ '"recipient_count": 1'\
166
+ '}'\
167
+ ']'\
168
+ '}'
169
+ )
170
+ end
171
+
172
+ let(:recipients) do
173
+ JSON.parse(
174
+ '{'\
175
+ '"recipients": ['\
176
+ '{'\
177
+ '"created_at": 1422313607,'\
178
+ '"email": "jones@example.com",'\
179
+ '"first_name": null,'\
180
+ '"id": "jones@example.com",'\
181
+ '"last_clicked": null,'\
182
+ '"last_emailed": null,'\
183
+ '"last_name": "Jones",'\
184
+ '"last_opened": null,'\
185
+ '"updated_at": 1422313790,'\
186
+ '"custom_fields": ['\
187
+ '{'\
188
+ '"id": 23,'\
189
+ '"name": "pet",'\
190
+ '"value": "Fluffy",'\
191
+ '"type": "text"'\
192
+ '}'\
193
+ ']'\
194
+ '}'\
195
+ ']'\
196
+ '}'
197
+ )
198
+ end
199
+
200
+ it '#post_segment' do
201
+ allow(client).to receive(:execute).and_return(segment)
202
+ actual = client.post_segment(params: nil)
203
+ expect(actual).to be_a(Segments::Segment)
204
+ end
205
+
206
+ it '#get_segments' do
207
+ allow(client).to receive(:execute).and_return(segments)
208
+ actual = client.get_segments
209
+ expect(actual).to be_a(Segments::Segments)
210
+ end
211
+
212
+ it '#get_segment' do
213
+ allow(client).to receive(:execute).and_return(segment)
214
+ actual = client.get_segment(segment_id: 0)
215
+ expect(actual).to be_a(Segments::Segment)
216
+ end
217
+
218
+ it '#patch_segment' do
219
+ allow(client).to receive(:execute).and_return(segment)
220
+ actual = client.patch_segment(segment_id: 0, params: nil)
221
+ expect(actual).to be_a(Segments::Segment)
222
+ end
223
+
224
+ it '#get_recipients_on_segment' do
225
+ allow(client).to receive(:execute).and_return(recipients)
226
+ actual = client.get_recipients_on_segment(segment_id: 0)
227
+ expect(actual).to be_a(Recipients::Recipients)
228
+ end
229
+
230
+ it '#delete_segment' do
231
+ allow(client).to receive(:execute).and_return('')
232
+ actual = client.delete_segment(segment_id: 0)
233
+ expect(actual).to eq('')
234
+ end
235
+
236
+ it 'creates condition instance' do
237
+ actual = Segments.create_condition(condition)
238
+ expect(actual).to be_a(Segments::Condition)
239
+ expect(actual.field).to eq('last_name')
240
+ expect(actual.value).to eq('Miller')
241
+ expect(actual.operator).to eq('eq')
242
+ expect(actual.and_or).to eq('')
243
+ end
244
+
245
+ it 'creates segment instance' do
246
+ actual = Segments.create_segment(segment)
247
+ expect(actual).to be_a(Segments::Segment)
248
+ expect(actual.id).to eq(1)
249
+ expect(actual.name).to eq('Last Name Miller')
250
+ expect(actual.list_id).to eq(4)
251
+ expect(actual.conditions).to be_a(Array)
252
+ actual.conditions.each do |condition|
253
+ expect(condition).to be_a(Segments::Condition)
254
+ end
255
+ expect(actual.recipient_count).to be_a(Fixnum)
256
+ end
257
+
258
+ it 'creates segments instance' do
259
+ actual = Segments.create_segments(segments)
260
+ expect(actual).to be_a(Segments::Segments)
261
+ expect(actual.segments).to be_a(Array)
262
+ actual.segments.each do |segment|
263
+ expect(segment).to be_a(Segments::Segment)
264
+ end
265
+ end
266
+ end
267
+ end
268
+ end
@@ -0,0 +1,427 @@
1
+ # encoding: utf-8
2
+ require File.dirname(__FILE__) + '/../../spec_helper'
3
+
4
+ module SendGrid4r::REST::MarketingCampaigns
5
+ describe SendGrid4r::REST::MarketingCampaigns do
6
+ describe 'integration test', :it do
7
+ before do
8
+ Dotenv.load
9
+ @client = SendGrid4r::Client.new(api_key: ENV['KN_API_KEY'])
10
+ @title1 = 'Test Title1'
11
+ @title2 = 'Test Title2'
12
+ @title1_edit = 'Edit Title1'
13
+ @subject1 = 'Subject1'
14
+ @subject2 = 'Subject2'
15
+
16
+ @email1 = 'test@example.com'
17
+ @last_name1 = 'Last Name1'
18
+ @list_name1 = 'List Name1'
19
+ @group_name1 = 'Group Name1'
20
+ @pool_name1 = 'pool_test1'
21
+
22
+ # celan up test env
23
+ # delete campaigns
24
+ campaigns = @client.get_campaigns
25
+ campaigns.result.each do |campaign|
26
+ @client.delete_campaign(
27
+ campaign_id: campaign.id
28
+ ) if campaign.title == @title1
29
+ @client.delete_campaign(
30
+ campaign_id: campaign.id
31
+ ) if campaign.title == @title2
32
+ @client.delete_campaign(
33
+ campaign_id: campaign.id
34
+ ) if campaign.title == @title1_edit
35
+ end
36
+ # delete recipients
37
+ recipients = @client.get_recipients
38
+ recipients.recipients.each do |recipient|
39
+ next if recipient.email != @email1
40
+ @client.delete_recipient(recipient_id: recipient.id)
41
+ end
42
+ # delete lists
43
+ lists = @client.get_lists
44
+ lists.lists.each do |list|
45
+ next if list.name != @list_name1
46
+ @client.delete_list(list_id: list.id)
47
+ end
48
+ # delete suppression groups
49
+ grps = @client.get_groups
50
+ grps.each do |grp|
51
+ next if grp.name != @group_name1
52
+ @client.delete_group(group_id: grp.id)
53
+ end
54
+ # delete ip pools
55
+ pools = @client.get_pools
56
+ pools.each do |pool|
57
+ @client.delete_pool(name: pool.name) if pool.name == @pool_name1
58
+ end
59
+ # post a recipient
60
+ recipient1 = {}
61
+ recipient1['email'] = @email1
62
+ recipient1['last_name'] = @last_name1
63
+ @result = @client.post_recipients(params: [recipient1])
64
+ # post a list
65
+ @list1 = @client.post_list(name: @list_name1)
66
+ # add a recipient to the list
67
+ @client.post_recipient_to_list(
68
+ list_id: @list1.id, recipient_id: @result.persisted_recipients[0]
69
+ )
70
+ # add a group
71
+ @group1 = @client.post_group(name: @group_name1, description: 'test')
72
+ # add an ip pool
73
+ @pool1 = @client.post_pool(name: @pool_name1)
74
+ # add a campaign
75
+ @campaign_factory = SendGrid4r::Factory::CampaignFactory.new
76
+ @params = @campaign_factory.create(
77
+ title: @title1, subject: @subject1, sender_id: 516,
78
+ list_ids: [@list1.id], categories: ['cat1'],
79
+ suppression_group_id: @group1.id,
80
+ html_content: 'html <a href="[unsubscribe]">unsub</a>',
81
+ plain_content: 'plain [unsubscribe]')
82
+ @campaign1 = @client.post_campaign(params: @params)
83
+ end
84
+
85
+ context 'without block call' do
86
+ it '#post_campaign' do
87
+ params = @campaign_factory.create(
88
+ title: @title2, subject: @subject2, sender_id: 516,
89
+ list_ids: [@list1.id], categories: ['cat1'],
90
+ suppression_group_id: @group1.id, html_content: 'html',
91
+ plain_content: 'plain')
92
+ campaign2 = @client.post_campaign(params: params)
93
+ expect(campaign2.title).to eq(@title2)
94
+ expect(campaign2.subject).to eq(@subject2)
95
+ expect(campaign2.sender_id).to eq(516)
96
+ expect(campaign2.list_ids).to eq([@list1.id])
97
+ expect(campaign2.categories).to eq(['cat1'])
98
+ expect(campaign2.suppression_group_id).to eq(@group1.id)
99
+ expect(campaign2.html_content).to eq('html')
100
+ expect(campaign2.plain_content).to eq('plain')
101
+ end
102
+
103
+ it '#post_campaign with custom_unsubscribe_url' do
104
+ params = @campaign_factory.create(
105
+ title: @title2, subject: @subject2, sender_id: 516,
106
+ list_ids: [@list1.id], categories: ['cat1'],
107
+ custom_unsubscribe_url: 'https://sendgrid.com',
108
+ ip_pool: @pool_name1, html_content: 'html', plain_content: 'plain')
109
+ campaign2 = @client.post_campaign(params: params)
110
+ expect(campaign2.title).to eq(@title2)
111
+ expect(campaign2.subject).to eq(@subject2)
112
+ expect(campaign2.sender_id).to eq(516)
113
+ expect(campaign2.list_ids).to eq([@list1.id])
114
+ expect(campaign2.categories).to eq(['cat1'])
115
+ expect(campaign2.html_content).to eq('html')
116
+ expect(campaign2.plain_content).to eq('plain')
117
+ end
118
+
119
+ it '#get_campaigns' do
120
+ campaigns = @client.get_campaigns
121
+ expect(campaigns.length).to be >= 1
122
+ campaigns.result.each do |campaign|
123
+ next if campaign.title != @title1
124
+ expect(campaign.title).to eq(@title1)
125
+ end
126
+ end
127
+
128
+ it '#get_campaign' do
129
+ campaign = @client.get_campaign(campaign_id: @campaign1.id)
130
+ expect(campaign).to eq(@campaign1)
131
+ end
132
+
133
+ it '#delete_campaign' do
134
+ @client.delete_campaign(campaign_id: @campaign1.id)
135
+ expect do
136
+ @client.delete_campaign(campaign_id: @campaign1.id)
137
+ end.to raise_error(RestClient::ResourceNotFound)
138
+ end
139
+
140
+ it '#patch_campaign' do
141
+ @campaign1.title = @title1_edit
142
+ actual = @client.patch_campaign(
143
+ campaign_id: @campaign1.id, params: @campaign1
144
+ )
145
+ expect(actual.title).to eq(@title1_edit)
146
+ end
147
+
148
+ it '#send_campaign' do
149
+ actual = @client.send_campaign(campaign_id: @campaign1.id)
150
+ expect(actual.id).to eq(@campaign1.id)
151
+ expect(actual.status).to eq('Scheduled')
152
+ end
153
+
154
+ it '#schedule_campaign' do
155
+ send_at = Time.at(Time.now.to_i, 0)
156
+ actual = @client.schedule_campaign(
157
+ campaign_id: @campaign1.id,
158
+ send_at: send_at
159
+ )
160
+ expect(actual.id).to eq(@campaign1.id)
161
+ expect(actual.status).to eq('Scheduled')
162
+ expect(actual.send_at).to eq(send_at)
163
+ end
164
+
165
+ it '#reschedule_campaign' do
166
+ send_at = Time.at(Time.now.to_i, 0)
167
+ @client.schedule_campaign(
168
+ campaign_id: @campaign1.id,
169
+ send_at: send_at
170
+ )
171
+ send_at = Time.at(Time.now.to_i, 0)
172
+ actual = @client.reschedule_campaign(
173
+ campaign_id: @campaign1.id,
174
+ send_at: send_at
175
+ )
176
+ expect(actual.id).to eq(@campaign1.id)
177
+ expect(actual.status).to eq('Scheduled')
178
+ expect(actual.send_at).to eq(send_at)
179
+ end
180
+
181
+ it '#get_schedule_time_campaign' do
182
+ send_at = Time.at(Time.now.to_i, 0)
183
+ @client.schedule_campaign(
184
+ campaign_id: @campaign1.id,
185
+ send_at: send_at
186
+ )
187
+ actual = @client.get_schedule_time_campaign(
188
+ campaign_id: @campaign1.id
189
+ )
190
+ expect(actual.send_at).to eq(send_at)
191
+ end
192
+
193
+ it '#unschedule_campaign' do
194
+ send_at = Time.at(Time.now.to_i, 0)
195
+ @client.schedule_campaign(
196
+ campaign_id: @campaign1.id, send_at: send_at
197
+ )
198
+ @client.unschedule_campaign(campaign_id: @campaign1.id)
199
+ end
200
+
201
+ it '#test_campaign' do
202
+ @client.test_campaign(campaign_id: @campaign1.id, to: ENV['MAIL'])
203
+ end
204
+ end
205
+ end
206
+
207
+ describe 'unit test', :ut do
208
+ let(:client) do
209
+ SendGrid4r::Client.new(api_key: '')
210
+ end
211
+
212
+ let(:campaign) do
213
+ JSON.parse(
214
+ '{'\
215
+ '"id": 986724,'\
216
+ '"title": "March Newsletter",'\
217
+ '"subject": "New Products for Spring!",'\
218
+ '"sender_id": 124451,'\
219
+ '"list_ids": ['\
220
+ '110,'\
221
+ '124'\
222
+ '],'\
223
+ '"segment_ids": ['\
224
+ '110'\
225
+ '],'\
226
+ '"categories": ['\
227
+ '"spring line"'\
228
+ '],'\
229
+ '"suppression_group_id": 42,'\
230
+ '"custom_unsubscribe_url": "",'\
231
+ '"ip_pool": "marketing",'\
232
+ '"html_content": "<html><head><title></title></head><body>'\
233
+ '<p>Check out our spring line!</p></body></html>",'\
234
+ '"plain_content": "Check out our spring line!",'\
235
+ '"status": "Draft"'\
236
+ '}'
237
+ )
238
+ end
239
+
240
+ let(:campaigns) do
241
+ JSON.parse(
242
+ '{'\
243
+ '"result": ['\
244
+ '{'\
245
+ '"id": 986724,'\
246
+ '"title": "March Newsletter",'\
247
+ '"subject": "New Products for Spring!",'\
248
+ '"sender_id": 124451,'\
249
+ '"list_ids": ['\
250
+ '110,'\
251
+ '124'\
252
+ '],'\
253
+ '"segment_ids": ['\
254
+ '110'\
255
+ '],'\
256
+ '"categories": ['\
257
+ '"spring line"'\
258
+ '],'\
259
+ '"suppression_group_id": 42,'\
260
+ '"custom_unsubscribe_url": "",'\
261
+ '"ip_pool": "marketing",'\
262
+ '"html_content": "<html><head><title></title></head><body>'\
263
+ '<p>Check out our spring line!</p></body></html>",'\
264
+ '"plain_content": "Check out our spring line!",'\
265
+ '"status": "Draft"'\
266
+ '},'\
267
+ '{'\
268
+ '"id": 986723,'\
269
+ '"title": "February Newsletter",'\
270
+ '"subject": "Final Winter Product Sale!",'\
271
+ '"sender_id": 124451,'\
272
+ '"list_ids": ['\
273
+ '110,'\
274
+ '124'\
275
+ '],'\
276
+ '"segment_ids": ['\
277
+ '110'\
278
+ '],'\
279
+ '"categories": ['\
280
+ '"winter line"'\
281
+ '],'\
282
+ '"suppression_group_id": 42,'\
283
+ '"custom_unsubscribe_url": "",'\
284
+ '"ip_pool": "marketing",'\
285
+ '"html_content": "<html><head><title></title></head><body>'\
286
+ '<p>Last call for winter clothes!</p></body></html>",'\
287
+ '"plain_content": "Last call for winter clothes!",'\
288
+ '"status": "Sent"'\
289
+ '}'\
290
+ ']'\
291
+ '}'
292
+ )
293
+ end
294
+
295
+ let(:sent) do
296
+ JSON.parse(
297
+ '{'\
298
+ '"id": 986724,'\
299
+ '"status": "Scheduled"'\
300
+ '}'
301
+ )
302
+ end
303
+
304
+ let(:schedule) do
305
+ JSON.parse(
306
+ '{'\
307
+ '"id": 986724,'\
308
+ '"send_at": 1489771528,'\
309
+ '"status": "Scheduled"'\
310
+ '}'
311
+ )
312
+ end
313
+
314
+ it '#post_campaign' do
315
+ allow(client).to receive(:execute).and_return(campaign)
316
+ actual = client.post_campaign(params: nil)
317
+ expect(actual).to be_a(Campaign)
318
+ end
319
+
320
+ it '#get_campaigns' do
321
+ allow(client).to receive(:execute).and_return(campaigns)
322
+ actual = client.get_campaigns
323
+ expect(actual).to be_a(
324
+ Campaigns
325
+ )
326
+ end
327
+
328
+ it '#get_campaign' do
329
+ allow(client).to receive(:execute).and_return(campaign)
330
+ actual = client.get_campaign(campaign_id: 0)
331
+ expect(actual).to be_a(Campaign)
332
+ end
333
+
334
+ it '#delete_campaign' do
335
+ allow(client).to receive(:execute).and_return('')
336
+ client.delete_campaign(campaign_id: 0)
337
+ end
338
+
339
+ it '#patch_campaign' do
340
+ allow(client).to receive(:execute).and_return(campaign)
341
+ actual = client.patch_campaign(campaign_id: 0, params: nil)
342
+ expect(actual).to be_a(Campaign)
343
+ end
344
+
345
+ it '#send_campaign' do
346
+ allow(client).to receive(:execute).and_return(sent)
347
+ actual = client.send_campaign(campaign_id: 0)
348
+ expect(actual).to be_a(Campaign)
349
+ end
350
+
351
+ it '#schedule_campaign' do
352
+ allow(client).to receive(:execute).and_return(schedule)
353
+ actual = client.schedule_campaign(campaign_id: 0, send_at: nil)
354
+ expect(actual).to be_a(Campaign)
355
+ end
356
+
357
+ it '#reschedule_campaign' do
358
+ allow(client).to receive(:execute).and_return(schedule)
359
+ actual = client.reschedule_campaign(campaign_id: 0, send_at: nil)
360
+ expect(actual).to be_a(Campaign)
361
+ end
362
+
363
+ it '#get_schedule_time_campaign' do
364
+ allow(client).to receive(:execute).and_return(schedule)
365
+ actual = client.get_schedule_time_campaign(campaign_id: 0)
366
+ expect(actual).to be_a(Campaign)
367
+ end
368
+
369
+ it '#unschedule_campaign' do
370
+ allow(client).to receive(:execute).and_return('')
371
+ actual = client.unschedule_campaign(campaign_id: 0)
372
+ expect(actual).to eq('')
373
+ end
374
+
375
+ it '#test_campaign' do
376
+ allow(client).to receive(:execute).and_return('')
377
+ actual = client.test_campaign(campaign_id: 0, to: '')
378
+ expect(actual).to eq('')
379
+ end
380
+
381
+ it 'creates campaign instance' do
382
+ actual = SendGrid4r::REST::MarketingCampaigns.create_campaign(campaign)
383
+ expect(actual).to be_a(Campaign)
384
+ expect(actual.id).to eq(986724)
385
+ expect(actual.title).to eq('March Newsletter')
386
+ expect(actual.subject).to eq('New Products for Spring!')
387
+ expect(actual.sender_id).to eq(124451)
388
+ expect(actual.list_ids).to eq([110, 124])
389
+ expect(actual.segment_ids).to eq([110])
390
+ expect(actual.categories).to eq(['spring line'])
391
+ expect(actual.suppression_group_id).to eq(42)
392
+ expect(actual.custom_unsubscribe_url).to eq('')
393
+ expect(actual.ip_pool).to eq('marketing')
394
+ expect(actual.html_content).to eq(
395
+ '<html><head><title></title></head><body>'\
396
+ '<p>Check out our spring line!</p></body></html>')
397
+ expect(actual.plain_content).to eq('Check out our spring line!')
398
+ expect(actual.status).to eq('Draft')
399
+ end
400
+
401
+ it 'creates campaigns instance' do
402
+ actual = SendGrid4r::REST::MarketingCampaigns.create_campaigns(
403
+ campaigns
404
+ )
405
+ expect(actual).to be_a(Campaigns)
406
+ actual.result.each do |campaign|
407
+ expect(campaign).to be_a(Campaign)
408
+ end
409
+ end
410
+
411
+ it 'creates sent instance' do
412
+ actual = SendGrid4r::REST::MarketingCampaigns.create_campaign(sent)
413
+ expect(actual).to be_a(Campaign)
414
+ expect(actual.id).to eq(986724)
415
+ expect(actual.status).to eq('Scheduled')
416
+ end
417
+
418
+ it 'creates schedule instance' do
419
+ actual = SendGrid4r::REST::MarketingCampaigns.create_campaign(schedule)
420
+ expect(actual).to be_a(Campaign)
421
+ expect(actual.id).to eq(986724)
422
+ expect(actual.send_at).to eq(Time.at(1489771528))
423
+ expect(actual.status).to eq('Scheduled')
424
+ end
425
+ end
426
+ end
427
+ end