tailored-etsy 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|