action_kit_rest 0.4.3 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +24 -0
- data/.rubocop.yml +26 -0
- data/.ruby-version +1 -1
- data/Gemfile +11 -9
- data/README.md +2 -2
- data/Rakefile +15 -18
- data/action_kit_rest.gemspec +28 -34
- data/lib/action_kit_rest/action.rb +3 -1
- data/lib/action_kit_rest/actions/event_create_action.rb +5 -3
- data/lib/action_kit_rest/actions/event_signup_action.rb +6 -3
- data/lib/action_kit_rest/actions/unsubscribe_action.rb +3 -1
- data/lib/action_kit_rest/allowed_user_field.rb +3 -1
- data/lib/action_kit_rest/api.rb +9 -7
- data/lib/action_kit_rest/base.rb +5 -4
- data/lib/action_kit_rest/client.rb +5 -3
- data/lib/action_kit_rest/event.rb +3 -1
- data/lib/action_kit_rest/event_signup.rb +3 -1
- data/lib/action_kit_rest/language.rb +3 -1
- data/lib/action_kit_rest/list.rb +3 -1
- data/lib/action_kit_rest/page.rb +4 -2
- data/lib/action_kit_rest/pages/base.rb +4 -5
- data/lib/action_kit_rest/pages/donation_page.rb +3 -1
- data/lib/action_kit_rest/pages/event_campaign_page.rb +4 -2
- data/lib/action_kit_rest/pages/import_page.rb +3 -1
- data/lib/action_kit_rest/pages/signup_page.rb +3 -1
- data/lib/action_kit_rest/pages/unsubscribe_page.rb +3 -1
- data/lib/action_kit_rest/phone.rb +2 -0
- data/lib/action_kit_rest/railties.rb +3 -1
- data/lib/action_kit_rest/response/collection.rb +4 -4
- data/lib/action_kit_rest/response/raise_error.rb +15 -12
- data/lib/action_kit_rest/response/validation_error.rb +20 -9
- data/lib/action_kit_rest/response/wrapper.rb +10 -10
- data/lib/action_kit_rest/tag.rb +6 -6
- data/lib/action_kit_rest/user.rb +3 -1
- data/lib/action_kit_rest/version.rb +3 -1
- data/lib/action_kit_rest.rb +2 -0
- data/spec/lib/action_kit_rest/actions/event_create_action_spec.rb +6 -4
- data/spec/lib/action_kit_rest/actions/event_signup_action_spec.rb +6 -4
- data/spec/lib/action_kit_rest/allowed_user_field_spec.rb +9 -7
- data/spec/lib/action_kit_rest/api_spec.rb +95 -0
- data/spec/lib/action_kit_rest/logger_spec.rb +7 -5
- data/spec/lib/action_kit_rest/page_spec.rb +28 -28
- data/spec/lib/action_kit_rest/pages/event_campaign_page_spec.rb +25 -20
- data/spec/lib/action_kit_rest/pages/import_page_spec.rb +21 -17
- data/spec/lib/action_kit_rest/response/collection_spec.rb +13 -11
- data/spec/lib/action_kit_rest/response/validation_error_spec.rb +16 -4
- data/spec/lib/action_kit_rest/response/wrapper_spec.rb +6 -4
- data/spec/lib/action_kit_rest/user_spec.rb +11 -9
- data/spec/spec_helper.rb +6 -4
- data/spec/support/shared_contexts/stub_logger.rb +4 -2
- metadata +61 -57
- data/.travis.yml +0 -3
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# A class responsible for proxing to faraday response &
|
2
4
|
# or a pagination collection.
|
3
5
|
module ActionKitRest
|
@@ -5,9 +7,7 @@ module ActionKitRest
|
|
5
7
|
class Collection
|
6
8
|
include Enumerable
|
7
9
|
|
8
|
-
attr_reader :meta
|
9
|
-
attr_reader :objects
|
10
|
-
|
10
|
+
attr_reader :meta, :objects
|
11
11
|
|
12
12
|
def initialize(meta, objects)
|
13
13
|
@meta = meta
|
@@ -15,7 +15,7 @@ module ActionKitRest
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def each(&block)
|
18
|
-
#
|
18
|
+
# TODO: handle pagination somehow!
|
19
19
|
objects.each do |o|
|
20
20
|
block.call(o)
|
21
21
|
end
|
@@ -1,43 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionKitRest
|
2
4
|
module Response
|
3
5
|
class RaiseError < Faraday::Response::Middleware
|
4
|
-
|
5
6
|
def on_complete(response)
|
6
7
|
status_code = response[:status].to_i
|
7
8
|
if (400...600).include? status_code
|
8
9
|
if status_code == 400
|
9
10
|
response_body = response[:body]
|
10
|
-
if JSON.parse(response_body)['errors']
|
11
|
+
if ActionKitRest::Response::InvalidAkidError.matches?(JSON.parse(response_body)['errors'])
|
11
12
|
raise ActionKitRest::Response::InvalidAkidError.new(url: response[:url].to_s, body: response_body)
|
12
13
|
else
|
13
14
|
raise ActionKitRest::Response::ValidationError.new(url: response[:url].to_s, body: response_body)
|
14
15
|
end
|
15
16
|
elsif status_code == 404
|
16
|
-
raise ActionKitRest::Response::NotFound
|
17
|
+
raise ActionKitRest::Response::NotFound, response[:url].to_s
|
17
18
|
elsif status_code == 401
|
18
|
-
raise ActionKitRest::Response::Unauthorized
|
19
|
-
elsif status_code == 500 && response[:body] =~
|
19
|
+
raise ActionKitRest::Response::Unauthorized, response[:url].to_s
|
20
|
+
elsif status_code == 500 && response[:body] =~ /"error"/
|
20
21
|
error_hsh = JSON.parse(response[:body])
|
21
22
|
error_message = error_hsh['error']
|
22
23
|
|
23
24
|
if error_message == 'Sorry, this request could not be processed. Please try again later.'
|
24
|
-
raise ActionKitRest::Response::TryAgainLater
|
25
|
+
raise ActionKitRest::Response::TryAgainLater, error_message(response)
|
25
26
|
else
|
26
|
-
raise StandardError
|
27
|
+
raise StandardError, error_message(response)
|
27
28
|
end
|
28
29
|
else
|
29
|
-
raise StandardError
|
30
|
+
raise StandardError, error_message(response)
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
34
35
|
def error_message(response)
|
35
|
-
"#{response[:method].to_s.upcase} #{response[:url]
|
36
|
+
"#{response[:method].to_s.upcase} #{response[:url]}: #{response[:status]} \n\n #{response[:body]}"
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
|
-
class TryAgainLater < StandardError
|
40
|
-
|
41
|
-
class
|
40
|
+
class TryAgainLater < StandardError; end
|
41
|
+
|
42
|
+
class NotFound < StandardError; end
|
43
|
+
|
44
|
+
class Unauthorized < StandardError; end
|
42
45
|
end
|
43
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionKitRest
|
2
4
|
module Response
|
3
5
|
class ValidationError < StandardError
|
@@ -5,24 +7,33 @@ module ActionKitRest
|
|
5
7
|
|
6
8
|
def initialize(params)
|
7
9
|
self.url = params[:url]
|
8
|
-
self.body = params[:body]
|
10
|
+
self.body = params[:body].dup
|
9
11
|
self.errors = JSON.parse(params[:body])['errors']
|
10
12
|
super()
|
11
13
|
end
|
12
14
|
|
13
15
|
def to_s
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
super
|
21
|
-
end
|
16
|
+
"#{super()} \n url: #{url} \n body: #{body.force_encoding('UTF-8')} \n errors: #{errors}"
|
17
|
+
rescue Encoding::CompatibilityError
|
18
|
+
# Something went gravely wrong trying to construct the error message, so give up on the extra info
|
19
|
+
# and just raise the name of the exception.
|
20
|
+
# This will let us at least raise with a backtrace.
|
21
|
+
super
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
class InvalidAkidError < ValidationError
|
26
|
+
MATCHING_ERRORS = ['Unable to associate this mailing ID with account.',
|
27
|
+
'לא הצלחנו לקשר בין מספר הזיהוי של רשימת הדיוור הזו לבין החשבון.'].freeze
|
28
|
+
|
29
|
+
def self.matches?(errors)
|
30
|
+
return false unless errors.keys == ['mailing_id']
|
31
|
+
|
32
|
+
mailing_id_errors = errors['mailing_id']
|
33
|
+
return false unless mailing_id_errors.size == 1
|
34
|
+
|
35
|
+
MATCHING_ERRORS.include?(mailing_id_errors.first)
|
36
|
+
end
|
26
37
|
end
|
27
38
|
end
|
28
39
|
end
|
@@ -1,17 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionKitRest
|
2
4
|
module Response
|
3
5
|
class Wrapper
|
4
6
|
include Enumerable
|
5
7
|
extend Forwardable
|
6
8
|
|
7
|
-
attr_reader :response
|
8
|
-
attr_reader :kind
|
9
|
-
attr_reader :obj
|
9
|
+
attr_reader :response, :kind, :obj
|
10
10
|
|
11
11
|
def_delegators :body, :empty?, :size, :include?, :length, :to_a, :first, :flatten, :include?, :keys, :[]
|
12
12
|
|
13
13
|
def initialize(response)
|
14
|
-
@response
|
14
|
+
@response = response
|
15
15
|
|
16
16
|
if response.body.respond_to?(:meta) && response.body.meta
|
17
17
|
@kind = :collection
|
@@ -42,7 +42,7 @@ module ActionKitRest
|
|
42
42
|
|
43
43
|
# Response raw body
|
44
44
|
def body
|
45
|
-
@body
|
45
|
+
@body || response.body
|
46
46
|
end
|
47
47
|
|
48
48
|
# Response status
|
@@ -70,10 +70,10 @@ module ActionKitRest
|
|
70
70
|
# Convert any key to string before calling.
|
71
71
|
#
|
72
72
|
def [](key)
|
73
|
-
if
|
74
|
-
|
73
|
+
if body.is_a?(Array)
|
74
|
+
body[key]
|
75
75
|
else
|
76
|
-
|
76
|
+
body.send(:"#{key}")
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -112,9 +112,9 @@ module ActionKitRest
|
|
112
112
|
block.call(o)
|
113
113
|
end
|
114
114
|
else
|
115
|
-
raise(
|
115
|
+
raise('can only iterate over collections')
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
120
|
-
end
|
120
|
+
end
|
data/lib/action_kit_rest/tag.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionKitRest
|
2
4
|
class Tag < Base
|
3
5
|
def base_path
|
4
6
|
'tag'
|
5
7
|
end
|
6
|
-
|
8
|
+
|
7
9
|
def find(name)
|
8
10
|
response = list(name: name)
|
9
11
|
response.obj.first
|
10
12
|
end
|
11
|
-
|
13
|
+
|
12
14
|
def find_or_create(name)
|
13
15
|
tag = find(name)
|
14
|
-
if tag.blank?
|
15
|
-
tag = create(name: name)
|
16
|
-
end
|
16
|
+
tag = create(name: name) if tag.blank?
|
17
17
|
tag
|
18
18
|
end
|
19
19
|
end
|
20
|
-
end
|
20
|
+
end
|
data/lib/action_kit_rest/user.rb
CHANGED
data/lib/action_kit_rest.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe ActionKitRest::Actions::EventCreateAction do
|
4
6
|
describe '#get' do
|
5
|
-
let(:actionkit) { ActionKitRest.new(host: 'test.com')
|
7
|
+
let(:actionkit) { ActionKitRest.new(host: 'test.com') }
|
6
8
|
|
7
9
|
before :each do
|
8
|
-
stub_request(:get,
|
9
|
-
.to_return(body: fixture('action/event_create_action.json'), status: '200', headers: {content_type:
|
10
|
+
stub_request(:get, 'https://test.com/rest/v1/eventcreateaction/123/')
|
11
|
+
.to_return(body: fixture('action/event_create_action.json'), status: '200', headers: { content_type: 'application/json; charset=utf-8' })
|
10
12
|
end
|
11
13
|
|
12
14
|
it 'should retrieve eventcreateaction and aggregate parsed event and user IDs' do
|
13
15
|
ak_event_create_action = actionkit.event_create_action.get('123')
|
14
16
|
|
15
|
-
expect(ak_event_create_action.id).to eq(
|
17
|
+
expect(ak_event_create_action.id).to eq(12_345)
|
16
18
|
expect(ak_event_create_action.event_id).to eq('999')
|
17
19
|
expect(ak_event_create_action.user_id).to eq('112233')
|
18
20
|
end
|
@@ -1,18 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe ActionKitRest::Actions::EventSignupAction do
|
4
6
|
describe '#get' do
|
5
|
-
let(:actionkit) { ActionKitRest.new(host: 'test.com')
|
7
|
+
let(:actionkit) { ActionKitRest.new(host: 'test.com') }
|
6
8
|
|
7
9
|
before :each do
|
8
|
-
stub_request(:get,
|
9
|
-
.to_return(body: fixture('action/event_signup_action.json'), status: '200', headers: {content_type:
|
10
|
+
stub_request(:get, 'https://test.com/rest/v1/eventsignupaction/54321/')
|
11
|
+
.to_return(body: fixture('action/event_signup_action.json'), status: '200', headers: { content_type: 'application/json; charset=utf-8' })
|
10
12
|
end
|
11
13
|
|
12
14
|
it 'should retrieve eventsignupaction and aggregate parsed event sign-up and user IDs' do
|
13
15
|
ak_event_signup_action = actionkit.event_signup_action.get('54321')
|
14
16
|
|
15
|
-
expect(ak_event_signup_action.id).to eq(
|
17
|
+
expect(ak_event_signup_action.id).to eq(54_321)
|
16
18
|
expect(ak_event_signup_action.event_signup_id).to eq('888')
|
17
19
|
expect(ak_event_signup_action.user_id).to eq('111')
|
18
20
|
end
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe ActionKitRest::AllowedUserField do
|
4
6
|
let(:status) { 200 }
|
5
|
-
let(:standard_headers) { {content_type:
|
7
|
+
let(:standard_headers) { { content_type: 'application/json; charset=utf-8' } }
|
6
8
|
|
7
9
|
subject { ActionKitRest.new(host: 'test.com', username: 'alice', password: 'somesecret') }
|
8
10
|
|
@@ -19,7 +21,7 @@ describe ActionKitRest::AllowedUserField do
|
|
19
21
|
let(:response_body) { fixture('allowed_user_field/list.json') }
|
20
22
|
|
21
23
|
before :each do
|
22
|
-
stub_get(request_path).with(basic_auth: [
|
24
|
+
stub_get(request_path).with(basic_auth: %w[alice somesecret])
|
23
25
|
.to_return(body: response_body,
|
24
26
|
status: status,
|
25
27
|
headers: standard_headers)
|
@@ -38,7 +40,7 @@ describe ActionKitRest::AllowedUserField do
|
|
38
40
|
let(:response_body) { fixture('allowed_user_field/list_filtered.json') }
|
39
41
|
|
40
42
|
before :each do
|
41
|
-
stub_get(request_path).with(basic_auth: [
|
43
|
+
stub_get(request_path).with(basic_auth: %w[alice somesecret])
|
42
44
|
.to_return(body: response_body,
|
43
45
|
status: status,
|
44
46
|
headers: standard_headers)
|
@@ -52,26 +54,26 @@ describe ActionKitRest::AllowedUserField do
|
|
52
54
|
|
53
55
|
describe '#create' do
|
54
56
|
let(:create_request_path) { 'alloweduserfield/' }
|
55
|
-
let(:create_request_body) { {name: 'foo'}.to_json }
|
57
|
+
let(:create_request_body) { { name: 'foo' }.to_json }
|
56
58
|
let(:create_status) { 201 }
|
57
59
|
let(:created_url) { 'https://test.com/rest/v1/alloweduserfield/foo/' }
|
58
60
|
let(:get_request_path) { 'alloweduserfield/foo/' }
|
59
61
|
let(:get_response_body) { fixture('allowed_user_field/get.json') }
|
60
62
|
|
61
63
|
before :each do
|
62
|
-
stub_post(create_request_path).with(basic_auth: [
|
64
|
+
stub_post(create_request_path).with(basic_auth: %w[alice somesecret],
|
63
65
|
body: create_request_body)
|
64
66
|
.to_return(status: create_status,
|
65
67
|
headers: standard_headers.merge(Location: created_url))
|
66
68
|
|
67
|
-
stub_get(get_request_path).with(basic_auth: [
|
69
|
+
stub_get(get_request_path).with(basic_auth: %w[alice somesecret])
|
68
70
|
.to_return(body: get_response_body,
|
69
71
|
status: status,
|
70
72
|
headers: standard_headers)
|
71
73
|
end
|
72
74
|
|
73
75
|
it 'should POST to the endpoint, then do a GET on the created object' do
|
74
|
-
field = subject.allowed_user_field.create({name: 'foo'})
|
76
|
+
field = subject.allowed_user_field.create({ name: 'foo' })
|
75
77
|
expect(field.display_name).to eq 'Foo'
|
76
78
|
end
|
77
79
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'support/shared_contexts/stub_logger'
|
5
|
+
|
6
|
+
describe ActionKitRest::API do
|
7
|
+
include_context 'stub_logger'
|
8
|
+
|
9
|
+
subject { ActionKitRest::API.new(host: 'example.com', username: 'foo', password: 'bar') }
|
10
|
+
|
11
|
+
describe 'error detection' do
|
12
|
+
let(:request_body) { {some: 'data'} }
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
stub_request(:post, 'https://example.com/rest/v1/something/')
|
16
|
+
.to_return(status: response_status, body: response_body,
|
17
|
+
headers: { content_type: 'application/json; charset=utf-8' })
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'successful response' do
|
21
|
+
let(:response_status) { 200 }
|
22
|
+
let(:response_body) { '{"message": "good job!"}' }
|
23
|
+
|
24
|
+
it 'should not raise' do
|
25
|
+
subject.post_request('something/', request_body)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context '400 response' do
|
30
|
+
let(:response_status) { 400 }
|
31
|
+
|
32
|
+
context 'unable to associate mailing ID' do
|
33
|
+
let(:response_body) { '{"errors": {"mailing_id": ["Unable to associate this mailing ID with account."]}}' }
|
34
|
+
|
35
|
+
it 'should raise an InvalidAkidError' do
|
36
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(ActionKitRest::Response::InvalidAkidError)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'unable to associate mailing ID error in Hebrew' do
|
41
|
+
let(:response_body) { '{"errors": {"mailing_id": ["לא הצלחנו לקשר בין מספר הזיהוי של רשימת הדיוור הזו לבין החשבון."]}}' }
|
42
|
+
|
43
|
+
it 'should raise an InvalidAkidError' do
|
44
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(ActionKitRest::Response::InvalidAkidError)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'other error' do
|
49
|
+
let(:response_body) { '{"errors": {"zip": ["There is something wrong with your ZIP code!"]}}' }
|
50
|
+
|
51
|
+
it 'sould raise a ValidationError' do
|
52
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(ActionKitRest::Response::ValidationError)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context '401 response' do
|
58
|
+
let(:response_status) { 401 }
|
59
|
+
let(:response_body) { '{"error": "Your API key is no good"}' }
|
60
|
+
|
61
|
+
it 'should raise an Unauthorized exception' do
|
62
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(ActionKitRest::Response::Unauthorized)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context '404 response' do
|
67
|
+
let(:response_status) { 404 }
|
68
|
+
let(:response_body) { '{"error": "not found"}' }
|
69
|
+
|
70
|
+
it 'should raise a NotFound exception' do
|
71
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(ActionKitRest::Response::NotFound)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context '500 response' do
|
76
|
+
let(:response_status) { 500 }
|
77
|
+
|
78
|
+
context 'Try Again Later message' do
|
79
|
+
let(:response_body) { '{"error": "Sorry, this request could not be processed. Please try again later."}' }
|
80
|
+
|
81
|
+
it 'should raise a TryAgainLater exception' do
|
82
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(ActionKitRest::Response::TryAgainLater)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'other error message' do
|
87
|
+
let(:response_body) { '{"error": "Something is wrong, we will fix it!"}' }
|
88
|
+
|
89
|
+
it 'should raise a StandardError' do
|
90
|
+
expect{ subject.post_request('something/', request_body) }.to raise_error(StandardError)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -1,20 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe ActionKitRest do
|
4
6
|
describe 'logging' do
|
5
|
-
it
|
7
|
+
it 'should have a logger' do
|
6
8
|
ActionKitRest.respond_to?(:logger).should be_truthy
|
7
9
|
end
|
8
10
|
|
9
|
-
it
|
11
|
+
it 'should be able to log debug methods' do
|
10
12
|
ActionKitRest.logger.respond_to?(:debug).should be_truthy
|
11
13
|
end
|
12
14
|
|
13
|
-
it
|
15
|
+
it 'should be settable' do
|
14
16
|
ActionKitRest.respond_to?(:logger=).should be_truthy
|
15
|
-
log = double
|
17
|
+
log = double
|
16
18
|
ActionKitRest.logger = log
|
17
19
|
ActionKitRest.logger.should == log
|
18
20
|
end
|
19
21
|
end
|
20
|
-
end
|
22
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe ActionKitRest::Page do
|
@@ -16,7 +18,7 @@ describe ActionKitRest::Page do
|
|
16
18
|
subject.connection.configuration.host.should == 'test.com'
|
17
19
|
end
|
18
20
|
|
19
|
-
it
|
21
|
+
it 'should have a client' do
|
20
22
|
subject.page.client.should_not be_nil
|
21
23
|
end
|
22
24
|
|
@@ -29,82 +31,80 @@ describe ActionKitRest::Page do
|
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
32
|
-
|
33
|
-
describe "retrieval" do
|
34
|
+
describe 'retrieval' do
|
34
35
|
before(:each) do
|
35
|
-
stub_get(request_path).to_return(:
|
36
|
-
:
|
36
|
+
stub_get(request_path).to_return(body: body, status: status,
|
37
|
+
headers: { content_type: 'application/json; charset=utf-8' })
|
37
38
|
end
|
38
39
|
|
39
|
-
describe
|
40
|
+
describe '.list' do
|
40
41
|
let(:status) { 200 }
|
41
42
|
let(:body) { fixture('page/collection.json') }
|
42
43
|
let(:request_path) { 'page/' }
|
43
44
|
|
44
|
-
it
|
45
|
+
it 'should allow listing the objects' do
|
45
46
|
pages = subject.page.list
|
46
47
|
|
47
48
|
pages.should be_an_instance_of(ActionKitRest::Response::Wrapper)
|
48
49
|
|
49
|
-
pages.each do |
|
50
|
+
pages.each do |obj|
|
50
51
|
obj.should be_an_instance_of(Hashie::Mash)
|
51
52
|
obj.should respond_to(:goal)
|
52
53
|
end
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
56
|
-
describe
|
57
|
-
|
57
|
+
describe '.page' do
|
58
58
|
let(:body) { fixture('page/object.json') }
|
59
59
|
let(:request_path) { 'page/1/' }
|
60
60
|
|
61
|
-
describe
|
61
|
+
describe 'success' do
|
62
62
|
let(:status) { 200 }
|
63
|
-
it
|
63
|
+
it 'should return a single object' do
|
64
64
|
page = subject.page.get(1)
|
65
65
|
page.goal.should == 10
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
describe
|
69
|
+
describe 'not found' do
|
70
70
|
let(:status) { 404 }
|
71
71
|
|
72
|
-
it
|
73
|
-
|
72
|
+
it 'should return nil' do
|
73
|
+
-> { subject.page.get(1).should.nil? }.should raise_exception(ActionKitRest::Response::NotFound)
|
74
74
|
end
|
75
75
|
end
|
76
|
-
|
77
|
-
describe
|
76
|
+
|
77
|
+
describe 'error' do
|
78
78
|
let(:status) { 400 }
|
79
79
|
let(:body) { fixture('error.json') }
|
80
|
-
|
81
|
-
it
|
82
|
-
|
83
|
-
end
|
80
|
+
|
81
|
+
it 'should raise an ak validation response error' do
|
82
|
+
-> { subject.page.get(1) }.should raise_exception(ActionKitRest::Response::ValidationError)
|
83
|
+
end
|
84
84
|
end
|
85
85
|
|
86
86
|
describe 'mailing ID error' do
|
87
87
|
let(:status) { 400 }
|
88
88
|
let(:body) { '{"errors": {"mailing_id": ["Unable to associate this mailing ID with account."]}}' }
|
89
89
|
|
90
|
-
it
|
91
|
-
|
90
|
+
it 'should raise an Invalid AKID response error' do
|
91
|
+
-> { subject.page.get(1) }.should raise_exception(ActionKitRest::Response::InvalidAkidError)
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
describe
|
95
|
+
describe 'an error' do
|
96
96
|
let(:status) { 500 }
|
97
97
|
|
98
|
-
it
|
99
|
-
|
98
|
+
it 'should return nil' do
|
99
|
+
-> { subject.page.get(1).should.nil? }.should raise_exception(StandardError)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
describe 'try again' do
|
104
104
|
let(:status) { 500 }
|
105
105
|
let(:body) { '{"error": "Sorry, this request could not be processed. Please try again later."}' }
|
106
|
-
it
|
107
|
-
|
106
|
+
it 'should return nil' do
|
107
|
+
-> { subject.page.get(1).should.nil? }.should raise_exception(ActionKitRest::Response::TryAgainLater)
|
108
108
|
end
|
109
109
|
end
|
110
110
|
end
|