revere_mobile 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +98 -0
  3. data/bin/console +8 -0
  4. data/lib/revere_mobile/client/authentication.rb +28 -0
  5. data/lib/revere_mobile/client/campaign.rb +19 -0
  6. data/lib/revere_mobile/client/mobile_flow.rb +11 -0
  7. data/lib/revere_mobile/client/shortcode.rb +11 -0
  8. data/lib/revere_mobile/client.rb +29 -0
  9. data/lib/revere_mobile/configuration.rb +107 -0
  10. data/lib/revere_mobile/connection.rb +30 -0
  11. data/lib/revere_mobile/default.rb +45 -0
  12. data/lib/revere_mobile/error.rb +121 -0
  13. data/lib/revere_mobile/request.rb +39 -0
  14. data/lib/revere_mobile/response/raise_error.rb +18 -0
  15. data/lib/revere_mobile/response.rb +13 -0
  16. data/lib/revere_mobile/version.rb +5 -0
  17. data/lib/revere_mobile.rb +51 -0
  18. data/spec/revere_mobile/client/campaign_spec.rb +105 -0
  19. data/spec/revere_mobile/client/mobile_flow_spec.rb +51 -0
  20. data/spec/revere_mobile/client/shortcode_spec.rb +49 -0
  21. data/spec/revere_mobile/client_spec.rb +36 -0
  22. data/spec/revere_mobile/configuration_spec.rb +140 -0
  23. data/spec/revere_mobile/errors_spec.rb +84 -0
  24. data/spec/revere_mobile/request_spec.rb +125 -0
  25. data/spec/revere_mobile/revere_mobile_spec.rb +21 -0
  26. data/spec/revere_mobile/support/fixtures/campaigns/create_campaign.json +11 -0
  27. data/spec/revere_mobile/support/fixtures/campaigns/get_all_campaigns.json +49 -0
  28. data/spec/revere_mobile/support/fixtures/mobile_flows/get_all_mobile_flows.json +39 -0
  29. data/spec/revere_mobile/support/fixtures/shortcodes/get_all_shortcodes.json +34 -0
  30. data/spec/revere_mobile/support/path_helpers.rb +9 -0
  31. data/spec/revere_mobile/support/url_helpers.rb +5 -0
  32. data/spec/revere_mobile/support/webmock.rb +5 -0
  33. data/spec/spec_helper.rb +23 -0
  34. metadata +257 -0
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ class Client
7
+ RSpec.describe Campaign do
8
+ let(:client) { RevereMobile::Client.new }
9
+
10
+ describe '#campaigns' do
11
+ let(:params) { Hash.new }
12
+ let(:response) { fixture('campaigns/get_all_campaigns.json') }
13
+ let(:url) { build_url(client: client, path: 'campaign') }
14
+
15
+ before do
16
+ stub_request(:get, url)
17
+ .with(query: params)
18
+ .to_return(
19
+ body: response
20
+ )
21
+ end
22
+
23
+ it 'requests the correct resource' do
24
+ client.campaigns(params: params)
25
+ expect(
26
+ a_request(:get, url)
27
+ .with(query: params)
28
+ ).to have_been_made
29
+ end
30
+
31
+ it 'returns the campaigns' do
32
+ campaigns = client.campaigns(
33
+ params: params)
34
+ expect(campaigns['collection']).to be_a(Array)
35
+ end
36
+
37
+ it 'returns the campaigns with details' do
38
+ campaigns = client.campaigns(
39
+ params: params)
40
+ campaign = campaigns['collection'].first
41
+ expect(campaign['id']).not_to be_empty
42
+ expect(campaign['account']).not_to be_empty
43
+ end
44
+ end
45
+
46
+ describe '#create_campaign' do
47
+ let(:params) { Hash.new name: 'Test Campaign' }
48
+ let(:response) { fixture('campaigns/create_campaign.json') }
49
+ let(:url) { build_url(client: client, path: 'campaign') }
50
+
51
+ before do
52
+ stub_request(:post, url)
53
+ .with(body: params)
54
+ .to_return(
55
+ body: response
56
+ )
57
+ end
58
+
59
+ it 'requests the correct resource' do
60
+ client.create_campaign(params)
61
+ expect(
62
+ a_request(:post, url)
63
+ .with(body: params)
64
+ ).to have_been_made
65
+ end
66
+
67
+ it 'returns the created campaign' do
68
+ campaign = client.create_campaign(params)
69
+ expect(campaign['id']).not_to be_empty
70
+ expect(campaign['name']).to eq('Test Campaign')
71
+ expect(campaign['startDate']).not_to be_empty
72
+ expect(campaign['mobileFlows']).to be_a(Array)
73
+ end
74
+ end
75
+ describe '#update_campaign' do
76
+ let(:params) { { id: '5493568f0cb2fcad2e35ecb5', name: 'Test Campaign' } }
77
+ let(:url) { build_url(client: client, path: 'campaign/5493568f0cb2fcad2e35ecb5') }
78
+
79
+ before do
80
+ stub_request(:put, url)
81
+ .with(body: params)
82
+ .to_return(
83
+ status: 204
84
+ )
85
+ end
86
+
87
+ it 'requests the correct resource' do
88
+ client.update_campaign(params)
89
+ expect(
90
+ a_request(:put, url)
91
+ .with(body: params)
92
+ ).to have_been_made
93
+ end
94
+
95
+ it 'returns with with an empty string' do
96
+ # Revere Mobile comes back with No Content here
97
+ response = client.update_campaign(params)
98
+ expect(
99
+ response
100
+ ).to eq('')
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ class Client
7
+ RSpec.describe MobileFlow do
8
+ let(:client) { RevereMobile::Client.new }
9
+
10
+ describe "#mobileflows" do
11
+ let(:params) { Hash.new }
12
+ let(:response) { fixture('mobile_flows/get_all_mobile_flows.json') }
13
+ let(:url) { build_url(client: client, path: 'mobileflow') }
14
+
15
+ before do
16
+ stub_request(:get, url)
17
+ .with(query: params)
18
+ .to_return(
19
+ body: response
20
+ )
21
+ end
22
+
23
+ it 'requests the correct resource' do
24
+ client.mobileflows(params: params)
25
+ expect(
26
+ a_request(:get, url)
27
+ .with(query: params)
28
+ ).to have_been_made
29
+ end
30
+
31
+ it 'returns the mobileflows' do
32
+ mobileflows = client.mobileflows(
33
+ params: params)
34
+ expect(mobileflows['collection']).to be_a(Array)
35
+ end
36
+
37
+ it 'returns the mobileflows with details' do
38
+ mobileflows = client.mobileflows(
39
+ params: params)
40
+ mobileflow = mobileflows['collection'].first
41
+ expect(mobileflow['id']).not_to be_empty
42
+ expect(mobileflow['campaign']).not_to be_empty
43
+ expect(mobileflow['shortCode']).not_to be_empty
44
+ expect(mobileflow['name']).not_to be_empty
45
+ expect(mobileflow['lists']).not_to be_empty
46
+ expect(mobileflow['lists']).to be_a(Array)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ class Client
7
+ RSpec.describe Shortcode do
8
+ let(:client) { RevereMobile::Client.new }
9
+
10
+ describe "#shortcodes" do
11
+ let(:params) { Hash.new }
12
+ let(:response) { fixture('shortcodes/get_all_shortcodes.json') }
13
+ let(:url) { build_url(client: client, path: 'shortcode') }
14
+
15
+ before do
16
+ stub_request(:get, url)
17
+ .with(query: params)
18
+ .to_return(
19
+ body: response
20
+ )
21
+ end
22
+
23
+ it 'requests the correct resource' do
24
+ client.shortcodes(params: params)
25
+ expect(
26
+ a_request(:get, url)
27
+ .with(query: params)
28
+ ).to have_been_made
29
+ end
30
+
31
+ it 'returns the shortcodes' do
32
+ shortcodes = client.shortcodes(
33
+ params: params)
34
+ expect(shortcodes['collection']).to be_a(Array)
35
+ end
36
+
37
+ it 'returns the shortcodes with details' do
38
+ shortcodes = client.shortcodes(
39
+ params: params)
40
+ shortcode = shortcodes['collection'].first
41
+ expect(shortcode['id']).not_to be_empty
42
+ expect(shortcode['country']).not_to be_empty
43
+ expect(shortcode['status']).not_to be_empty
44
+ expect(shortcode['shortcode']).not_to be_empty
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ RSpec.describe Client do
7
+ describe 'initialization' do
8
+ describe 'with a specified configuration' do
9
+ let(:config) { RevereMobile::Configuration.new }
10
+
11
+ subject { RevereMobile::Client.new(config) }
12
+
13
+ it 'should accept and store as config' do
14
+ expect(subject.config).to eq(config)
15
+ end
16
+ end
17
+
18
+ describe 'without a specified configuration' do
19
+ it 'should get the default' do
20
+ expect(subject.config).to eq(RevereMobile.configuration)
21
+ end
22
+ end
23
+ end
24
+
25
+ describe 'useage' do
26
+ it 'should be possible to a config and use it with the client' do
27
+ configuration = RevereMobile::Configuration.new
28
+ configuration.user_agent = 'Test Agent'
29
+ configuration.username = 'Test Username'
30
+ client = RevereMobile::Client.new(configuration)
31
+ expect(client.config.user_agent).to eq('Test Agent')
32
+ expect(client.config.username).to eq('Test Username')
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ RSpec.describe Configuration do
7
+ before(:each) { RevereMobile.configuration.reset! }
8
+ after(:each) { RevereMobile.configuration.reset! }
9
+
10
+ describe '#api_endpoint' do
11
+ context 'when no api_endpoint is specified' do
12
+ it 'sets a default value' do
13
+ expect(RevereMobile.configuration.api_endpoint)
14
+ .to eq(RevereMobile::Default.api_endpoint)
15
+ end
16
+ end
17
+
18
+ context 'when a custom value is supplied' do
19
+ let(:url) { Faker::Internet.url }
20
+
21
+ before do
22
+ RevereMobile.configure do |config|
23
+ config.api_endpoint = url
24
+ end
25
+ end
26
+
27
+ it 'returns the custom value' do
28
+ expect(RevereMobile.configuration.api_endpoint).to eq(url)
29
+ end
30
+ end
31
+ end
32
+
33
+ describe '#username' do
34
+ context 'when no username is specified' do
35
+ it 'sets a default value' do
36
+ expect(RevereMobile.configuration.username)
37
+ .to eq(RevereMobile::Default.username)
38
+ end
39
+ end
40
+
41
+ context 'when a custom value is supplied' do
42
+ let(:username) { Faker::Internet.username }
43
+
44
+ before do
45
+ RevereMobile.configure do |config|
46
+ config.username = username
47
+ end
48
+ end
49
+
50
+ it 'returns the custom value' do
51
+ expect(RevereMobile.configuration.username).to eq(username)
52
+ end
53
+ end
54
+ end
55
+
56
+ describe '#user_agent' do
57
+ context 'when no user_agent is specified' do
58
+ it 'sets a default value' do
59
+ expect(RevereMobile.configuration.user_agent)
60
+ .to eq(RevereMobile::Default.user_agent)
61
+ end
62
+ end
63
+
64
+ context 'when a custom value is supplied' do
65
+ let(:user_agent) { Faker::Internet.user_agent }
66
+
67
+ before do
68
+ RevereMobile.configure do |config|
69
+ config.user_agent = user_agent
70
+ end
71
+ end
72
+
73
+ it 'returns the custom value' do
74
+ expect(RevereMobile.configuration.user_agent).to eq(user_agent)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '#shortcode_id' do
80
+ context 'when no shortcode_id is specified' do
81
+ it 'sets a default value' do
82
+ expect(RevereMobile.configuration.shortcode_id)
83
+ .to eq(RevereMobile::Default.shortcode_id)
84
+ end
85
+ end
86
+
87
+ context 'when a custom value is supplied' do
88
+ let(:shortcode_id) { Faker::Crypto.md5 }
89
+
90
+ before do
91
+ RevereMobile.configure do |config|
92
+ config.shortcode_id = shortcode_id
93
+ end
94
+ end
95
+
96
+ it 'returns the custom value' do
97
+ expect(RevereMobile.configuration.shortcode_id).to eq(shortcode_id)
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "#query_size" do
103
+ context 'when no query_size is specified' do
104
+ it 'sets a default value' do
105
+ expect(RevereMobile.configuration.query_size)
106
+ .to eq(RevereMobile::Default.query_size)
107
+ end
108
+ end
109
+
110
+ context 'when a custom value is supplied' do
111
+ let(:query_size) { Faker::Number.between(1, 10) }
112
+
113
+ before do
114
+ RevereMobile.configure do |config|
115
+ config.query_size = query_size
116
+ end
117
+ end
118
+
119
+ it 'returns the custom value' do
120
+ expect(RevereMobile.configuration.query_size).to eq(query_size)
121
+ end
122
+ end
123
+ end
124
+
125
+
126
+ describe '#inspect' do
127
+ it 'masks the password' do
128
+ password = Faker::Internet.password
129
+ RevereMobile.configuration.password = password
130
+ expect(RevereMobile.configuration.inspect).to_not include(password)
131
+ end
132
+
133
+ it 'masks the api_key' do
134
+ api_key = Faker::Internet.password
135
+ RevereMobile.configuration.api_key = api_key
136
+ expect(RevereMobile.configuration.inspect).to_not include(api_key)
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ RSpec.describe RevereMobile::Error do
7
+ let(:client) { RevereMobile::Client.new }
8
+
9
+ context 'when a resource is not found' do
10
+ let(:url) { build_url(client: client, path: '/nowhere') }
11
+
12
+ before do
13
+ stub_request(:get, url)
14
+ .to_return(status: 404)
15
+ end
16
+
17
+ it 'rasies the RevereMobile::NotFound' do
18
+ expect {
19
+ client.get(path: '/nowhere')
20
+ }.to raise_error(RevereMobile::NotFound)
21
+ end
22
+ end
23
+
24
+ context 'when a bad request is made' do
25
+ let(:url) { build_url(client: client, path: '/badrequest') }
26
+
27
+ before do
28
+ stub_request(:get, url)
29
+ .to_return(status: 400)
30
+ end
31
+
32
+ it 'rasies the RevereMobile::BadRequest' do
33
+ expect {
34
+ client.get(path: '/badrequest')
35
+ }.to raise_error(RevereMobile::BadRequest)
36
+ end
37
+ end
38
+
39
+ context 'when an unkown bad request is made' do
40
+ let(:url) { build_url(client: client, path: '/badrequest') }
41
+
42
+ before do
43
+ stub_request(:get, url)
44
+ .to_return(status: 455)
45
+ end
46
+
47
+ it 'rasies the RevereMobile::ClientError' do
48
+ expect {
49
+ client.get(path: '/badrequest')
50
+ }.to raise_error(RevereMobile::ClientError)
51
+ end
52
+ end
53
+
54
+ context 'when a server error ocurs' do
55
+ let(:url) { build_url(client: client, path: '/serverError') }
56
+
57
+ before do
58
+ stub_request(:get, url)
59
+ .to_return(status: 500)
60
+ end
61
+
62
+ it 'rasies the RevereMobile::InternalServerError' do
63
+ expect {
64
+ client.get(path: '/serverError')
65
+ }.to raise_error(RevereMobile::InternalServerError)
66
+ end
67
+ end
68
+
69
+ context 'when an unknown server error ocurs' do
70
+ let(:url) { build_url(client: client, path: '/serverError') }
71
+
72
+ before do
73
+ stub_request(:get, url)
74
+ .to_return(status: 555)
75
+ end
76
+
77
+ it 'rasies the RevereMobile::ServerError' do
78
+ expect {
79
+ client.get(path: '/serverError')
80
+ }.to raise_error(RevereMobile::ServerError)
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module RevereMobile
6
+ RSpec.describe Request do
7
+ let(:client) { RevereMobile::Client.new }
8
+ let(:params) { { id: 1 } }
9
+
10
+ describe '#get' do
11
+ let(:url) { build_url(client: client, path: '/mobile/resource') }
12
+
13
+ context 'when making a request' do
14
+ before do
15
+ stub_request(:get, url)
16
+ end
17
+
18
+ it 'makes a get request' do
19
+ RevereMobile.get(path:'/mobile/resource')
20
+ expect(a_request(:get, url)).to have_been_made
21
+ end
22
+ end
23
+
24
+ context 'when passing parameters to the request' do
25
+ before do
26
+ stub_request(:get, url).with(query: params)
27
+ end
28
+
29
+ it 'passes params with the request' do
30
+ RevereMobile.get(path: '/mobile/resource', params: params)
31
+ expect(a_request(:get, url).with(query: params)).to have_been_made
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#post' do
37
+ let(:url) { build_url(client: client, path: '/some/resource') }
38
+ let(:body) do
39
+ {
40
+ username: 'Test Username',
41
+ password: 'Test Password',
42
+ }
43
+ end
44
+
45
+ context 'when making a request' do
46
+ before do
47
+ stub_request(:post, url)
48
+ end
49
+
50
+ it 'makes a post request' do
51
+ RevereMobile.post(path: '/some/resource')
52
+ expect(a_request(:post, url)).to have_been_made
53
+ end
54
+ end
55
+
56
+ context 'when passing a body to the request' do
57
+ before do
58
+ stub_request(:post, url).with(body: JSON.generate(body))
59
+ end
60
+
61
+ it 'makes a post request with a body' do
62
+ RevereMobile.post(path: '/some/resource', body: body)
63
+ expect(a_request(:post, url).with(body: body)).to have_been_made
64
+ end
65
+ end
66
+ end
67
+
68
+ describe '#put' do
69
+ let(:url) { build_url(client: client, path: '/some/resource') }
70
+ let(:body) do
71
+ {
72
+ name: 'Test List'
73
+ }
74
+ end
75
+
76
+ context 'when making a put request' do
77
+ before do
78
+ stub_request(:put, url)
79
+ end
80
+
81
+ it 'makes a put request' do
82
+ RevereMobile.put(path: '/some/resource')
83
+ expect(a_request(:put, url)).to have_been_made
84
+ end
85
+ end
86
+
87
+ context 'when making a put request with a body' do
88
+ before do
89
+ stub_request(:put, url).with(body: JSON.generate(body))
90
+ end
91
+
92
+ it 'makes a put request with the body' do
93
+ RevereMobile.put(path: '/some/resource', body: body)
94
+ expect(a_request(:put, url).with(body: body)).to have_been_made
95
+ end
96
+ end
97
+ end
98
+
99
+ context '#delete' do
100
+ let(:url) { build_url(client: client, path: '/mobile/resource') }
101
+
102
+ context 'when making a request' do
103
+ before do
104
+ stub_request(:delete, url)
105
+ end
106
+
107
+ it 'makes a get request' do
108
+ RevereMobile.delete(path:'/mobile/resource')
109
+ expect(a_request(:delete, url)).to have_been_made
110
+ end
111
+ end
112
+
113
+ context 'when passing parameters to the request' do
114
+ before do
115
+ stub_request(:delete, url).with(query: params)
116
+ end
117
+
118
+ it 'passes params with the request' do
119
+ RevereMobile.delete(path: '/mobile/resource', params: params)
120
+ expect(a_request(:delete, url).with(query: params)).to have_been_made
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RevereMobile" do
4
+ it 'has a version number equal to 0.1.0' do
5
+ expect(RevereMobile::VERSION).to_not be nil
6
+ expect(RevereMobile::VERSION).to eq('0.1.0')
7
+ end
8
+
9
+ describe ".client" do
10
+ it 'creates a new RevereMobile client' do
11
+ expect(RevereMobile.client).to be_instance_of(RevereMobile::Client)
12
+ end
13
+
14
+ context 'when @client has been already assigned' do
15
+ it 'returns the @client' do
16
+ client = RevereMobile.client
17
+ expect(RevereMobile.client).to eq(client)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ {
2
+ "account": "546239d10cf25fdcf0aea9b2",
3
+ "endDate": null,
4
+ "group": "54623a230cf25fdcf0zeaa5c",
5
+ "id": "5493568f0cb2fcad2e35ecb5",
6
+ "mobileFlows": [],
7
+ "name": "Test Campaign",
8
+ "shortCode": "515b0768cw10e4ec580fcc60",
9
+ "startDate": "Fri Jan 01 10:00:00 PDT 2018",
10
+ "status": "ACTIVE"
11
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "page": 1,
3
+ "size": -1,
4
+ "total": 3,
5
+ "collection": [
6
+ {
7
+ "id": "570e19afe4b0fddd97d6754f",
8
+ "account": "416fa6177a475eefd68fb5ef",
9
+ "group": "4e6fa6187a475eefd68fb5f4",
10
+ "shortCode": "4e8b4b5afda5efeeec370e8a",
11
+ "name": "Test Campaign",
12
+ "startDate": "Wed Apr 13 11:02:23 PDT 2016",
13
+ "endDate": "Wed Apr 13 11:02:23 PDT 2017",
14
+ "status": "ACTIVE",
15
+ "mobileFlows": []
16
+ },
17
+ {
18
+ "id": "56ccdc90e4b087593e734bca",
19
+ "account": "4e6fa6177a475eefd68fb5ef",
20
+ "group": "56ccdbb9e4b087593e734b23",
21
+ "shortCode": "4e8b4b5afdn5efeeec370e8a",
22
+ "name": "Another Test Campaign",
23
+ "startDate": "Tue Feb 23 14:26:24 PST 2016",
24
+ "endDate": null,
25
+ "status": "ACTIVE",
26
+ "mobileFlows": [
27
+ "56ccdccfe4b0875932734bde",
28
+ "56e0ae7fe4b052c006b6374e",
29
+ "56e99881e4b024f1336a19d8",
30
+ "583c54cee4b0e8e03b886a2b"
31
+ ]
32
+ },
33
+ {
34
+ "id": "502520fd0cf236b8a154bf8b",
35
+ "account": "4e6fa61772475eefd68fb5ef",
36
+ "group": "50251a010cfr36b8a1545e98",
37
+ "shortCode": "4e8b1b5afda5efeeec370e8a",
38
+ "name": "Test Vote",
39
+ "startDate": "Fri Aug 10 07:55:57 PDT 2012",
40
+ "endDate": null,
41
+ "status": "ACTIVE",
42
+ "mobileFlows": [
43
+ "502525030cf236b8a154bfc2",
44
+ "509430b101f280bc6a98bff8",
45
+ "58c1accde4b0369e60c920fb"
46
+ ]
47
+ }
48
+ ]
49
+ }