carousel-ruby-api 0.0.2 → 0.0.3
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 +5 -13
- data/.travis.yml +1 -8
- data/README.md +3 -2
- data/carousel.gemspec +4 -2
- data/lib/carousel/client.rb +11 -2
- data/lib/carousel/order.rb +1 -1
- data/lib/carousel/response.rb +18 -6
- data/lib/carousel/version.rb +1 -1
- data/spec/fixtures/error_order_response.xml +7 -0
- data/spec/fixtures/inventory_request.xml +5 -0
- data/spec/fixtures/success_inventory_response.xml +21 -0
- data/spec/fixtures/success_order_response.xml +7 -0
- data/spec/fixtures/test_address_builder.xml +8 -0
- data/spec/fixtures/test_build_user.xml +3 -0
- data/spec/fixtures/test_line_items.xml +6 -0
- data/spec/fixtures/test_order.xml +29 -0
- data/spec/fixtures/test_request.xml +4 -0
- data/spec/fixtures/test_shipping_address_builder.xml +8 -0
- data/spec/lib/client_spec.rb +246 -50
- data/spec/lib/country_spec.rb +18 -0
- data/spec/lib/inventory_spec.rb +13 -0
- data/spec/lib/order_spec.rb +23 -18
- data/spec/lib/request_spec.rb +27 -0
- data/spec/lib/response_spec.rb +69 -0
- data/spec/lib/shipping_spec.rb +16 -0
- data/spec/lib/tracking_spec.rb +40 -0
- data/spec/logs/spec.log +0 -0
- data/spec/spec_helper.rb +180 -120
- metadata +80 -20
- data/spec/lib/soap_spec.rb +0 -39
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDUzOTJhODViOTUzZDE3MzhhY2FkMmQzMWQ1NjA2MDQ2MmFmOGY4YQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0607f6afe1f613f3d1a4dd544943245a1369622c
|
4
|
+
data.tar.gz: 95e533b637628ccd13dcbfbca702b2bd210b5605
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MDRjOTdiYmE0ODliYzY4NDhkNjMwMWUyNzM4ZmRmNzMyNmU2YTlmNWMzYjE4
|
11
|
-
NDYzZTkwOWY2YjhhMjI1ODlmODMzZWJhZjgwYTE1ZTgwNzI3N2Q=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NjM0MzczY2Q5YjNhMTZkNzYyY2IzYjEzNjlkM2M5OTNkNWI4NTJkZmE4NmU4
|
14
|
-
MzYzNjUyNWU2NDg5NTI0NjFlM2UyMGUwZDQ0OGU4NmViMzk5OTczMjkxMDA1
|
15
|
-
ZjQ4ZGFiNThlMDdhOWUxZGZkNzE5MzgyZjg3OTg1NjZjZWU5ZDk=
|
6
|
+
metadata.gz: 6869340ee67affff0b03f571933e7a974bd4f8e175a64a376d859cd9d5678335fe7de31c8548e82472b205110df91b70594927ae4a9276f7e8b26602245659a0
|
7
|
+
data.tar.gz: 7e2e6c202c7185eaa8eb7ae8c96daa9b19d5fe060765286782962edee818bbb8bde40419b989a2a9836ec7abe16775627f65955ff557cf6c98bc7522a639860a
|
data/.travis.yml
CHANGED
@@ -6,15 +6,8 @@ matrix:
|
|
6
6
|
allow_failures:
|
7
7
|
- rvm: rbx-19mode
|
8
8
|
|
9
|
-
services:
|
10
|
-
- redis
|
11
|
-
|
12
9
|
script:
|
13
|
-
- bundle exec
|
14
|
-
|
15
|
-
# addons:
|
16
|
-
# code_climate:
|
17
|
-
# repo_token: f0884115cadbe82b33756e38a9cd32d5129304746a17126d6c7da02e7a69910a
|
10
|
+
- CODECLIMATE_REPO_TOKEN=09bd983baf4d0c64d97c20a68baecde00cefb3db009a88792f23e3ce5eadf69a bundle exec rspec
|
18
11
|
|
19
12
|
notifications:
|
20
13
|
email:
|
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Carousel
|
2
2
|
|
3
|
-
[](https://travis-ci.org/jGRUBBS/carousel-ruby-api)
|
4
|
+
[](https://codeclimate.com/github/jGRUBBS/carousel-ruby-api)
|
5
|
+
[](https://codeclimate.com/github/jGRUBBS/carousel-ruby-api)
|
5
6
|
|
6
7
|
Ruby library for interfacing with the Carousel Fulfillment API
|
7
8
|
|
data/carousel.gemspec
CHANGED
@@ -19,8 +19,10 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_dependency "builder"
|
20
20
|
spec.add_dependency "xml-simple"
|
21
21
|
|
22
|
-
spec.add_development_dependency "bundler", "~> 1.
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
23
23
|
spec.add_development_dependency "rake"
|
24
24
|
spec.add_development_dependency "rspec"
|
25
|
-
spec.add_development_dependency "
|
25
|
+
spec.add_development_dependency "webmock"
|
26
|
+
spec.add_development_dependency "hashie"
|
27
|
+
spec.add_development_dependency "codeclimate-test-reporter"
|
26
28
|
end
|
data/lib/carousel/client.rb
CHANGED
@@ -11,7 +11,7 @@ module Carousel
|
|
11
11
|
PORT = 443
|
12
12
|
KEYS_MAP = { "stockid" => "upc" }
|
13
13
|
|
14
|
-
attr_accessor :username, :password, :response, :type, :request_uri, :path
|
14
|
+
attr_accessor :username, :password, :options, :response, :type, :request_uri, :path
|
15
15
|
|
16
16
|
def initialize(username, password, options = {})
|
17
17
|
raise "Username is required" unless username
|
@@ -30,7 +30,16 @@ module Carousel
|
|
30
30
|
def get_inventory
|
31
31
|
request = Inventory.new(self).build_inventory_request
|
32
32
|
@path = build_path(Inventory::PATH)
|
33
|
-
|
33
|
+
inventory_response(request)
|
34
|
+
end
|
35
|
+
|
36
|
+
# gets the raw inventory response from the provider
|
37
|
+
# then converts provider specific language to match
|
38
|
+
# a uniform API, stored on @response, and returns
|
39
|
+
def inventory_response(request)
|
40
|
+
response = post(request)
|
41
|
+
response.response = map_results(response.response['stock'])
|
42
|
+
response
|
34
43
|
end
|
35
44
|
|
36
45
|
def order_request(order)
|
data/lib/carousel/order.rb
CHANGED
@@ -13,7 +13,7 @@ module Carousel
|
|
13
13
|
xml.customerref order[:number]
|
14
14
|
xml.ordernumber order[:number]
|
15
15
|
xml.shippingmethod Shipping.map(order[:shipping_method])
|
16
|
-
xml.giftnote order[:gift_message]
|
16
|
+
xml.giftnote order[:gift_message] unless order[:gift_message].nil?
|
17
17
|
|
18
18
|
build_address xml, order[:shipping_address], :shipping
|
19
19
|
build_address xml, order[:billing_address], :billing
|
data/lib/carousel/response.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Carousel
|
2
2
|
class Response
|
3
3
|
|
4
|
-
attr_accessor :response
|
4
|
+
attr_accessor :response, :raw_response
|
5
5
|
|
6
6
|
def initialize(raw_response, type)
|
7
7
|
@raw_response = raw_response
|
@@ -14,14 +14,26 @@ module Carousel
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def success?
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
status == "OK"
|
18
|
+
end
|
19
|
+
|
20
|
+
def status
|
21
|
+
if @kind == "stock"
|
22
|
+
@response.first["status"]
|
23
|
+
else
|
24
|
+
@response[@kind][0]["status"][0]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def message
|
29
|
+
@response["order"][0]["details"][0]
|
20
30
|
end
|
21
31
|
|
22
32
|
def parse_response(xml_response)
|
23
|
-
return nil if xml_response.
|
24
|
-
XmlSimple.xml_in(xml_response)
|
33
|
+
return nil if xml_response.nil?
|
34
|
+
parsed = XmlSimple.xml_in(xml_response)
|
35
|
+
@kind = parsed.first[0]
|
36
|
+
parsed
|
25
37
|
end
|
26
38
|
|
27
39
|
end
|
data/lib/carousel/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<stocklines>
|
3
|
+
<stock>
|
4
|
+
<stockid>1000000003642</stockid>
|
5
|
+
<qty>3</qty>
|
6
|
+
<status>OK</status>
|
7
|
+
<details/>
|
8
|
+
</stock>
|
9
|
+
<stock>
|
10
|
+
<stockid>1000000003659</stockid>
|
11
|
+
<qty>2</qty>
|
12
|
+
<status>OK</status>
|
13
|
+
<details/>
|
14
|
+
</stock>
|
15
|
+
<stock>
|
16
|
+
<stockid>1000000003666</stockid>
|
17
|
+
<qty>2</qty>
|
18
|
+
<status>OK</status>
|
19
|
+
<details/>
|
20
|
+
</stock>
|
21
|
+
</stocklines>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<name>Stephen Jones</name>
|
3
|
+
<addressline1>23 Victoria Street</addressline1>
|
4
|
+
<addressline2></addressline2>
|
5
|
+
<towncity>Windsor</towncity>
|
6
|
+
<postcode>SL4 1HE</postcode>
|
7
|
+
<country>UK</country>
|
8
|
+
<contactphone>0123 336 6676</contactphone>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<orders>
|
3
|
+
<order>
|
4
|
+
<user>the_username</user>
|
5
|
+
<password>the_password</password>
|
6
|
+
<customerref>123456</customerref>
|
7
|
+
<ordernumber>123456</ordernumber>
|
8
|
+
<shippingmethod>ECONOMY</shippingmethod>
|
9
|
+
<name>Stephen Jones</name>
|
10
|
+
<addressline1>23 Victoria Street</addressline1>
|
11
|
+
<addressline2></addressline2>
|
12
|
+
<towncity>Windsor</towncity>
|
13
|
+
<postcode>SL4 1HE</postcode>
|
14
|
+
<country>UK</country>
|
15
|
+
<contactphone>0123 336 6676</contactphone>
|
16
|
+
<invname>Stephen Jones</invname>
|
17
|
+
<invaddressline1>23 Victoria Street</invaddressline1>
|
18
|
+
<invaddressline2></invaddressline2>
|
19
|
+
<invtowncity>Windsor</invtowncity>
|
20
|
+
<invpostcode>SL4 1HE</invpostcode>
|
21
|
+
<invcountry>UK</invcountry>
|
22
|
+
<invcontactphone>0123 336 6676</invcontactphone>
|
23
|
+
<orderline number="123456">
|
24
|
+
<ordernumber>123456</ordernumber>
|
25
|
+
<sku>100083</sku>
|
26
|
+
<qty>2</qty>
|
27
|
+
</orderline>
|
28
|
+
</order>
|
29
|
+
</orders>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<invname>Stephen Jones</invname>
|
3
|
+
<invaddressline1>23 Victoria Street</invaddressline1>
|
4
|
+
<invaddressline2></invaddressline2>
|
5
|
+
<invtowncity>Windsor</invtowncity>
|
6
|
+
<invpostcode>SL4 1HE</invpostcode>
|
7
|
+
<invcountry>UK</invcountry>
|
8
|
+
<invcontactphone>0123 336 6676</invcontactphone>
|
data/spec/lib/client_spec.rb
CHANGED
@@ -1,94 +1,290 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Carousel::Client do
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
let(:username) { "the_username" }
|
6
|
+
let(:password) { "the_password" }
|
7
|
+
let(:options) { { verbose: true, test_mode: true } }
|
8
|
+
let(:client) { Carousel::Client.new(username, password, options) }
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
it 'sets the @username, @password and @options' do
|
12
|
+
expect(client.username).to eq(username)
|
13
|
+
expect(client.password).to eq(password)
|
14
|
+
expect(client.options).to eq(options)
|
15
|
+
end
|
6
16
|
end
|
7
17
|
|
8
18
|
describe '#send_order_request' do
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
19
|
+
|
20
|
+
let(:success_response) { read_xml(:success_order_response) }
|
21
|
+
let(:error_response) { read_xml(:error_order_response) }
|
22
|
+
let(:response) { client.send_order_request(order_hash) }
|
23
|
+
|
24
|
+
it 'parses a success response' do
|
25
|
+
stub_post("action=order").to_return(body: success_response)
|
26
|
+
expect(response.success?).to eq(true)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'parses an error response' do
|
30
|
+
stub_post("action=order").to_return(body: error_response)
|
31
|
+
expect(response.success?).to eq(false)
|
32
|
+
expect(response.message).to eq('Bad postcode')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'inventory methods' do
|
37
|
+
|
38
|
+
let(:success_response) { read_xml(:success_inventory_response) }
|
39
|
+
let(:response) { client.get_inventory }
|
40
|
+
let(:expected_upcs) { ['1000000003642', '1000000003659', '1000000003666'] }
|
41
|
+
let(:expected_qtys) { ['3', '2', '2'] }
|
42
|
+
let(:raw_xml) { read_xml(:inventory_request) }
|
43
|
+
|
44
|
+
before do
|
45
|
+
stub_post("action=stocklines").with(body: raw_xml, headers: xml_headers)
|
46
|
+
.to_return(body: success_response)
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#get_inventory' do
|
50
|
+
|
51
|
+
it 'parses success response and maps results to simple array of stock hashes' do
|
52
|
+
expect(response.response.collect{ |s| s["upc"] }).to eq(expected_upcs)
|
53
|
+
expect(response.response.collect{ |s| s["qty"] }).to eq(expected_qtys)
|
54
|
+
expect(response.success?).to eq(true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#inventory_response' do
|
59
|
+
|
60
|
+
it 'gets the raw inventory response from the provider' do
|
61
|
+
expect(response.raw_response).to eq(success_response)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'converts provider specific language to match a uniform API' do
|
65
|
+
original_response = client.send(:parse_response, success_response).response["stock"]
|
66
|
+
expect(original_response.first.keys).to include('stockid')
|
67
|
+
expect(response.response.first.keys).to include('upc')
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'returns a response' do
|
71
|
+
expect(response).to be_a(Carousel::Response)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#order_request' do
|
79
|
+
it 'sets the path instance variable' do
|
80
|
+
client.order_request(order_hash)
|
81
|
+
expect(client.instance_variable_get(:@path)).to eq("/carouselwms/default.asp?action=order")
|
82
|
+
end
|
83
|
+
it 'returns a built request for Order' do
|
84
|
+
order_xml = read_xml(:test_order)
|
85
|
+
expect(client.order_request(order_hash)).to eq(order_xml)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#build_path' do
|
90
|
+
it 'builds and returns the uri path' do
|
91
|
+
expect(client).to receive(:env_path).and_return("carouselwms")
|
92
|
+
expect(client.build_path("?action=stocklines")).to eq("/carouselwms/default.asp?action=stocklines")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#upcs' do
|
97
|
+
it 'returns an array of the collected upcs' do
|
98
|
+
inventory = [{"upc" => "123"}, {"upc" => "123456"}]
|
99
|
+
expect(client.upcs(inventory)).to eq(["123", "123456"])
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#mapped_inventory' do
|
104
|
+
it 'converts provider specific terms into a uniform API' do
|
105
|
+
inventory = [{"upc" => "123", "qty" => "3"}, {"upc" => "123456", "qty" => "0"}]
|
106
|
+
upcs = ["123"]
|
107
|
+
expect(client.mapped_inventory(upcs, inventory)).to eq([{quantity: 3}])
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#request_uri' do
|
112
|
+
it 'returns the request uri based on host and path' do
|
113
|
+
client.path = "?action=stocklines"
|
114
|
+
expect(client.request_uri).to eq("https://web.carousel.eu?action=stocklines")
|
13
115
|
end
|
14
116
|
end
|
15
117
|
|
16
118
|
describe 'private#default_options' do
|
17
|
-
it '
|
18
|
-
|
119
|
+
it 'returns the default options for a Client' do
|
120
|
+
default_options = {
|
121
|
+
verbose: true,
|
122
|
+
test_mode: false
|
123
|
+
}
|
124
|
+
expect(client.send(:default_options)).to eq(default_options)
|
19
125
|
end
|
20
126
|
end
|
21
127
|
|
22
128
|
describe 'private#testing?' do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
129
|
+
context 'not in testing mode' do
|
130
|
+
it 'returns false' do
|
131
|
+
client.options[:test_mode] = false
|
132
|
+
expect(client.send(:testing?)).to eq(false)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
context 'in testing mode' do
|
136
|
+
it 'returns true' do
|
137
|
+
expect(client.send(:testing?)).to eq(true)
|
138
|
+
end
|
27
139
|
end
|
28
140
|
end
|
29
141
|
|
30
142
|
describe 'private#verbose?' do
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
143
|
+
context 'not in verbose mode' do
|
144
|
+
it 'returns false' do
|
145
|
+
client.options[:verbose] = false
|
146
|
+
expect(client.send(:verbose?)).to eq(false)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
context 'in verbose mode' do
|
150
|
+
it 'returns true' do
|
151
|
+
expect(client.send(:verbose?)).to eq(true)
|
152
|
+
end
|
35
153
|
end
|
36
154
|
end
|
37
155
|
|
38
|
-
describe 'private#
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
156
|
+
describe 'private#env_path' do
|
157
|
+
context 'not in testing mode' do
|
158
|
+
it 'returns the LIVE_PATH' do
|
159
|
+
client.options[:test_mode] = false
|
160
|
+
expect(client.send(:env_path)).to eq(Carousel::Client::LIVE_PATH)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
context 'in testing mode' do
|
164
|
+
it 'returns TEST_PATH' do
|
165
|
+
expect(client.send(:env_path)).to eq(Carousel::Client::TEST_PATH)
|
166
|
+
end
|
44
167
|
end
|
45
168
|
end
|
46
169
|
|
47
|
-
describe 'private#
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
170
|
+
describe 'private#host' do
|
171
|
+
context 'not in testing mode' do
|
172
|
+
it 'returns the LIVE_PATH' do
|
173
|
+
client.options[:test_mode] = false
|
174
|
+
expect(client.send(:host)).to eq(Carousel::Client::LIVE_HOST)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
context 'in testing mode' do
|
178
|
+
it 'returns TEST_PATH' do
|
179
|
+
expect(client.send(:host)).to eq(Carousel::Client::TEST_HOST)
|
180
|
+
end
|
53
181
|
end
|
54
182
|
end
|
55
183
|
|
56
184
|
describe 'private#log' do
|
185
|
+
before do
|
186
|
+
@message = "test"
|
187
|
+
end
|
57
188
|
context 'not in verbose mode' do
|
58
|
-
it '
|
59
|
-
|
60
|
-
@client.should_not_receive(:puts)
|
61
|
-
@client.send(:log, "message")
|
189
|
+
it 'returns nil' do
|
190
|
+
expect(client.send(:log, @message)).to eq(nil)
|
62
191
|
end
|
63
192
|
end
|
64
193
|
context 'in verbose mode' do
|
65
|
-
it '
|
66
|
-
|
67
|
-
|
68
|
-
|
194
|
+
it 'logs the message to STDOUT' do
|
195
|
+
client.options[:verbose] = true
|
196
|
+
output = capture_stdout { client.send(:log, @message) }
|
197
|
+
expect(output).to eq("test\n")
|
69
198
|
end
|
70
199
|
end
|
71
200
|
end
|
72
201
|
|
202
|
+
describe 'private#http' do
|
203
|
+
it 'returns an instance of Net::HTTP' do
|
204
|
+
http = client.send(:http)
|
205
|
+
host = client.send(:host)
|
206
|
+
expect(http).to be_an_instance_of(Net::HTTP)
|
207
|
+
expect(http.address).to eq(host)
|
208
|
+
expect(http.port).to eq(Carousel::Client::PORT)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe 'private#request' do
|
213
|
+
|
214
|
+
let(:success_response) { read_xml(:success_inventory_response) }
|
215
|
+
let(:request) { read_xml(:inventory_request) }
|
216
|
+
|
217
|
+
it 'sets the ssl and verify mode, sends an http request, and returns a response object' do
|
218
|
+
client.path = "?action=stocklines"
|
219
|
+
expect(client.send(:http)).to receive(:request).and_return(success_response)
|
220
|
+
expect(client.send(:request, request)).to eq(success_response)
|
221
|
+
expect(client.send(:http).use_ssl?).to be(true)
|
222
|
+
expect(client.send(:http).verify_mode).to eq(OpenSSL::SSL::VERIFY_NONE)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
73
226
|
describe 'private#post' do
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
227
|
+
let(:request) { read_xml(:inventory_request) }
|
228
|
+
let(:response) { read_xml(:success_inventory_response) }
|
229
|
+
|
230
|
+
before do
|
231
|
+
client.path = "?action=stocklines"
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'sends a post request' do
|
235
|
+
expect(client).to receive(:request).and_return(fake_response)
|
236
|
+
client.send(:post, request)
|
237
|
+
end
|
238
|
+
it 'parses response into a Carousel::Response object' do
|
239
|
+
expect(client).to receive(:request).and_return(fake_response)
|
240
|
+
expect(client.send(:post, request)).to be_a(Carousel::Response)
|
83
241
|
end
|
84
242
|
end
|
85
243
|
|
86
244
|
describe 'private#parse_response' do
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
245
|
+
let(:response) { read_xml(:success_inventory_response) }
|
246
|
+
|
247
|
+
it 'logs the response' do
|
248
|
+
client.options[:verbose] = true
|
249
|
+
expect(client).to receive(:log).with(response)
|
250
|
+
client.send(:parse_response, response)
|
251
|
+
end
|
252
|
+
|
253
|
+
it 'parses response into a Carousel::Response object' do
|
254
|
+
expect(client.send(:parse_response, response)).to be_a(Carousel::Response)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
describe 'private#map_results' do
|
259
|
+
it 'flattens the results and maps them' do
|
260
|
+
results = [{test: [1,2,3]}, {example: [2,3,4]}, {test: [1,2,3], stockid: [5,6,7,8]}]
|
261
|
+
expected_result = [{test: 1}, {example: 2}, {test: 1, stockid: 5}]
|
262
|
+
|
263
|
+
expect(client).to receive(:flatten_results).and_return(expected_result)
|
264
|
+
expect(client.send(:map_results, results)).to eq(expected_result)
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe 'private#flatten_results' do
|
269
|
+
it 'sets the value for each hash key to the first item in the value array' do
|
270
|
+
results = [{test: [1,2,3]}, {example: [2,3,4]}, {test: [1,2,3], example: [5,6,7,8]}]
|
271
|
+
expected_result = [{test: 1}, {example: 2}, {test: 1, example: 5}]
|
272
|
+
expect(client.send(:flatten_results, results)).to eq(expected_result)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
describe 'private#map_keys' do
|
277
|
+
context 'with a key in the KEYS_MAP' do
|
278
|
+
it 'returns the value for the given key' do
|
279
|
+
key = "stockid"
|
280
|
+
expect(client.send(:map_keys, key)).to eq(Carousel::Client::KEYS_MAP[key])
|
281
|
+
end
|
282
|
+
end
|
283
|
+
context 'without a key in the KEYS_MAP' do
|
284
|
+
it 'returns the key' do
|
285
|
+
key = "test"
|
286
|
+
expect(client.send(:map_keys, key)).to eq(key)
|
287
|
+
end
|
92
288
|
end
|
93
289
|
end
|
94
290
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Carousel::Country do
|
4
|
+
|
5
|
+
|
6
|
+
describe '.map' do
|
7
|
+
context 'with the code in the COUNTRY_MAP' do
|
8
|
+
it 'returns the value for the given code' do
|
9
|
+
expect(Carousel::Country.map("US")).to eq("US")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
context 'without the code in the COUNTRY_MAP' do
|
13
|
+
it 'returns the given code' do
|
14
|
+
expect(Carousel::Country.map("AAA")).to eq("AAA")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Carousel::Inventory do
|
4
|
+
|
5
|
+
let(:client) { Carousel::Client.new("the_username", "the_password") }
|
6
|
+
let(:inventory_request) { Carousel::Inventory.new(client) }
|
7
|
+
|
8
|
+
describe '#build_inventory_request' do
|
9
|
+
it 'constructs xml for the user' do
|
10
|
+
expect(inventory_request.build_inventory_request).to eq(read_xml(:inventory_request))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|