bigcommerce 1.0.0.beta → 1.0.1
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/README.md +115 -39
- data/bigcommerce.gemspec +12 -13
- data/lib/bigcommerce.rb +5 -34
- data/lib/bigcommerce/config.rb +14 -0
- data/lib/bigcommerce/connection.rb +26 -0
- data/lib/bigcommerce/exception.rb +25 -18
- data/lib/bigcommerce/request.rb +8 -9
- data/lib/bigcommerce/resource_actions.rb +11 -11
- data/lib/bigcommerce/resources/content/blog_post.rb +3 -5
- data/lib/bigcommerce/resources/content/blog_tag.rb +2 -3
- data/lib/bigcommerce/resources/content/redirect.rb +2 -2
- data/lib/bigcommerce/resources/customers/customer.rb +22 -2
- data/lib/bigcommerce/resources/customers/customer_address.rb +5 -5
- data/lib/bigcommerce/resources/customers/customer_group.rb +2 -2
- data/lib/bigcommerce/resources/geography/country.rb +4 -3
- data/lib/bigcommerce/resources/geography/state.rb +6 -5
- data/lib/bigcommerce/resources/marketing/banner.rb +21 -0
- data/lib/bigcommerce/resources/marketing/coupon.rb +2 -2
- data/lib/bigcommerce/resources/marketing/gift_certificates.rb +25 -0
- data/lib/bigcommerce/resources/orders/order.rb +46 -44
- data/lib/bigcommerce/resources/orders/order_coupon.rb +5 -5
- data/lib/bigcommerce/resources/orders/order_message.rb +8 -7
- data/lib/bigcommerce/resources/orders/order_product.rb +37 -36
- data/lib/bigcommerce/resources/orders/order_shipping_address.rb +24 -23
- data/lib/bigcommerce/resources/orders/order_status.rb +2 -1
- data/lib/bigcommerce/resources/orders/order_tax.rb +8 -7
- data/lib/bigcommerce/resources/orders/shipment.rb +11 -10
- data/lib/bigcommerce/resources/products/brand.rb +2 -2
- data/lib/bigcommerce/resources/products/bulk_pricing_rule.rb +6 -5
- data/lib/bigcommerce/resources/products/category.rb +2 -2
- data/lib/bigcommerce/resources/products/configurable_field.rb +6 -5
- data/lib/bigcommerce/resources/products/custom_field.rb +6 -5
- data/lib/bigcommerce/resources/products/google_product_search_mapping.rb +9 -8
- data/lib/bigcommerce/resources/products/option.rb +2 -2
- data/lib/bigcommerce/resources/products/option_set.rb +2 -2
- data/lib/bigcommerce/resources/products/option_set_option.rb +2 -1
- data/lib/bigcommerce/resources/products/option_value.rb +1 -0
- data/lib/bigcommerce/resources/products/product.rb +61 -61
- data/lib/bigcommerce/resources/products/product_image.rb +4 -4
- data/lib/bigcommerce/resources/products/product_option.rb +2 -1
- data/lib/bigcommerce/resources/products/product_review.rb +1 -5
- data/lib/bigcommerce/resources/products/product_rule.rb +4 -4
- data/lib/bigcommerce/resources/products/product_video.rb +4 -4
- data/lib/bigcommerce/resources/products/sku.rb +15 -9
- data/lib/bigcommerce/resources/shipping/shipping_method.rb +2 -1
- data/lib/bigcommerce/resources/store/store_information.rb +18 -14
- data/lib/bigcommerce/resources/system/time.rb +2 -2
- data/lib/bigcommerce/resources/tax/tax_class.rb +2 -1
- data/lib/bigcommerce/resources/webhooks/webhook.rb +2 -1
- data/lib/bigcommerce/subresource_actions.rb +14 -14
- data/lib/bigcommerce/version.rb +1 -1
- metadata +47 -166
- data/.gitignore +0 -17
- data/.rspec +0 -2
- data/.rubocop.yml +0 -620
- data/.travis.yml +0 -15
- data/CHANGELOG.md +0 -11
- data/CONTRIBUTING.md +0 -119
- data/DEPENDENCIES.md +0 -7
- data/Gemfile +0 -15
- data/Guardfile +0 -22
- data/LICENSE +0 -20
- data/RELEASING.md +0 -64
- data/Rakefile +0 -13
- data/examples/README.md +0 -148
- data/examples/configuration/legacy_auth.rb +0 -12
- data/examples/configuration/oauth.rb +0 -9
- data/examples/content/blog_post.rb +0 -39
- data/examples/content/blog_tag.rb +0 -10
- data/examples/content/redirect.rb +0 -43
- data/examples/customers/customer.rb +0 -36
- data/examples/customers/customer_address.rb +0 -50
- data/examples/customers/customer_group.rb +0 -35
- data/examples/exception_handling.rb +0 -50
- data/examples/geography/country.rb +0 -16
- data/examples/geography/state.rb +0 -19
- data/examples/marketing/coupon.rb +0 -44
- data/examples/orders/order.rb +0 -53
- data/examples/orders/order_coupon.rb +0 -17
- data/examples/orders/order_message.rb +0 -17
- data/examples/orders/order_product.rb +0 -23
- data/examples/orders/order_shipping_address.rb +0 -23
- data/examples/orders/order_status.rb +0 -15
- data/examples/orders/order_tax.rb +0 -17
- data/examples/orders/shipment.rb +0 -57
- data/examples/payments/payment_method.rb +0 -10
- data/examples/products/brand.rb +0 -36
- data/examples/products/bulk_pricing_rule.rb +0 -47
- data/examples/products/category.rb +0 -37
- data/examples/products/configurable_field.rb +0 -29
- data/examples/products/custom_field.rb +0 -44
- data/examples/products/google_product_search_mapping.rb +0 -12
- data/examples/products/option.rb +0 -37
- data/examples/products/option_set.rb +0 -35
- data/examples/products/option_set_option.rb +0 -50
- data/examples/products/option_value.rb +0 -43
- data/examples/products/product.rb +0 -44
- data/examples/products/product_image.rb +0 -42
- data/examples/products/product_option.rb +0 -17
- data/examples/products/product_review.rb +0 -12
- data/examples/products/product_rule.rb +0 -54
- data/examples/products/product_video.rb +0 -45
- data/examples/products/sku.rb +0 -48
- data/examples/shipping/shipping_method.rb +0 -13
- data/examples/store/store_info.rb +0 -10
- data/examples/system/time.rb +0 -10
- data/examples/tax/tax_class.rb +0 -13
- data/examples/webhooks/webhook.rb +0 -29
- data/spec/bigcommerce/bigcommerce_spec.rb +0 -76
- data/spec/bigcommerce/unit/actions_spec.rb +0 -151
- data/spec/bigcommerce/unit/exception_spec.rb +0 -53
- data/spec/bigcommerce/unit/middleware/auth_spec.rb +0 -18
- data/spec/bigcommerce/unit/middleware/http_exception_spec.rb +0 -40
- data/spec/bigcommerce/unit/request_spec.rb +0 -180
- data/spec/bigcommerce/unit/resources/content/blog_post_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/content/blog_tag_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/content/redirect_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/customers/customer_address_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/customers/customer_group_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/customers/customer_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/geography/country_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/geography/state_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/marketing/coupon_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/orders/order_product_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/orders/order_shipping_address_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/orders/order_spec.rb +0 -13
- data/spec/bigcommerce/unit/resources/orders/shipment_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/payments/payment_method_spec.rb +0 -23
- data/spec/bigcommerce/unit/resources/products/brand_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/products/bulk_pricing_rule_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/products/category_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/products/configurable_field_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/products/custom_field_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/products/google_product_search_mapping_spec.rb +0 -14
- data/spec/bigcommerce/unit/resources/products/option_set_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/products/option_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/products/product_image_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/products/product_review_spec.rb +0 -14
- data/spec/bigcommerce/unit/resources/products/product_rule_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/products/product_spec.rb +0 -13
- data/spec/bigcommerce/unit/resources/products/product_video_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/products/sku_spec.rb +0 -21
- data/spec/bigcommerce/unit/resources/resource_spec.rb +0 -4
- data/spec/bigcommerce/unit/resources/store_info/store_information_spec.rb +0 -12
- data/spec/bigcommerce/unit/resources/system/time_spec.rb +0 -12
- data/spec/bigcommerce/unit/version_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -11
@@ -1,76 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bigcommerce do
|
4
|
-
let(:middleware) do
|
5
|
-
api.instance_variable_get('@builder').instance_variable_get('@handlers')
|
6
|
-
end
|
7
|
-
|
8
|
-
it 'should return a faraday object when configured' do
|
9
|
-
Bigcommerce.configure do |config|
|
10
|
-
config.url = 'http://foobar.com'
|
11
|
-
config.auth = 'legacy'
|
12
|
-
config.api_key = '214789175'
|
13
|
-
config.username = 'admin'
|
14
|
-
end
|
15
|
-
expect(Bigcommerce.api).to be_a_kind_of(Faraday::Connection)
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '.build_connection' do
|
19
|
-
context 'when using legacy' do
|
20
|
-
let(:api) do
|
21
|
-
Bigcommerce.configure do |config|
|
22
|
-
config.url = 'http://foobar.com'
|
23
|
-
config.auth = 'legacy'
|
24
|
-
config.api_key = '214789175'
|
25
|
-
config.username = 'admin'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should have the correct auth middleware' do
|
30
|
-
expect(middleware).to include(Faraday::Request::BasicAuthentication)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'when not using legacy' do
|
35
|
-
let(:api) do
|
36
|
-
Bigcommerce.configure do |config|
|
37
|
-
config.access_token = 'jksdgkjbhksjdb'
|
38
|
-
config.client_id = 'negskjgdjkbg'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'should have the correct auth middleware' do
|
43
|
-
expect(middleware).to include(Bigcommerce::Middleware::Auth)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe 'multiple configurations' do
|
49
|
-
it 'should use the configuration for the most recently defined' do
|
50
|
-
Bigcommerce.configure do |config|
|
51
|
-
config.access_token = 'jksdgkjbhksjdb'
|
52
|
-
config.client_id = 'negskjgdjkbg'
|
53
|
-
end
|
54
|
-
|
55
|
-
Bigcommerce.configure do |config|
|
56
|
-
config.url = 'http://foobar.com'
|
57
|
-
config.auth = 'legacy'
|
58
|
-
config.api_key = '214789175'
|
59
|
-
config.username = 'admin'
|
60
|
-
end
|
61
|
-
|
62
|
-
expect(Bigcommerce.api.instance_variable_get('@builder')
|
63
|
-
.instance_variable_get('@handlers'))
|
64
|
-
.to include(Faraday::Request::BasicAuthentication)
|
65
|
-
|
66
|
-
Bigcommerce.configure do |config|
|
67
|
-
config.access_token = 'jksdgkjbhksjdb'
|
68
|
-
config.client_id = 'negskjgdjkbg'
|
69
|
-
end
|
70
|
-
|
71
|
-
expect(Bigcommerce.api.instance_variable_get('@builder')
|
72
|
-
.instance_variable_get('@handlers'))
|
73
|
-
.to include(Bigcommerce::Middleware::Auth)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,151 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bigcommerce::ResourceActions do
|
4
|
-
before do
|
5
|
-
module Bigcommerce
|
6
|
-
class DummyClass
|
7
|
-
include ResourceActions.new(uri: 'http://foo.bar/%d')
|
8
|
-
end
|
9
|
-
end
|
10
|
-
@klass = Bigcommerce::DummyClass
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:params) do
|
14
|
-
{ page: 1 }
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should have options' do
|
18
|
-
mod = Bigcommerce::ResourceActions.new(
|
19
|
-
uri: 'http://foo.bar',
|
20
|
-
disable: [:find,:all]
|
21
|
-
)
|
22
|
-
options = {
|
23
|
-
uri: 'http://foo.bar',
|
24
|
-
disable: [:find,:all]
|
25
|
-
}
|
26
|
-
expect(mod._options).to eq options
|
27
|
-
end
|
28
|
-
|
29
|
-
describe '.all' do
|
30
|
-
it 'should make a get request to the correct route with query params' do
|
31
|
-
expect(@klass).to receive(:get).with('http://foo.bar', page: 1)
|
32
|
-
@klass.all(params)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should make a get request to the correct route' do
|
36
|
-
expect(@klass).to receive(:get).with('http://foo.bar', {})
|
37
|
-
params.delete(:params)
|
38
|
-
@klass.all
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '.find' do
|
43
|
-
it 'should make a get request to the correct route' do
|
44
|
-
expect(@klass).to receive(:get).with('http://foo.bar/1')
|
45
|
-
@klass.find(1)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '.create' do
|
50
|
-
it 'should make a post request to the correct route with params' do
|
51
|
-
expect(@klass).to receive(:post).with('http://foo.bar', page: 1)
|
52
|
-
@klass.create(params)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe '.update' do
|
57
|
-
it 'should make a put request to the correct route with params' do
|
58
|
-
expect(@klass).to receive(:put).with('http://foo.bar/1', page: 1)
|
59
|
-
@klass.update(1, params)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe '.destroy' do
|
64
|
-
it 'should make a delete request to the correct route with params' do
|
65
|
-
expect(@klass).to receive(:delete).with('http://foo.bar/1')
|
66
|
-
@klass.destroy(1)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe '.destroy_all' do
|
71
|
-
it 'should make a delete request to the correct route with params' do
|
72
|
-
expect(@klass).to receive(:delete).with('http://foo.bar')
|
73
|
-
@klass.destroy_all
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe Bigcommerce::SubresourceActions do
|
79
|
-
before do
|
80
|
-
module Bigcommerce
|
81
|
-
class DummyClass
|
82
|
-
include SubresourceActions.new(uri: 'http://foo.bar/%d/%d')
|
83
|
-
end
|
84
|
-
end
|
85
|
-
@klass = Bigcommerce::DummyClass
|
86
|
-
end
|
87
|
-
|
88
|
-
let(:params) do
|
89
|
-
{ page: 1 }
|
90
|
-
end
|
91
|
-
|
92
|
-
it 'should have options' do
|
93
|
-
mod = Bigcommerce::SubresourceActions.new(
|
94
|
-
uri: 'http://foo.bar',
|
95
|
-
disable: [:find,:all]
|
96
|
-
)
|
97
|
-
options = {
|
98
|
-
uri: 'http://foo.bar',
|
99
|
-
disable: [:find,:all]
|
100
|
-
}
|
101
|
-
expect(mod._options).to eq options
|
102
|
-
end
|
103
|
-
|
104
|
-
describe '.all' do
|
105
|
-
it 'should make a get request to the correct route with query params' do
|
106
|
-
expect(@klass).to receive(:get).with('http://foo.bar/1', page: 1)
|
107
|
-
@klass.all(1, params)
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'should make a get request to the correct route' do
|
111
|
-
expect(@klass).to receive(:get).with('http://foo.bar/1', {})
|
112
|
-
params.delete(:params)
|
113
|
-
@klass.all(1)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
describe '.find' do
|
118
|
-
it 'should make a get request to the correct route' do
|
119
|
-
expect(@klass).to receive(:get).with('http://foo.bar/1/2')
|
120
|
-
@klass.find(1,2)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe '.create' do
|
125
|
-
it 'should make a post request to the correct route with params' do
|
126
|
-
expect(@klass).to receive(:post).with('http://foo.bar/1', page: 1)
|
127
|
-
@klass.create(1, params)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
describe '.update' do
|
132
|
-
it 'should make a put request to the correct route with params' do
|
133
|
-
expect(@klass).to receive(:put).with('http://foo.bar/1/2', page: 1)
|
134
|
-
@klass.update(1, 2, params)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe '.destroy' do
|
139
|
-
it 'should make a delete request to the correct route with params' do
|
140
|
-
expect(@klass).to receive(:delete).with('http://foo.bar/1/2')
|
141
|
-
@klass.destroy(1, 2)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
describe '.destroy_all' do
|
146
|
-
it 'should make a delete request to the correct route with params' do
|
147
|
-
expect(@klass).to receive(:delete).with('http://foo.bar/1')
|
148
|
-
@klass.destroy_all(1)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bigcommerce::HttpErrors do
|
4
|
-
let(:dummy_class) { Class.new { extend Bigcommerce::HttpErrors } }
|
5
|
-
|
6
|
-
it '::ERRORS is not nil' do
|
7
|
-
expect(Bigcommerce::HttpErrors::ERRORS).not_to be_nil
|
8
|
-
end
|
9
|
-
|
10
|
-
context 'invalid response status' do
|
11
|
-
it 'should throw an exception' do
|
12
|
-
code = 404
|
13
|
-
expect { dummy_class.throw_http_exception!(code) }.to raise_exception
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should have a valid error' do
|
17
|
-
codes = Bigcommerce::HttpErrors::ERRORS.keys
|
18
|
-
codes.each do |code|
|
19
|
-
expect { dummy_class.throw_http_exception!(code) }.to raise_exception
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should allow you to pass in an error message when throwing exception' do
|
24
|
-
code = 404
|
25
|
-
env = double
|
26
|
-
allow(env).to receive(:body) { {} }
|
27
|
-
allow(env).to receive(:[]) { {} }
|
28
|
-
expect do
|
29
|
-
dummy_class.throw_http_exception!(code, env)
|
30
|
-
end.to raise_exception(Bigcommerce::HttpErrors::ERRORS[code])
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should parse out a retry-after header if present' do
|
34
|
-
code = 429
|
35
|
-
env = double
|
36
|
-
allow(env).to receive(:body) { "{\"time\":1426184190}" }
|
37
|
-
allow(env).to receive(:[]).with(:response_headers).and_return('X-Retry-After' => 1)
|
38
|
-
begin
|
39
|
-
dummy_class.throw_http_exception!(code, env)
|
40
|
-
rescue Bigcommerce::TooManyRequests => e
|
41
|
-
expect(e.response_headers[:retry_after]).to eq 1
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context 'valid response status' do
|
47
|
-
it 'should not throw an exception' do
|
48
|
-
code = 200
|
49
|
-
env = double
|
50
|
-
expect { dummy_class.throw_http_exception!(code, env) }.to_not raise_exception
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bigcommerce::Middleware::Auth do
|
4
|
-
it 'should set the correct headers' do
|
5
|
-
app = double
|
6
|
-
options = {
|
7
|
-
client_id: 'client_id',
|
8
|
-
access_token: 'access_token'
|
9
|
-
}
|
10
|
-
@api = Bigcommerce::Middleware::Auth.new(app, options)
|
11
|
-
expect(app).to receive(:call).with(
|
12
|
-
request_headers: {
|
13
|
-
'X-Auth-Client' => 'client_id',
|
14
|
-
'X-Auth-Token' => 'access_token'
|
15
|
-
})
|
16
|
-
@api.call(request_headers: {})
|
17
|
-
end
|
18
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bigcommerce::Middleware::HttpException do
|
4
|
-
before(:each) { @e = Bigcommerce::Middleware::HttpException.new }
|
5
|
-
|
6
|
-
it 'should check for an error on all responses' do
|
7
|
-
env = {
|
8
|
-
status: '200',
|
9
|
-
body: 'Valid'
|
10
|
-
}
|
11
|
-
expect(@e).to receive(:throw_http_exception!).with(200, env)
|
12
|
-
@e.on_complete env
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'when valid response' do
|
16
|
-
let(:env) do
|
17
|
-
{
|
18
|
-
status: '200',
|
19
|
-
body: 'Valid'
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should return its argument if no errors' do
|
24
|
-
expect(@e.on_complete(env)).to eq env
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'when invalid response' do
|
29
|
-
let(:env) do
|
30
|
-
{
|
31
|
-
status: '404',
|
32
|
-
body: 'Error'
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should throw an exception' do
|
37
|
-
expect { @e.on_complete(env) }.to raise_exception
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,180 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Bigcommerce::Request do
|
4
|
-
before do
|
5
|
-
module Bigcommerce
|
6
|
-
class DummyClass
|
7
|
-
include Request.new 'foo/%d'
|
8
|
-
end
|
9
|
-
end
|
10
|
-
@klass = Bigcommerce::DummyClass
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '.path' do
|
14
|
-
it 'should have a path method to expose the path_builder' do
|
15
|
-
expect(@klass.path).to be_kind_of Bigcommerce::PathBuilder
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe 'ClassMethods' do
|
20
|
-
before do
|
21
|
-
double Bigcommerce.api
|
22
|
-
end
|
23
|
-
|
24
|
-
let(:json) { "{\"body\":[{\"time\":1426184190},{\"time\":1426184190}]}" }
|
25
|
-
|
26
|
-
describe '.get' do
|
27
|
-
it 'should call raw_request and build_response_object' do
|
28
|
-
allow(@klass).to receive(:raw_request) { json }
|
29
|
-
expect(@klass).to receive(:raw_request).with(:get, @klass.path, {})
|
30
|
-
expect(@klass).to receive(:build_response_object).with(json)
|
31
|
-
@klass.get(@klass.path, {})
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe '.delete' do
|
36
|
-
it 'should call raw_request' do
|
37
|
-
response = double
|
38
|
-
allow(response).to receive(:body) { '' }
|
39
|
-
allow(@klass).to receive(:raw_request) { response }
|
40
|
-
expect(@klass).to receive(:raw_request).with(:delete, @klass.path)
|
41
|
-
@klass.delete(@klass.path)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe '.post' do
|
46
|
-
it 'should call raw_request and build_response_object' do
|
47
|
-
allow(@klass).to receive(:raw_request) { json }
|
48
|
-
expect(@klass).to receive(:raw_request).with(:post, @klass.path, {})
|
49
|
-
expect(@klass).to receive(:build_response_object).with(json)
|
50
|
-
@klass.post(@klass.path, {})
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '.put' do
|
55
|
-
it 'should call raw_request and build_response_object' do
|
56
|
-
allow(@klass).to receive(:raw_request) { json }
|
57
|
-
expect(@klass).to receive(:raw_request).with(:put, @klass.path, {})
|
58
|
-
expect(@klass).to receive(:build_response_object).with(json)
|
59
|
-
@klass.put(@klass.path, {})
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe '.raw_request' do
|
64
|
-
before do
|
65
|
-
Bigcommerce.configure do |config|
|
66
|
-
config.client_id = 'sdbgksjbg4'
|
67
|
-
config.access_token = 'jkdgbdsgbg'
|
68
|
-
config.store_hash = 'sdgjnsdjg'
|
69
|
-
end
|
70
|
-
@api = Bigcommerce.api
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'send its method to Bigcommerce.api' do
|
74
|
-
response = double
|
75
|
-
allow(@api).to receive(:get) { response }
|
76
|
-
allow(response).to receive(:headers) { '' }
|
77
|
-
expect(@api).to receive(:get).with('path/1', nil)
|
78
|
-
expect(response).to receive(:headers)
|
79
|
-
@klass.raw_request(:get, 'path/1')
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe 'private methods' do
|
84
|
-
describe '.build_response_object' do
|
85
|
-
before do
|
86
|
-
module Bigcommerce
|
87
|
-
class DummyClass
|
88
|
-
include Request.new 'foo/%d'
|
89
|
-
def initialize(params)
|
90
|
-
@params = params
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
@klass_with_init = Bigcommerce::DummyClass
|
95
|
-
end
|
96
|
-
|
97
|
-
describe 'json array' do
|
98
|
-
let(:json) { "[{\"time\":1426184190},{\"time\":1426184190}]" }
|
99
|
-
|
100
|
-
it 'should build an array of objects' do
|
101
|
-
response = double
|
102
|
-
allow(response).to receive(:body) { json }
|
103
|
-
objs = @klass_with_init.send(:build_response_object, response)
|
104
|
-
expect(objs).to be_kind_of Array
|
105
|
-
objs.each do |obj|
|
106
|
-
expect(obj).to be_kind_of Bigcommerce::DummyClass
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
describe 'json object' do
|
111
|
-
let(:json) { "{\"time\":1426184190}" }
|
112
|
-
it 'should build an object' do
|
113
|
-
response = double
|
114
|
-
allow(response).to receive(:body) { json }
|
115
|
-
objs = @klass_with_init.send(:build_response_object, response)
|
116
|
-
expect(objs).to be_kind_of Bigcommerce::DummyClass
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe '.parse' do
|
122
|
-
describe 'empty string' do
|
123
|
-
let(:json) { "" }
|
124
|
-
|
125
|
-
it 'should return an array' do
|
126
|
-
expect(@klass.send(:parse, json)).to be_kind_of Array
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
describe 'valid json' do
|
131
|
-
let(:json) { "{\"time\":1426184190}" }
|
132
|
-
|
133
|
-
it 'should symbolize keys' do
|
134
|
-
expect(@klass.send(:parse, json)).to eq({time:1426184190})
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'should return a hash' do
|
138
|
-
expect(@klass.send(:parse, json)).to be_kind_of Hash
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
describe Bigcommerce::PathBuilder do
|
147
|
-
let(:uri) { 'bar/%d' }
|
148
|
-
before do
|
149
|
-
@path_builder = Bigcommerce::PathBuilder.new uri
|
150
|
-
end
|
151
|
-
|
152
|
-
describe '.to_s' do
|
153
|
-
it 'should return uri' do
|
154
|
-
expect(@path_builder.to_s).to eq uri
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
describe '.build' do
|
159
|
-
context 'hash of keys' do
|
160
|
-
let(:keys) { 1 }
|
161
|
-
it 'should build a formed path' do
|
162
|
-
expect(@path_builder.build keys).to eq 'bar/1'
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
context 'integer keys' do
|
167
|
-
let(:keys) { 1 }
|
168
|
-
it 'should build a formed path' do
|
169
|
-
expect(@path_builder.build keys).to eq 'bar/1'
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
context 'integer keys' do
|
174
|
-
let(:keys) { nil }
|
175
|
-
it 'should build a formed path' do
|
176
|
-
expect(@path_builder.build keys).to eq 'bar'
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|