mailerlite-ruby 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.env.example +1 -0
- data/.github/workflows/main.yml +17 -0
- data/.github/workflows/publish_gem.yml +21 -0
- data/.gitignore +60 -0
- data/.rspec +1 -0
- data/.rubocop.yml +36 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +801 -0
- data/Rakefile +8 -0
- data/bin/console +8 -0
- data/bin/setup +8 -0
- data/fixtures/automations/fetch.yml +61 -0
- data/fixtures/automations/get.yml +68 -0
- data/fixtures/automations/get_subscriber_activity.yml +71 -0
- data/fixtures/batch/request.yml +59 -0
- data/fixtures/campaigns/activity.yml +64 -0
- data/fixtures/campaigns/create.yml +65 -0
- data/fixtures/campaigns/delete.yml +53 -0
- data/fixtures/campaigns/fetch.yml +64 -0
- data/fixtures/campaigns/get.yml +68 -0
- data/fixtures/campaigns/languages.yml +60 -0
- data/fixtures/campaigns/schedule.yml +160 -0
- data/fixtures/campaigns/update.yml +159 -0
- data/fixtures/fields/create.yml +57 -0
- data/fixtures/fields/delete.yml +53 -0
- data/fixtures/fields/get.yml +60 -0
- data/fixtures/fields/update.yml +57 -0
- data/fixtures/forms/delete.yml +53 -0
- data/fixtures/forms/fetch.yml +60 -0
- data/fixtures/forms/fetch_subscribers.yml +59 -0
- data/fixtures/forms/list.yml +62 -0
- data/fixtures/forms/update.yml +60 -0
- data/fixtures/groups/assign_subscriber.yml +58 -0
- data/fixtures/groups/create.yml +58 -0
- data/fixtures/groups/delete.yml +53 -0
- data/fixtures/groups/get.yml +63 -0
- data/fixtures/groups/get_subscribers.yml +62 -0
- data/fixtures/groups/unassign_subscriber.yml +53 -0
- data/fixtures/groups/update.yml +58 -0
- data/fixtures/segments/delete.yml +53 -0
- data/fixtures/segments/get_subscribers.yml +61 -0
- data/fixtures/segments/list.yml +60 -0
- data/fixtures/segments/update.yml +58 -0
- data/fixtures/subscribers/create.yml +57 -0
- data/fixtures/subscribers/delete.yml +51 -0
- data/fixtures/subscribers/fetch.yml +68 -0
- data/fixtures/subscribers/fetch_count.yml +55 -0
- data/fixtures/subscribers/get.yml +62 -0
- data/fixtures/timezones/list.yml +575 -0
- data/fixtures/webhooks/create.yml +58 -0
- data/fixtures/webhooks/delete.yml +53 -0
- data/fixtures/webhooks/get.yml +58 -0
- data/fixtures/webhooks/list.yml +61 -0
- data/fixtures/webhooks/update.yml +58 -0
- data/lib/mailerlite/automations/automations.rb +62 -0
- data/lib/mailerlite/batch/batch.rb +24 -0
- data/lib/mailerlite/campaigns/campaigns.rb +216 -0
- data/lib/mailerlite/client.rb +35 -0
- data/lib/mailerlite/fields/fields.rb +61 -0
- data/lib/mailerlite/forms/forms.rb +73 -0
- data/lib/mailerlite/groups/groups.rb +90 -0
- data/lib/mailerlite/segments/segments.rb +62 -0
- data/lib/mailerlite/subscribers/subscribers.rb +116 -0
- data/lib/mailerlite/timezones/timezones.rb +22 -0
- data/lib/mailerlite/version.rb +5 -0
- data/lib/mailerlite/webhooks/webhooks.rb +67 -0
- data/lib/mailerlite-ruby.rb +3 -0
- data/lib/mailerlite.rb +13 -0
- data/mailerlite-ruby.gemspec +42 -0
- data/renovate.json +5 -0
- data/spec/automations_rspec.rb +63 -0
- data/spec/batches_rspec.rb +41 -0
- data/spec/campaigns_rspec.rb +155 -0
- data/spec/fields_rspec.rb +70 -0
- data/spec/forms_rspec.rb +81 -0
- data/spec/groups_rspec.rb +97 -0
- data/spec/segments_rspec.rb +70 -0
- data/spec/spec_helper.rb +101 -0
- data/spec/subscribers_rspec.rb +84 -0
- data/spec/timezones_rspec.rb +36 -0
- data/spec/webhooks_rspec.rb +86 -0
- metadata +303 -0
@@ -0,0 +1,155 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# require "webmock/rspec"
|
9
|
+
# Import the `Campaigns` class
|
10
|
+
|
11
|
+
# Configure VCR to save and replay HTTP requests
|
12
|
+
VCR.configure do |config|
|
13
|
+
config.cassette_library_dir = './fixtures'
|
14
|
+
config.hook_into :webmock
|
15
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
16
|
+
interaction.request.headers['Authorization'][0]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set up the test for the `Campaigns` class
|
21
|
+
RSpec.describe MailerLite::Campaigns do
|
22
|
+
let(:client) { MailerLite::Client.new }
|
23
|
+
let(:campaigns) { described_class.new(client: client) }
|
24
|
+
|
25
|
+
describe '#get' do
|
26
|
+
# Use VCR to record and replay the HTTP request
|
27
|
+
it 'returns a list of Campaigns' do
|
28
|
+
VCR.use_cassette('campaigns/get') do
|
29
|
+
response = campaigns.get(
|
30
|
+
filter: {
|
31
|
+
status: 'sent',
|
32
|
+
type: 'regular'
|
33
|
+
}
|
34
|
+
)
|
35
|
+
body = JSON.parse(response.body)
|
36
|
+
expect(response.status).to eq 200
|
37
|
+
expect(body['data']).to be_an Array
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#create' do
|
43
|
+
# Use VCR to record and replay the HTTP request
|
44
|
+
it 'creates a new campaign' do
|
45
|
+
VCR.use_cassette('campaigns/create') do
|
46
|
+
response = campaigns.create(name: 'test_campaign',
|
47
|
+
type: 'regular',
|
48
|
+
emails: [{
|
49
|
+
subject: 'test subject',
|
50
|
+
from: 'sdk@mailerlite.com',
|
51
|
+
from_name: 'user'
|
52
|
+
}])
|
53
|
+
body = JSON.parse(response.body)
|
54
|
+
expect(response.status).to eq 201
|
55
|
+
expect(Integer(body['data']['id'])).to be_a Integer
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
describe '#update' do
|
60
|
+
# Use VCR to record and replay the HTTP request
|
61
|
+
it 'updates a new campaign' do
|
62
|
+
VCR.use_cassette('campaigns/update') do
|
63
|
+
response = campaigns.update(
|
64
|
+
campaign_id: 74_917_804_992_628_332,
|
65
|
+
name: 'test_campaign1',
|
66
|
+
type: 'regular',
|
67
|
+
emails: [{
|
68
|
+
subject: 'testsubject1',
|
69
|
+
from: 'sdk@mailerlite.com',
|
70
|
+
from_name: 'user',
|
71
|
+
content: '<!DOCTYPE html>
|
72
|
+
<html>
|
73
|
+
<body>
|
74
|
+
This is a test email
|
75
|
+
</body>
|
76
|
+
</html>'
|
77
|
+
}]
|
78
|
+
)
|
79
|
+
body = JSON.parse(response.body)
|
80
|
+
expect(response.status).to eq 200
|
81
|
+
expect(Integer(body['data']['id'])).to be_a Integer
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#fetch' do
|
87
|
+
# Use VCR to record and replay the HTTP request
|
88
|
+
it 'fetches a campaign' do
|
89
|
+
VCR.use_cassette('campaigns/fetch') do
|
90
|
+
response = campaigns.fetch(74_917_804_992_628_332)
|
91
|
+
body = JSON.parse(response.body)
|
92
|
+
expect(response.status).to eq 200
|
93
|
+
expect(Integer(body['data']['id'])).to be_a Integer
|
94
|
+
expect(Integer(body['data']['account_id'])).to be_a Integer
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#schedule' do
|
100
|
+
# Use VCR to record and replay the HTTP request
|
101
|
+
it 'schedules a campaign' do
|
102
|
+
VCR.use_cassette('campaigns/schedule') do
|
103
|
+
response = campaigns.schedule(
|
104
|
+
campaign_id: 75_323_121_649_846_116,
|
105
|
+
delivery: 'scheduled',
|
106
|
+
schedule: { date: '2022-12-31', hours: '22', minutes: '00' }
|
107
|
+
)
|
108
|
+
body = JSON.parse(response.body)
|
109
|
+
expect(response.status).to eq 200
|
110
|
+
expect(body['data']['status']).to eq 'ready'
|
111
|
+
expect(Integer(body['data']['account_id'])).to be_a Integer
|
112
|
+
expect(Integer(body['data']['id'])).to be_a Integer
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe '#activity' do
|
118
|
+
# Use VCR to record and replay the HTTP request
|
119
|
+
it 'gets subscriber activity of a campaign' do
|
120
|
+
VCR.use_cassette('campaigns/activity') do
|
121
|
+
response = campaigns.activity(
|
122
|
+
campaign_id: 75_037_917_434_611_569,
|
123
|
+
filter: {
|
124
|
+
type: 'opened'
|
125
|
+
}
|
126
|
+
)
|
127
|
+
body = JSON.parse(response.body)
|
128
|
+
expect(response.status).to eq 200
|
129
|
+
expect(body['data']).to be_a Array
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe '#languages' do
|
135
|
+
# Use VCR to record and replay the HTTP request
|
136
|
+
it 'gets subscriber languages of a campaign' do
|
137
|
+
VCR.use_cassette('campaigns/languages') do
|
138
|
+
response = campaigns.languages
|
139
|
+
body = JSON.parse(response.body)
|
140
|
+
expect(response.status).to eq 200
|
141
|
+
expect(body['data']).to be_a Array
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe '#delete' do
|
147
|
+
# Use VCR to record and replay the HTTP request
|
148
|
+
it 'deletes a campaign' do
|
149
|
+
VCR.use_cassette('campaigns/delete') do
|
150
|
+
response = campaigns.delete(74_917_804_992_628_332)
|
151
|
+
expect(response.status).to eq 204
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# require "webmock/rspec"
|
9
|
+
# Import the `Fields` class
|
10
|
+
|
11
|
+
# Configure VCR to save and replay HTTP requests
|
12
|
+
VCR.configure do |config|
|
13
|
+
config.cassette_library_dir = './fixtures'
|
14
|
+
config.hook_into :webmock
|
15
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
16
|
+
interaction.request.headers['Authorization'][0]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set up the test for the `Fields` class
|
21
|
+
RSpec.describe MailerLite::Fields do
|
22
|
+
let(:client) { MailerLite::Client.new }
|
23
|
+
let(:fields) { described_class.new(client: client) }
|
24
|
+
|
25
|
+
describe '#get' do
|
26
|
+
# Use VCR to record and replay the HTTP request
|
27
|
+
it 'returns a list of Fields' do
|
28
|
+
VCR.use_cassette('fields/get') do
|
29
|
+
response = fields.get
|
30
|
+
body = JSON.parse(response.body)
|
31
|
+
expect(response.status).to eq 200
|
32
|
+
expect(body['data']).to be_an Array
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#create' do
|
38
|
+
# Use VCR to record and replay the HTTP request
|
39
|
+
it 'creates a field' do
|
40
|
+
VCR.use_cassette('fields/create') do
|
41
|
+
response = fields.create(type: 'text', name: 'test_field_name')
|
42
|
+
body = JSON.parse(response.body)
|
43
|
+
expect(response.status).to eq 201
|
44
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#update' do
|
50
|
+
# Use VCR to record and replay the HTTP request
|
51
|
+
it 'updates a field' do
|
52
|
+
VCR.use_cassette('fields/update') do
|
53
|
+
response = fields.update(field_id: 91_115, name: 'test_field2')
|
54
|
+
body = JSON.parse(response.body)
|
55
|
+
expect(response.status).to eq 200
|
56
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#delete' do
|
62
|
+
# Use VCR to record and replay the HTTP request
|
63
|
+
it 'deletes a field' do
|
64
|
+
VCR.use_cassette('fields/delete') do
|
65
|
+
response = fields.delete(91_115)
|
66
|
+
expect(response.status).to eq 204
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/spec/forms_rspec.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# require "webmock/rspec"
|
9
|
+
# Import the `Forms` class
|
10
|
+
|
11
|
+
# Configure VCR to save and replay HTTP requests
|
12
|
+
VCR.configure do |config|
|
13
|
+
config.cassette_library_dir = './fixtures'
|
14
|
+
config.hook_into :webmock
|
15
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
16
|
+
interaction.request.headers['Authorization'][0]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set up the test for the `Forms` class
|
21
|
+
RSpec.describe MailerLite::Forms do
|
22
|
+
let(:client) { MailerLite::Client.new }
|
23
|
+
let(:forms) { described_class.new(client: client) }
|
24
|
+
|
25
|
+
describe '#list' do
|
26
|
+
# Use VCR to record and replay the HTTP request
|
27
|
+
it 'lists all form' do
|
28
|
+
VCR.use_cassette('forms/list') do
|
29
|
+
response = forms.list(type: 'popup')
|
30
|
+
body = JSON.parse(response.body)
|
31
|
+
expect(response.status).to eq 200
|
32
|
+
expect(body['data']).to be_an Array
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
describe '#update' do
|
37
|
+
# Use VCR to record and replay the HTTP request
|
38
|
+
it 'updates a form' do
|
39
|
+
VCR.use_cassette('forms/update') do
|
40
|
+
response = forms.update(form_id: 75_017_795_259_074_408, name: 'test_form2')
|
41
|
+
body = JSON.parse(response.body)
|
42
|
+
expect(response.status).to eq 200
|
43
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#fetch' do
|
49
|
+
# Use VCR to record and replay the HTTP request
|
50
|
+
it 'fetchs all form' do
|
51
|
+
VCR.use_cassette('forms/fetch') do
|
52
|
+
response = forms.fetch(75_016_692_854_425_001)
|
53
|
+
body = JSON.parse(response.body)
|
54
|
+
expect(response.status).to eq 200
|
55
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#fetch_subscribers' do
|
61
|
+
# Use VCR to record and replay the HTTP request
|
62
|
+
it 'fetch_subscribers of a form' do
|
63
|
+
VCR.use_cassette('forms/fetch_subscribers') do
|
64
|
+
response = forms.fetch_subscribers(75_231_510_415_803_781)
|
65
|
+
body = JSON.parse(response.body)
|
66
|
+
expect(response.status).to eq 200
|
67
|
+
expect(body['data']).to be_an Array
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#delete' do
|
73
|
+
# Use VCR to record and replay the HTTP request
|
74
|
+
it 'deletes a form' do
|
75
|
+
VCR.use_cassette('forms/delete') do
|
76
|
+
response = forms.delete(75_016_692_854_425_001)
|
77
|
+
expect(response.status).to eq 204
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# Configure VCR to save and replay HTTP requests
|
9
|
+
VCR.configure do |config|
|
10
|
+
config.cassette_library_dir = './fixtures'
|
11
|
+
config.hook_into :webmock
|
12
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
13
|
+
interaction.request.headers['Authorization'][0]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Set up the test for the `Groups` class
|
18
|
+
RSpec.describe MailerLite::Groups do
|
19
|
+
let(:client) { MailerLite::Client.new }
|
20
|
+
let(:groups) { described_class.new(client: client) }
|
21
|
+
|
22
|
+
describe '#get' do
|
23
|
+
# Use VCR to record and replay the HTTP request
|
24
|
+
it 'returns a list of groups' do
|
25
|
+
VCR.use_cassette('groups/get') do
|
26
|
+
response = groups.get
|
27
|
+
body = JSON.parse(response.body)
|
28
|
+
expect(response.status).to eq 200
|
29
|
+
expect(body['data']).to be_an Array
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
describe '#create' do
|
34
|
+
# Use VCR to record and replay the HTTP request
|
35
|
+
it 'creates a group' do
|
36
|
+
VCR.use_cassette('groups/create') do
|
37
|
+
response = groups.create(name: 'test_group2')
|
38
|
+
body = JSON.parse(response.body)
|
39
|
+
expect(response.status).to eq 201
|
40
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
describe '#update' do
|
45
|
+
# Use VCR to record and replay the HTTP request
|
46
|
+
it 'updates a group' do
|
47
|
+
VCR.use_cassette('groups/update') do
|
48
|
+
response = groups.update(group_id: 75_138_589_423_306_653, name: 'test_group3')
|
49
|
+
body = JSON.parse(response.body)
|
50
|
+
expect(response.status).to eq 200
|
51
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#delete' do
|
57
|
+
# Use VCR to record and replay the HTTP request
|
58
|
+
it 'deletes a group' do
|
59
|
+
VCR.use_cassette('groups/delete') do
|
60
|
+
response = groups.delete(75_138_589_423_306_653)
|
61
|
+
expect(response.status).to eq 204
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#get_subscribers' do
|
67
|
+
# Use VCR to record and replay the HTTP request
|
68
|
+
it 'get_subscribers for a group' do
|
69
|
+
VCR.use_cassette('groups/get_subscribers') do
|
70
|
+
response = groups.get_subscribers(group_id: 75_011_449_370_445_335)
|
71
|
+
body = JSON.parse(response.body)
|
72
|
+
expect(response.status).to eq 200
|
73
|
+
expect(body['data']).to be_an Array
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#assign_subscribers' do
|
79
|
+
# Use VCR to record and replay the HTTP request
|
80
|
+
it 'assign_subscribers for a group' do
|
81
|
+
VCR.use_cassette('groups/assign_subscriber') do
|
82
|
+
response = groups.assign_subscriber(group_id: 75_138_557_045_376_452, subscriber: 75_009_808_379_414_225)
|
83
|
+
expect(response.status).to eq 200
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#unassign_subscribers' do
|
89
|
+
# Use VCR to record and replay the HTTP request
|
90
|
+
it 'unassign_subscribers for a group' do
|
91
|
+
VCR.use_cassette('groups/unassign_subscriber') do
|
92
|
+
response = groups.unassign_subscriber(group_id: 75_138_557_045_376_452, subscriber: 75_009_808_379_414_225)
|
93
|
+
expect(response.status).to eq 204
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# require "webmock/rspec"
|
9
|
+
# Import the `Segments` class
|
10
|
+
|
11
|
+
# Configure VCR to save and replay HTTP requests
|
12
|
+
VCR.configure do |config|
|
13
|
+
config.cassette_library_dir = './fixtures'
|
14
|
+
config.hook_into :webmock
|
15
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
16
|
+
interaction.request.headers['Authorization'][0]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set up the test for the `Segments` class
|
21
|
+
RSpec.describe MailerLite::Segments do
|
22
|
+
let(:client) { MailerLite::Client.new }
|
23
|
+
let(:segments) { described_class.new(client: client) }
|
24
|
+
|
25
|
+
describe '#list' do
|
26
|
+
# Use VCR to record and replay the HTTP request
|
27
|
+
it 'returns a list of Segments' do
|
28
|
+
VCR.use_cassette('segments/list') do
|
29
|
+
response = segments.list
|
30
|
+
body = JSON.parse(response.body)
|
31
|
+
expect(response.status).to eq 200
|
32
|
+
expect(body['data']).to be_an Array
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#update' do
|
38
|
+
# Use VCR to record and replay the HTTP request
|
39
|
+
it 'updates a segment' do
|
40
|
+
VCR.use_cassette('segments/update') do
|
41
|
+
response = segments.update(segment_id: 75_140_256_628_737_109, name: 'test_segment2')
|
42
|
+
body = JSON.parse(response.body)
|
43
|
+
expect(response.status).to eq 200
|
44
|
+
expect(Integer(body['data']['id'])).to be_an Integer
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#get_subscribers' do
|
50
|
+
# Use VCR to record and replay the HTTP request
|
51
|
+
it 'get_subscribers for a segment' do
|
52
|
+
VCR.use_cassette('segments/get_subscribers') do
|
53
|
+
response = segments.get_subscribers(segment_id: 75_140_256_628_737_109)
|
54
|
+
body = JSON.parse(response.body)
|
55
|
+
expect(response.status).to eq 200
|
56
|
+
expect(body['data']).to be_an Array
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#delete' do
|
62
|
+
# Use VCR to record and replay the HTTP request
|
63
|
+
it 'deletes a segment' do
|
64
|
+
VCR.use_cassette('segments/delete') do
|
65
|
+
response = segments.delete(75_140_256_628_737_109)
|
66
|
+
expect(response.status).to eq 204
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start
|
5
|
+
require 'mailerlite'
|
6
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
7
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
8
|
+
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
9
|
+
# this file to always be loaded, without a need to explicitly require it in any
|
10
|
+
# files.
|
11
|
+
#
|
12
|
+
# Given that it is always loaded, you are encouraged to keep this file as
|
13
|
+
# light-weight as possible. Requiring heavyweight dependencies from this file
|
14
|
+
# will add to the boot time of your test suite on EVERY test run, even for an
|
15
|
+
# individual file that may not need all of that loaded. Instead, consider making
|
16
|
+
# a separate helper file that requires the additional dependencies and performs
|
17
|
+
# the additional setup, and require it from the spec files that actually need
|
18
|
+
# it.
|
19
|
+
#
|
20
|
+
# See https://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
21
|
+
RSpec.configure do |config|
|
22
|
+
# rspec-expectations config goes here. You can use an alternate
|
23
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
24
|
+
# assertions if you prefer.
|
25
|
+
config.expect_with :rspec do |expectations|
|
26
|
+
# This option will default to `true` in RSpec 4. It makes the `description`
|
27
|
+
# and `failure_message` of custom matchers include text for helper methods
|
28
|
+
# defined using `chain`, e.g.:
|
29
|
+
# be_bigger_than(2).and_smaller_than(4).description
|
30
|
+
# # => "be bigger than 2 and smaller than 4"
|
31
|
+
# ...rather than:
|
32
|
+
# # => "be bigger than 2"
|
33
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
34
|
+
end
|
35
|
+
|
36
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
37
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
38
|
+
config.mock_with :rspec do |mocks|
|
39
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
40
|
+
# a real object. This is generally recommended, and will default to
|
41
|
+
# `true` in RSpec 4.
|
42
|
+
mocks.verify_partial_doubles = true
|
43
|
+
end
|
44
|
+
|
45
|
+
# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
|
46
|
+
# have no way to turn it off -- the option exists only for backwards
|
47
|
+
# compatibility in RSpec 3). It causes shared context metadata to be
|
48
|
+
# inherited by the metadata hash of host groups and examples, rather than
|
49
|
+
# triggering implicit auto-inclusion in groups with matching metadata.
|
50
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
51
|
+
|
52
|
+
# The settings below are suggested to provide a good initial experience
|
53
|
+
# with RSpec, but feel free to customize to your heart's content.
|
54
|
+
# # This allows you to limit a spec run to individual examples or groups
|
55
|
+
# # you care about by tagging them with `:focus` metadata. When nothing
|
56
|
+
# # is tagged with `:focus`, all examples get run. RSpec also provides
|
57
|
+
# # aliases for `it`, `describe`, and `context` that include `:focus`
|
58
|
+
# # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
59
|
+
# config.filter_run_when_matching :focus
|
60
|
+
#
|
61
|
+
# # Allows RSpec to persist some state between runs in order to support
|
62
|
+
# # the `--only-failures` and `--next-failure` CLI options. We recommend
|
63
|
+
# # you configure your source control system to ignore this file.
|
64
|
+
# config.example_status_persistence_file_path = "spec/examples.txt"
|
65
|
+
#
|
66
|
+
# # Limits the available syntax to the non-monkey patched syntax that is
|
67
|
+
# # recommended. For more details, see:
|
68
|
+
# # https://relishapp.com/rspec/rspec-core/docs/configuration/zero-monkey-patching-mode
|
69
|
+
# config.disable_monkey_patching!
|
70
|
+
#
|
71
|
+
# # This setting enables warnings. It's recommended, but in some cases may
|
72
|
+
# # be too noisy due to issues in dependencies.
|
73
|
+
# config.warnings = true
|
74
|
+
#
|
75
|
+
# # Many RSpec users commonly either run the entire suite or an individual
|
76
|
+
# # file, and it's useful to allow more verbose output when running an
|
77
|
+
# # individual spec file.
|
78
|
+
# if config.files_to_run.one?
|
79
|
+
# # Use the documentation formatter for detailed output,
|
80
|
+
# # unless a formatter has already been configured
|
81
|
+
# # (e.g. via a command-line flag).
|
82
|
+
# config.default_formatter = "doc"
|
83
|
+
# end
|
84
|
+
#
|
85
|
+
# # Print the 10 slowest examples and example groups at the
|
86
|
+
# # end of the spec run, to help surface which specs are running
|
87
|
+
# # particularly slow.
|
88
|
+
# config.profile_examples = 10
|
89
|
+
#
|
90
|
+
# # Run specs in random order to surface order dependencies. If you find an
|
91
|
+
# # order dependency and want to debug it, you can fix the order by providing
|
92
|
+
# # the seed, which is printed after each run.
|
93
|
+
# # --seed 1234
|
94
|
+
# config.order = :random
|
95
|
+
#
|
96
|
+
# # Seed global randomization in this process using the `--seed` CLI option.
|
97
|
+
# # Setting this allows you to use `--seed` to deterministically reproduce
|
98
|
+
# # test failures related to randomization by passing the same `--seed` value
|
99
|
+
# # as the one that triggered the failure.
|
100
|
+
# Kernel.srand config.seed
|
101
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# require "webmock/rspec"
|
9
|
+
# Import the `Subscribers` class
|
10
|
+
|
11
|
+
# Configure VCR to save and replay HTTP requests
|
12
|
+
VCR.configure do |config|
|
13
|
+
config.cassette_library_dir = './fixtures'
|
14
|
+
config.hook_into :webmock
|
15
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
16
|
+
interaction.request.headers['Authorization'][0]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set up the test for the `Subscribers` class
|
21
|
+
RSpec.describe MailerLite::Subscribers do
|
22
|
+
let(:client) { MailerLite::Client.new }
|
23
|
+
let(:subscribers) { described_class.new(client: client) }
|
24
|
+
|
25
|
+
describe '#fetch' do
|
26
|
+
# Use VCR to record and replay the HTTP request
|
27
|
+
it 'returns a list of subscribers' do
|
28
|
+
VCR.use_cassette('subscribers/fetch') do
|
29
|
+
response = subscribers.fetch(filter: { status: 'active' })
|
30
|
+
body = JSON.parse(response.body)
|
31
|
+
expect(response.status).to eq 200
|
32
|
+
expect(body['data']).to be_an Array
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#create' do
|
38
|
+
# Use VCR to record and replay the HTTP request
|
39
|
+
it 'creates a new subscriber' do
|
40
|
+
VCR.use_cassette('subscribers/create') do
|
41
|
+
response = subscribers.create(email: 'user@example.com')
|
42
|
+
body = JSON.parse(response.body)
|
43
|
+
expect(response.status).to eq 200
|
44
|
+
expect(Integer(body['data']['id'])).to be_a Integer
|
45
|
+
expect(body['data']['email']).to eq 'user@example.com'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#get' do
|
51
|
+
# Use VCR to record and replay the HTTP request
|
52
|
+
it 'gets a subscriber' do
|
53
|
+
VCR.use_cassette('subscribers/get') do
|
54
|
+
response = subscribers.get('second@email.com')
|
55
|
+
body = JSON.parse(response.body)
|
56
|
+
expect(response.status).to eq 200
|
57
|
+
expect(Integer(body['data']['id'])).to eq 75_009_808_379_414_225
|
58
|
+
expect(body['data']['email']).to be_a String
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#fetch_count' do
|
64
|
+
# Use VCR to record and replay the HTTP request
|
65
|
+
it 'fetches the subscriber count' do
|
66
|
+
VCR.use_cassette('subscribers/fetch_count') do
|
67
|
+
response = subscribers.fetch_count
|
68
|
+
body = JSON.parse(response.body)
|
69
|
+
expect(response.status).to eq 200
|
70
|
+
expect(body['total']).to be_a Integer
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#delete' do
|
76
|
+
# Use VCR to record and replay the HTTP request
|
77
|
+
it 'deletes a subscriber' do
|
78
|
+
VCR.use_cassette('subscribers/delete') do
|
79
|
+
response = subscribers.delete(73_871_649_530_709_291)
|
80
|
+
expect(response.status).to eq 204
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Import the RSpec and VCR gems
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'vcr'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
# require "webmock/rspec"
|
9
|
+
# Import the `Timezones` class
|
10
|
+
|
11
|
+
# Configure VCR to save and replay HTTP requests
|
12
|
+
VCR.configure do |config|
|
13
|
+
config.cassette_library_dir = './fixtures'
|
14
|
+
config.hook_into :webmock
|
15
|
+
config.filter_sensitive_data('<AUTH>') do |interaction|
|
16
|
+
interaction.request.headers['Authorization'][0]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set up the test for the `Timezones` class
|
21
|
+
RSpec.describe MailerLite::Timezones do
|
22
|
+
let(:client) { MailerLite::Client.new }
|
23
|
+
let(:timezones) { described_class.new(client: client) }
|
24
|
+
|
25
|
+
describe '#list' do
|
26
|
+
# Use VCR to record and replay the HTTP request
|
27
|
+
it 'lists all Timezones' do
|
28
|
+
VCR.use_cassette('timezones/list') do
|
29
|
+
response = timezones.list
|
30
|
+
body = JSON.parse(response.body)
|
31
|
+
expect(response.status).to eq 200
|
32
|
+
expect(body['data']).to be_an Array
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|