tailored-etsy 0.2.2
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.
- data/.gitignore +8 -0
- data/.travis.yml +8 -0
- data/Gemfile +3 -0
- data/LICENSE +9 -0
- data/README.md +280 -0
- data/Rakefile +12 -0
- data/etsy.gemspec +28 -0
- data/lib/etsy.rb +172 -0
- data/lib/etsy/address.rb +47 -0
- data/lib/etsy/basic_client.rb +26 -0
- data/lib/etsy/category.rb +84 -0
- data/lib/etsy/country.rb +27 -0
- data/lib/etsy/image.rb +34 -0
- data/lib/etsy/listing.rb +178 -0
- data/lib/etsy/model.rb +123 -0
- data/lib/etsy/payment_template.rb +33 -0
- data/lib/etsy/profile.rb +49 -0
- data/lib/etsy/request.rb +148 -0
- data/lib/etsy/response.rb +112 -0
- data/lib/etsy/section.rb +16 -0
- data/lib/etsy/secure_client.rb +128 -0
- data/lib/etsy/shipping_template.rb +32 -0
- data/lib/etsy/shop.rb +83 -0
- data/lib/etsy/transaction.rb +18 -0
- data/lib/etsy/user.rb +91 -0
- data/lib/etsy/verification_request.rb +17 -0
- data/lib/etsy/version.rb +3 -0
- data/test/fixtures/address/getUserAddresses.json +12 -0
- data/test/fixtures/category/findAllSubCategoryChildren.json +78 -0
- data/test/fixtures/category/findAllTopCategory.json +347 -0
- data/test/fixtures/category/findAllTopCategory.single.json +18 -0
- data/test/fixtures/category/findAllTopCategoryChildren.json +308 -0
- data/test/fixtures/category/getCategory.multiple.json +28 -0
- data/test/fixtures/category/getCategory.single.json +18 -0
- data/test/fixtures/country/getCountry.json +1 -0
- data/test/fixtures/image/findAllListingImages.json +102 -0
- data/test/fixtures/listing/findAllListingActive.category.json +827 -0
- data/test/fixtures/listing/findAllShopListings.json +69 -0
- data/test/fixtures/listing/getListing.multiple.json +1 -0
- data/test/fixtures/listing/getListing.single.json +1 -0
- data/test/fixtures/payment_template/getPaymentTemplate.json +1 -0
- data/test/fixtures/profile/new.json +28 -0
- data/test/fixtures/section/getShopSection.json +18 -0
- data/test/fixtures/shipping_template/getShippingTemplate.json +1 -0
- data/test/fixtures/shop/findAllShop.json +1 -0
- data/test/fixtures/shop/findAllShop.single.json +1 -0
- data/test/fixtures/shop/getShop.multiple.json +1 -0
- data/test/fixtures/shop/getShop.single.json +33 -0
- data/test/fixtures/transaction/findAllShopTransactions.json +1 -0
- data/test/fixtures/user/getUser.multiple.json +29 -0
- data/test/fixtures/user/getUser.single.json +13 -0
- data/test/fixtures/user/getUser.single.private.json +18 -0
- data/test/fixtures/user/getUser.single.withProfile.json +38 -0
- data/test/fixtures/user/getUser.single.withShops.json +41 -0
- data/test/test_helper.rb +44 -0
- data/test/unit/etsy/address_test.rb +61 -0
- data/test/unit/etsy/basic_client_test.rb +28 -0
- data/test/unit/etsy/category_test.rb +106 -0
- data/test/unit/etsy/country_test.rb +64 -0
- data/test/unit/etsy/image_test.rb +43 -0
- data/test/unit/etsy/listing_test.rb +217 -0
- data/test/unit/etsy/model_test.rb +64 -0
- data/test/unit/etsy/payment_template_test.rb +68 -0
- data/test/unit/etsy/profile_test.rb +111 -0
- data/test/unit/etsy/request_test.rb +192 -0
- data/test/unit/etsy/response_test.rb +164 -0
- data/test/unit/etsy/section_test.rb +28 -0
- data/test/unit/etsy/secure_client_test.rb +132 -0
- data/test/unit/etsy/shipping_template_test.rb +24 -0
- data/test/unit/etsy/shop_test.rb +104 -0
- data/test/unit/etsy/transaction_test.rb +52 -0
- data/test/unit/etsy/user_test.rb +218 -0
- data/test/unit/etsy/verification_request_test.rb +26 -0
- data/test/unit/etsy_test.rb +114 -0
- metadata +269 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Etsy
|
4
|
+
class PaymentTemplateTest < Test::Unit::TestCase
|
5
|
+
context "An instance of the PaymentTemplate class" do
|
6
|
+
setup do
|
7
|
+
data = read_fixture('payment_template/getPaymentTemplate.json')
|
8
|
+
@payment_template = PaymentTemplate.new(data.first)
|
9
|
+
end
|
10
|
+
|
11
|
+
should "have an id" do
|
12
|
+
@payment_template.id.should == 51
|
13
|
+
end
|
14
|
+
|
15
|
+
should "have attribute: allow_check" do
|
16
|
+
@payment_template.allow_check.should == false
|
17
|
+
end
|
18
|
+
|
19
|
+
should "have attribute: allow_mo" do
|
20
|
+
@payment_template.allow_mo.should == false
|
21
|
+
end
|
22
|
+
|
23
|
+
should "have attribute: allow_other" do
|
24
|
+
@payment_template.allow_other.should == true
|
25
|
+
end
|
26
|
+
|
27
|
+
should "have attribute: allow_paypal" do
|
28
|
+
@payment_template.allow_paypal.should == true
|
29
|
+
end
|
30
|
+
|
31
|
+
should "have attribute: allow_cc" do
|
32
|
+
@payment_template.allow_cc.should == false
|
33
|
+
end
|
34
|
+
|
35
|
+
should "have attribute: paypal_email" do
|
36
|
+
@payment_template.paypal_email.should == "user@example.com"
|
37
|
+
end
|
38
|
+
|
39
|
+
should "have attribute: name" do
|
40
|
+
@payment_template.name.should == "Example Template"
|
41
|
+
end
|
42
|
+
|
43
|
+
should "have attribute: first_line" do
|
44
|
+
@payment_template.first_line.should == nil
|
45
|
+
end
|
46
|
+
|
47
|
+
should "have attribute: second_line" do
|
48
|
+
@payment_template.second_line.should == nil
|
49
|
+
end
|
50
|
+
|
51
|
+
should "have attribute: city" do
|
52
|
+
@payment_template.city.should == "Chicago"
|
53
|
+
end
|
54
|
+
|
55
|
+
should "have attribute: state" do
|
56
|
+
@payment_template.state.should == "IL"
|
57
|
+
end
|
58
|
+
|
59
|
+
should "have attribute: zip" do
|
60
|
+
@payment_template.zip.should == "60605"
|
61
|
+
end
|
62
|
+
|
63
|
+
should "have attribute: country_id" do
|
64
|
+
@payment_template.country_id.should == 4
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Etsy
|
4
|
+
class ProfileTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
# The Etsy profile can only be accessed as an association through other resources.
|
7
|
+
# There are no finders.
|
8
|
+
context "An instance of the Profile class" do
|
9
|
+
|
10
|
+
context "with response data" do
|
11
|
+
setup do
|
12
|
+
data = read_fixture('profile/new.json')
|
13
|
+
@profile = Profile.new(data)
|
14
|
+
end
|
15
|
+
|
16
|
+
should "have a value for :id" do
|
17
|
+
@profile.id.should == 123
|
18
|
+
end
|
19
|
+
|
20
|
+
should "have a value for :user_id" do
|
21
|
+
@profile.user_id.should == 5327518
|
22
|
+
end
|
23
|
+
|
24
|
+
should "have a value for :username" do
|
25
|
+
@profile.username.should == "littletjane"
|
26
|
+
end
|
27
|
+
|
28
|
+
should "have a value for :bio" do
|
29
|
+
@profile.bio.should == "I make stuff"
|
30
|
+
end
|
31
|
+
|
32
|
+
should "have a value for :gender" do
|
33
|
+
@profile.gender.should == "female"
|
34
|
+
end
|
35
|
+
|
36
|
+
should "have a value for :birth_day" do
|
37
|
+
@profile.birth_day.should == "01"
|
38
|
+
end
|
39
|
+
|
40
|
+
should "have a value for :birth_month" do
|
41
|
+
@profile.birth_month.should == "01"
|
42
|
+
end
|
43
|
+
|
44
|
+
should "have a value for :birth_year" do
|
45
|
+
@profile.birth_year.should == "1970"
|
46
|
+
end
|
47
|
+
|
48
|
+
should "have a value for :joined_at" do
|
49
|
+
@profile.joined_at.should == Time.at(1225392413)
|
50
|
+
end
|
51
|
+
|
52
|
+
should "have a value for :materials" do
|
53
|
+
@profile.materials.should == []
|
54
|
+
end
|
55
|
+
|
56
|
+
should "have a value for :country_id" do
|
57
|
+
@profile.country_id.should == 209
|
58
|
+
end
|
59
|
+
|
60
|
+
should "have a value for :city" do
|
61
|
+
@profile.city.should == "BigCity"
|
62
|
+
end
|
63
|
+
|
64
|
+
should "have a value for :avatar_id" do
|
65
|
+
@profile.avatar_id.should == 345
|
66
|
+
end
|
67
|
+
|
68
|
+
should "have a value for :location" do
|
69
|
+
@profile.location.should == "HQ"
|
70
|
+
end
|
71
|
+
|
72
|
+
should "have a value for :region" do
|
73
|
+
@profile.region.should == "The Desert"
|
74
|
+
end
|
75
|
+
|
76
|
+
should "have a value for :lat" do
|
77
|
+
@profile.lat.should == 39.5304
|
78
|
+
end
|
79
|
+
|
80
|
+
should "have a value for :lon" do
|
81
|
+
@profile.lon.should == -119.8144
|
82
|
+
end
|
83
|
+
|
84
|
+
should "have a value for :transaction_buy_count" do
|
85
|
+
@profile.transaction_buy_count.should == 19
|
86
|
+
end
|
87
|
+
|
88
|
+
should "have a value for :transaction_sold_count" do
|
89
|
+
@profile.transaction_sold_count.should == 16
|
90
|
+
end
|
91
|
+
|
92
|
+
should "have a value for :seller?" do
|
93
|
+
@profile.seller?.should == true
|
94
|
+
end
|
95
|
+
|
96
|
+
should "have a value for :image" do
|
97
|
+
@profile.image.should == 'some_image.jpg'
|
98
|
+
end
|
99
|
+
|
100
|
+
should "have a value for :first_name" do
|
101
|
+
@profile.first_name.should == 'Tinker'
|
102
|
+
end
|
103
|
+
|
104
|
+
should "have a value for :last_name" do
|
105
|
+
@profile.last_name.should == 'Bell'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Etsy
|
4
|
+
class RequestTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "The Request class" do
|
7
|
+
|
8
|
+
should "be able to retrieve a response" do
|
9
|
+
http_response = stub()
|
10
|
+
response = stub()
|
11
|
+
|
12
|
+
Response.expects(:new).with(http_response).returns(response)
|
13
|
+
|
14
|
+
request = mock {|m| m.expects(:get).with().returns(http_response) }
|
15
|
+
Request.expects(:new).with('/user', :one => 'two').returns(request)
|
16
|
+
|
17
|
+
Request.get('/user', :one => 'two').should == response
|
18
|
+
end
|
19
|
+
|
20
|
+
should "require OAuth credentials if :require_secure is set" do
|
21
|
+
lambda do
|
22
|
+
Request.new('/path', :require_secure => true)
|
23
|
+
end.should raise_error(/Secure connection required/)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "An instance of the Request class" do
|
28
|
+
|
29
|
+
should "know the base path" do
|
30
|
+
Request.new('').base_path.should == '/v2'
|
31
|
+
end
|
32
|
+
|
33
|
+
should "append the api_key to the parameters in basic mode" do
|
34
|
+
Etsy.expects(:api_key).with().returns('key')
|
35
|
+
Request.stubs(:secure?).returns(false)
|
36
|
+
|
37
|
+
r = Request.new('/user', :limit => '1')
|
38
|
+
r.parameters.should == {:limit => '1', :api_key => 'key'}
|
39
|
+
end
|
40
|
+
|
41
|
+
should "not append the api_key to the parameters in secure mode" do
|
42
|
+
Etsy.stubs(:access_mode).returns(:authenticated)
|
43
|
+
|
44
|
+
r = Request.new('/user', :limit => '1', :access_token => 'token', :access_secret => 'secret')
|
45
|
+
r.parameters.should == {:limit => '1'}
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
should "be able to generate query parameters" do
|
50
|
+
r = Request.new('/user')
|
51
|
+
r.expects(:parameters).with().returns(:api_key => 'foo')
|
52
|
+
r.query.should == 'api_key=foo'
|
53
|
+
end
|
54
|
+
|
55
|
+
should "be able to join multiple query parameters" do
|
56
|
+
params = {:limit => '1', :other => 'yes'}
|
57
|
+
|
58
|
+
r = Request.new('/user', params)
|
59
|
+
r.stubs(:parameters).with().returns(params)
|
60
|
+
|
61
|
+
r.query.split('&').sort.should == %w(limit=1 other=yes)
|
62
|
+
end
|
63
|
+
|
64
|
+
should "be able to request a single association" do
|
65
|
+
r = Request.new('/foo', {:includes => 'Thunder'})
|
66
|
+
r.stubs(:parameters).with().returns({:a => :b})
|
67
|
+
CGI.parse(r.query).should == { "a" => ["b"], "includes" => ["Thunder"] }
|
68
|
+
end
|
69
|
+
|
70
|
+
should "be able make simplified association requests" do
|
71
|
+
r = Request.new('/foo', {:includes => ['Thunder', 'Lightning']})
|
72
|
+
r.stubs(:parameters).with().returns({:a => :b})
|
73
|
+
CGI.parse(r.query).should == { "a" => ["b"], "includes" => ["Thunder,Lightning"] }
|
74
|
+
end
|
75
|
+
|
76
|
+
should "be able to generate detailed association queries" do
|
77
|
+
r = Request.new('/foo')
|
78
|
+
r.association(:resource => 'Lightning').should == 'Lightning'
|
79
|
+
end
|
80
|
+
|
81
|
+
should "be able to specify fields in association query" do
|
82
|
+
r = Request.new('/foo')
|
83
|
+
params = {:resource => 'Lightning', :fields => ['one', 'two']}
|
84
|
+
r.association(params).should == 'Lightning(one,two)'
|
85
|
+
end
|
86
|
+
|
87
|
+
should "be able to specify limit in association query" do
|
88
|
+
r = Request.new('/foo')
|
89
|
+
params = {:resource => 'Lightning', :limit => 3}
|
90
|
+
r.association(params).should == 'Lightning:3:0'
|
91
|
+
end
|
92
|
+
|
93
|
+
should "be able to specify offset in association query" do
|
94
|
+
r = Request.new('/foo')
|
95
|
+
params = {:resource => 'Lightning', :offset => 7}
|
96
|
+
r.association(params).should == 'Lightning:25:7'
|
97
|
+
end
|
98
|
+
|
99
|
+
should "be able to join multiple resources in association query" do
|
100
|
+
params = {
|
101
|
+
:a => 'b',
|
102
|
+
:includes => [
|
103
|
+
{:resource => 'Lightning'},
|
104
|
+
{:resource => 'Thunder'}
|
105
|
+
]
|
106
|
+
}
|
107
|
+
r = Request.new('/foo', params)
|
108
|
+
r.stubs(:base_path).with().returns('/base')
|
109
|
+
r.stubs(:parameters).with().returns(:a => 'b')
|
110
|
+
uri = URI.parse(r.endpoint_url)
|
111
|
+
uri.path.should == '/base/foo'
|
112
|
+
CGI.parse(uri.query).should == { "a" => ["b"], "includes" => ["Lightning,Thunder"] }
|
113
|
+
end
|
114
|
+
|
115
|
+
should "be able to determine the endpoint URI when in read-only mode" do
|
116
|
+
r = Request.new('/user')
|
117
|
+
r.stubs(:base_path).with().returns('/base')
|
118
|
+
r.stubs(:query).with().returns('a=b')
|
119
|
+
|
120
|
+
r.endpoint_url.should == '/base/user?a=b'
|
121
|
+
end
|
122
|
+
|
123
|
+
should "be able to determine the endpoint URI when in authenticated mode" do
|
124
|
+
Etsy.stubs(:access_mode).returns(:authenticated)
|
125
|
+
|
126
|
+
r = Request.new('/user', :access_token => 'toke', :access_secret => 'secret')
|
127
|
+
r.stubs(:base_path).with().returns('/base')
|
128
|
+
r.stubs(:query).with().returns('a=b')
|
129
|
+
|
130
|
+
r.endpoint_url.should == '/base/user?a=b'
|
131
|
+
end
|
132
|
+
|
133
|
+
should "know the client for read-only mode" do
|
134
|
+
Etsy.stubs(:access_mode).returns(:read_only)
|
135
|
+
Etsy.stubs(:host).returns('example.com')
|
136
|
+
|
137
|
+
BasicClient.stubs(:new).with('example.com').returns('client')
|
138
|
+
|
139
|
+
r = Request.new('')
|
140
|
+
|
141
|
+
r.client.should == 'client'
|
142
|
+
end
|
143
|
+
|
144
|
+
should "know the client for authenticated mode when there is no access token information" do
|
145
|
+
Etsy.stubs(:access_mode).returns(:authenticated)
|
146
|
+
Etsy.stubs(:host).returns('example.com')
|
147
|
+
|
148
|
+
BasicClient.stubs(:new).with('example.com').returns('client')
|
149
|
+
|
150
|
+
r = Request.new('')
|
151
|
+
|
152
|
+
r.client.should == 'client'
|
153
|
+
end
|
154
|
+
|
155
|
+
should "know the client for authenticated mode when there is access token information" do
|
156
|
+
Etsy.stubs(:access_mode).returns(:authenticated)
|
157
|
+
SecureClient.stubs(:new).with(:access_token => 'toke', :access_secret => 'secret').returns('client')
|
158
|
+
|
159
|
+
r = Request.new('', :access_token => 'toke', :access_secret => 'secret')
|
160
|
+
r.client.should == 'client'
|
161
|
+
end
|
162
|
+
|
163
|
+
should "be able to make a successful request" do
|
164
|
+
client = stub()
|
165
|
+
client.stubs(:get).with('endpoint_url').returns('response')
|
166
|
+
|
167
|
+
r = Request.new('/user')
|
168
|
+
r.stubs(:endpoint_url).with().returns('endpoint_url')
|
169
|
+
r.stubs(:client).returns(client)
|
170
|
+
|
171
|
+
r.get.should == 'response'
|
172
|
+
end
|
173
|
+
|
174
|
+
should "not modify the options hash passed to it" do
|
175
|
+
options = { :includes => 'Lightning',
|
176
|
+
:access_token => 'token',
|
177
|
+
:access_secret => 'secret',
|
178
|
+
:fields => [:id],
|
179
|
+
:limit => 100,
|
180
|
+
:offset => 100 }
|
181
|
+
options_copy = options.dup
|
182
|
+
|
183
|
+
Request.new('', options)
|
184
|
+
|
185
|
+
options.should == options_copy
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Etsy
|
4
|
+
class ResponseTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "An instance of the Response class" do
|
7
|
+
|
8
|
+
should "be able to decode the JSON data to a hash" do
|
9
|
+
data = '{ "foo":"bar" }'
|
10
|
+
|
11
|
+
r = Response.new(stub(:body => data))
|
12
|
+
r.to_hash.should == {'foo' => 'bar'}
|
13
|
+
end
|
14
|
+
|
15
|
+
should "only decode the JSON data once" do
|
16
|
+
JSON.expects(:parse).once.returns({})
|
17
|
+
|
18
|
+
r = Response.new(stub(:body => '{ "foo":"bar" }'))
|
19
|
+
2.times { r.to_hash }
|
20
|
+
end
|
21
|
+
|
22
|
+
should "have a record count when the response is not paginated" do
|
23
|
+
raw_response = mock
|
24
|
+
raw_response.stubs(:body => '{ "count": 1 }')
|
25
|
+
r = Response.new(raw_response)
|
26
|
+
|
27
|
+
r.count.should == 1
|
28
|
+
end
|
29
|
+
|
30
|
+
should "have a record count when the response is paginated" do
|
31
|
+
raw_response = mock
|
32
|
+
raw_response.stubs(:body => '{ "count": 100, "results": [{},{}], "pagination": {} }')
|
33
|
+
r = Response.new(raw_response)
|
34
|
+
|
35
|
+
r.count.should == 2
|
36
|
+
end
|
37
|
+
|
38
|
+
should "return a count of 0 when the response is paginated and the results are empty" do
|
39
|
+
raw_response = mock
|
40
|
+
raw_response.stubs(:body => '{ "count": 100, "results": null, "pagination": {} }')
|
41
|
+
r = Response.new(raw_response)
|
42
|
+
|
43
|
+
r.count.should == 0
|
44
|
+
end
|
45
|
+
|
46
|
+
should "return an array if there are multiple results entries" do
|
47
|
+
r = Response.new('')
|
48
|
+
r.expects(:code).with().returns('200')
|
49
|
+
r.expects(:count).with().returns(2)
|
50
|
+
r.expects(:to_hash).with().returns('results' => %w(one two))
|
51
|
+
|
52
|
+
r.result.should == %w(one two)
|
53
|
+
end
|
54
|
+
|
55
|
+
should "return a single value for results if there is only 1 result" do
|
56
|
+
r = Response.new('')
|
57
|
+
r.expects(:code).with().returns('200')
|
58
|
+
r.expects(:count).with().returns(1)
|
59
|
+
r.expects(:to_hash).with().returns('results' => ['foo'])
|
60
|
+
|
61
|
+
r.result.should == 'foo'
|
62
|
+
end
|
63
|
+
|
64
|
+
should "provide the complete raw body" do
|
65
|
+
raw_response = mock
|
66
|
+
raw_response.stubs(:body => "I am not JSON")
|
67
|
+
r = Response.new(raw_response)
|
68
|
+
|
69
|
+
r.body.should == 'I am not JSON'
|
70
|
+
end
|
71
|
+
|
72
|
+
should "raise an invalid JSON exception if the response is not json" do
|
73
|
+
raw_response = mock
|
74
|
+
raw_response.stubs(:body => "I am not JSON", :code => 500)
|
75
|
+
r = Response.new(raw_response)
|
76
|
+
|
77
|
+
lambda { r.to_hash }.should raise_error(Etsy::EtsyJSONInvalid)
|
78
|
+
lambda { r.to_hash }.should raise_error("CODE: 500, BODY: I am not JSON")
|
79
|
+
end
|
80
|
+
|
81
|
+
should "raise OAuthTokenRevoked" do
|
82
|
+
raw_response = mock
|
83
|
+
raw_response.stubs(:body => "oauth_problem=token_revoked")
|
84
|
+
r = Response.new(raw_response)
|
85
|
+
|
86
|
+
lambda { r.to_hash }.should raise_error(Etsy::OAuthTokenRevoked)
|
87
|
+
end
|
88
|
+
|
89
|
+
should "raise MissingShopID" do
|
90
|
+
raw_response = mock
|
91
|
+
raw_response.stubs(:body => "something Shop with PK shop_id something")
|
92
|
+
r = Response.new(raw_response)
|
93
|
+
|
94
|
+
lambda { r.to_hash }.should raise_error(Etsy::MissingShopID)
|
95
|
+
end
|
96
|
+
|
97
|
+
should "raise InvalidUserID" do
|
98
|
+
raw_response = mock
|
99
|
+
raw_response.stubs(:body => "'someguy' is not a valid user_id")
|
100
|
+
r = Response.new(raw_response)
|
101
|
+
|
102
|
+
lambda { r.to_hash }.should raise_error(Etsy::InvalidUserID)
|
103
|
+
end
|
104
|
+
|
105
|
+
should "raise TemporaryIssue" do
|
106
|
+
raw_response = mock
|
107
|
+
raw_response.stubs(:body => "something Temporary Etsy issue something")
|
108
|
+
r = Response.new(raw_response)
|
109
|
+
|
110
|
+
lambda { r.to_hash }.should raise_error(Etsy::TemporaryIssue)
|
111
|
+
|
112
|
+
raw_response = mock
|
113
|
+
raw_response.stubs(:body => "something Resource temporarily unavailable something")
|
114
|
+
r = Response.new(raw_response)
|
115
|
+
|
116
|
+
lambda { r.to_hash }.should raise_error(Etsy::TemporaryIssue)
|
117
|
+
|
118
|
+
raw_response = mock
|
119
|
+
raw_response.stubs(:body => "something You have exceeded your API limit something")
|
120
|
+
r = Response.new(raw_response)
|
121
|
+
|
122
|
+
lambda { r.to_hash }.should raise_error(Etsy::TemporaryIssue)
|
123
|
+
end
|
124
|
+
|
125
|
+
should "provide the code" do
|
126
|
+
raw_response = mock
|
127
|
+
raw_response.expects(:code => "400")
|
128
|
+
r = Response.new(raw_response)
|
129
|
+
|
130
|
+
r.code.should == '400'
|
131
|
+
end
|
132
|
+
|
133
|
+
should "consider a code of 2xx successful" do
|
134
|
+
raw_response = mock
|
135
|
+
|
136
|
+
raw_response.expects(:code => "200")
|
137
|
+
r = Response.new(raw_response)
|
138
|
+
r.should be_success
|
139
|
+
|
140
|
+
raw_response.expects(:code => "201")
|
141
|
+
r = Response.new(raw_response)
|
142
|
+
r.should be_success
|
143
|
+
end
|
144
|
+
|
145
|
+
should "consider a code of 4xx unsuccessful" do
|
146
|
+
raw_response = mock
|
147
|
+
|
148
|
+
raw_response.expects(:code => "404")
|
149
|
+
r = Response.new(raw_response)
|
150
|
+
r.should_not be_success
|
151
|
+
end
|
152
|
+
|
153
|
+
should "consider a code of 5xx unsuccessful" do
|
154
|
+
raw_response = mock
|
155
|
+
|
156
|
+
raw_response.expects(:code => "500")
|
157
|
+
r = Response.new(raw_response)
|
158
|
+
r.should_not be_success
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
end
|
164
|
+
end
|