mad_cart 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -0
- data/lib/mad_cart/store/base.rb +2 -0
- data/lib/mad_cart/version.rb +1 -1
- data/spec/lib/configuration_spec.rb +7 -11
- data/spec/lib/mad_cart_spec.rb +12 -12
- data/spec/lib/model/base_spec.rb +12 -12
- data/spec/lib/model/customer_spec.rb +6 -9
- data/spec/lib/model/product_spec.rb +6 -7
- data/spec/lib/store/base_spec.rb +24 -22
- data/spec/lib/store/big_commerce_spec.rb +25 -38
- data/spec/lib/store/etsy_spec.rb +17 -27
- data/spec/lib/store/o_auth_big_commerce_spec.rb +1 -1
- data/spec/lib/store/spree_spec.rb +21 -28
- data/spec/spec_helper.rb +0 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b414baa5cd556c5664acb0daf217ee9e41d9489
|
4
|
+
data.tar.gz: 1e64b3d30bb94d163532c25cfcc11d8773effc7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2341f979b1f6f50db08f1077574a521c40e877087431d130eb552c6b0098ed35f08598b2c81b1bcbd2a05b23d6ddf7eb3dfa473bb1d2518d8f53095c6645cb16
|
7
|
+
data.tar.gz: c8491b179797a5e7fc17aa4e3427353a0a38235e7f79f3bdf6c9aad615a2157d907ade75330528db96f1fc522f51cb8dd346cfb47fc93343c2b75ab1e63781f4
|
data/.travis.yml
ADDED
data/lib/mad_cart/store/base.rb
CHANGED
data/lib/mad_cart/version.rb
CHANGED
@@ -8,9 +8,8 @@ describe "configuration" do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "stores" do
|
11
|
-
|
12
11
|
it "does not require store to be added if credentials are passed to constructor" do
|
13
|
-
|
12
|
+
expect { MadCart::Store::BigCommerce.new({:api_key => 'a_fake_key', :store_url => '/path/to/store', :username => 'bob'}) }.not_to raise_error
|
14
13
|
end
|
15
14
|
|
16
15
|
it "allows config values to be set for a store" do
|
@@ -19,24 +18,23 @@ describe "configuration" do
|
|
19
18
|
config.add_store :big_commerce, config_data
|
20
19
|
end
|
21
20
|
|
22
|
-
MadCart.config.big_commerce.
|
21
|
+
expect(MadCart.config.big_commerce).to eql(config_data)
|
23
22
|
end
|
24
23
|
|
25
24
|
it "gives returns nil if there's no config" do
|
26
|
-
MadCart.config.missing_store.
|
25
|
+
expect(MadCart.config.missing_store).to be_nil
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
28
|
|
31
29
|
describe "models" do
|
32
30
|
it "allows custom attribute names to be set" do
|
33
|
-
|
31
|
+
expect {
|
34
32
|
MadCart.configure do |config|
|
35
33
|
config.attribute_map :products, {"name" => "title"}
|
36
34
|
end
|
37
|
-
}.
|
35
|
+
}.not_to raise_error
|
38
36
|
|
39
|
-
MadCart.config.attribute_maps["products"].
|
37
|
+
expect(MadCart.config.attribute_maps["products"]).to eql({"name" => "title"})
|
40
38
|
end
|
41
39
|
|
42
40
|
it "allows additional attributes to be included in models" do
|
@@ -44,9 +42,7 @@ describe "configuration" do
|
|
44
42
|
config.include_attributes :products => [:external_id, :url]
|
45
43
|
end
|
46
44
|
|
47
|
-
MadCart.config.included_attributes[:products].
|
45
|
+
expect(MadCart.config.included_attributes[:products]).to eql([:external_id, :url])
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|
data/spec/lib/mad_cart_spec.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe MadCart do
|
4
|
-
|
4
|
+
|
5
5
|
it "allows configuration" do
|
6
6
|
MadCart.configure do |config|
|
7
|
-
config.
|
8
|
-
config.
|
7
|
+
expect(config).to be_a(MadCart::Configuration)
|
8
|
+
expect(config).to be_a(Singleton)
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it "provides config values" do
|
13
|
-
MadCart.config.
|
13
|
+
expect(MadCart.config).to be_a(MadCart::Configuration::Data)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "complains when the #config getter is used to set config values" do
|
17
|
-
|
17
|
+
expect {
|
18
18
|
MadCart.config {|config| config.add_store :big_commerce }
|
19
|
-
|
19
|
+
}.to raise_error(ArgumentError, "MadCart.config does not support blocks. Use MadCart.configure to set config values.")
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
it "complains if #configure is used incorrectly" do
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
23
|
+
expect { MadCart.configure }.to raise_error(ArgumentError, "MadCart.configure requires a block argument.")
|
24
|
+
end
|
25
|
+
end
|
data/spec/lib/model/base_spec.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe MadCart::Store::Base do
|
4
|
+
|
4
5
|
before(:each) do
|
5
6
|
clear_config
|
6
7
|
Object.send(:remove_const, :MyModel) if Object.const_defined?(:MyModel)
|
@@ -15,35 +16,34 @@ describe MadCart::Store::Base do
|
|
15
16
|
MadCart.configure do |config|
|
16
17
|
config.include_attributes :my_models => [:external_id, :url]
|
17
18
|
end
|
18
|
-
|
19
|
+
|
19
20
|
o = MyModel.new(:name => 'whiskey', :description => 'tasty', :external_id => 2, :url => 'path/to/whiskey', :discarded => 'property')
|
20
|
-
o.attributes.
|
21
|
+
expect(o.attributes).to eql({"name" => 'whiskey', "description" => 'tasty', "external_id" => 2, "url" => 'path/to/whiskey'})
|
21
22
|
end
|
22
|
-
|
23
|
+
|
23
24
|
it "includes mapped attributes" do
|
24
25
|
MadCart.configure do |config|
|
25
26
|
config.attribute_map :my_models, :old_name => :new_name
|
26
27
|
end
|
27
|
-
|
28
|
+
|
28
29
|
o = MyModel.new(:name => 'whiskey', :description => 'tasty', :discarded => 'property', :old_name => 'is included')
|
29
|
-
o.attributes.
|
30
|
+
expect(o.attributes).to eql({"name" => 'whiskey', "description" => 'tasty', "new_name" => 'is included'})
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
it "allows two sources to map to the same model" do
|
33
34
|
MadCart.configure do |config|
|
34
35
|
config.include_attributes :my_models => [:external_id]
|
35
36
|
config.attribute_map :my_models, :id => :external_id
|
36
37
|
end
|
37
|
-
|
38
|
+
|
38
39
|
source_a = {:name => 'whiskey', :description => 'tasty', :discarded => 'property', :id => 'has been renamed'}
|
39
40
|
source_b = {:name => 'whiskey', :description => 'tasty', :discarded => 'property', :external_id => 'is included'}
|
40
|
-
|
41
|
+
|
41
42
|
model_a = MyModel.new(source_a)
|
42
|
-
model_a.attributes.
|
43
|
-
|
43
|
+
expect(model_a.attributes).to eql({"name" => 'whiskey', "description" => 'tasty', "external_id" => 'has been renamed'})
|
44
|
+
|
44
45
|
model_b = MyModel.new(source_b)
|
45
|
-
model_b.attributes.
|
46
|
+
expect(model_b.attributes).to eql({"name" => 'whiskey', "description" => 'tasty', "external_id" => 'is included'})
|
46
47
|
end
|
47
48
|
end
|
48
|
-
|
49
49
|
end
|
@@ -10,7 +10,7 @@ describe MadCart::Model::Customer do
|
|
10
10
|
attrs = {"first_name" => 'Bob', "last_name" => 'Sagat', "email" => 'bob@sagat.com'}
|
11
11
|
c = MadCart::Model::Customer.new(attrs)
|
12
12
|
|
13
|
-
c.attributes.
|
13
|
+
expect(c.attributes).to eql(attrs)
|
14
14
|
end
|
15
15
|
|
16
16
|
it "allows attributes to be overwritten" do
|
@@ -20,17 +20,16 @@ describe MadCart::Model::Customer do
|
|
20
20
|
|
21
21
|
c = MadCart::Model::Customer.new(:first_name => 'Bob', :last_name => 'Sagat', :email => 'bob@sagat.com')
|
22
22
|
|
23
|
-
c.attributes.
|
23
|
+
expect(c.attributes).to eql({"name" => 'Bob', "last_name" => 'Sagat', "email" => 'bob@sagat.com'})
|
24
24
|
end
|
25
25
|
|
26
26
|
it "exposes all additional attributes provided by the api" do
|
27
27
|
c = MadCart::Model::Customer.new("first_name" => 'Bob', "last_name" => 'Sagat', "email" => 'bob@sagat.com', "with" => 'some', "additional" => 'fields' )
|
28
28
|
|
29
|
-
c.additional_attributes.
|
29
|
+
expect(c.additional_attributes).to eql({"with" => 'some', "additional" => 'fields'})
|
30
30
|
end
|
31
31
|
|
32
32
|
describe "validation" do
|
33
|
-
|
34
33
|
before(:each) do
|
35
34
|
@args = {:first_name => 'first_name',
|
36
35
|
:last_name => 'last_name',
|
@@ -40,19 +39,17 @@ describe MadCart::Model::Customer do
|
|
40
39
|
|
41
40
|
it "requires first_name" do
|
42
41
|
@args.delete(:first_name)
|
43
|
-
|
42
|
+
expect { MadCart::Model::Customer.new(@args) }.to raise_error(ArgumentError)
|
44
43
|
end
|
45
44
|
|
46
45
|
it "requires last_name" do
|
47
46
|
@args.delete(:last_name)
|
48
|
-
|
47
|
+
expect { MadCart::Model::Customer.new(@args) }.to raise_error(ArgumentError)
|
49
48
|
end
|
50
49
|
|
51
50
|
it "requires email" do
|
52
51
|
@args.delete(:email)
|
53
|
-
|
52
|
+
expect { MadCart::Model::Customer.new(@args) }.to raise_error(ArgumentError)
|
54
53
|
end
|
55
|
-
|
56
54
|
end
|
57
|
-
|
58
55
|
end
|
@@ -15,7 +15,7 @@ describe MadCart::Model::Product do
|
|
15
15
|
|
16
16
|
c = MadCart::Model::Product.new(default_attrs.merge(extra_attrs))
|
17
17
|
|
18
|
-
c.attributes.
|
18
|
+
expect(c.attributes).to eql(default_attrs)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "allows attribute names to be overwritten" do
|
@@ -29,7 +29,7 @@ describe MadCart::Model::Product do
|
|
29
29
|
|
30
30
|
c = MadCart::Model::Product.new(attrs.merge(:name => "product name", :square_image_url => 'path/to/square/image'))
|
31
31
|
|
32
|
-
c.attributes.
|
32
|
+
expect(c.attributes).to eql(attrs.merge("title" => "product name",
|
33
33
|
"thumbnail" => 'path/to/square/image'))
|
34
34
|
end
|
35
35
|
|
@@ -39,11 +39,10 @@ describe MadCart::Model::Product do
|
|
39
39
|
|
40
40
|
c = MadCart::Model::Product.new(attrs.merge(:with => 'some', :additional => 'fields'))
|
41
41
|
|
42
|
-
c.additional_attributes.
|
42
|
+
expect(c.additional_attributes).to eql({"with" => 'some', "additional" => 'fields'})
|
43
43
|
end
|
44
44
|
|
45
45
|
describe "validation" do
|
46
|
-
|
47
46
|
before(:each) do
|
48
47
|
@args = {:name => 'name',
|
49
48
|
:external_id => 'external_id',
|
@@ -58,17 +57,17 @@ describe MadCart::Model::Product do
|
|
58
57
|
|
59
58
|
it "requires name" do
|
60
59
|
@args.delete(:name)
|
61
|
-
|
60
|
+
expect { MadCart::Model::Product.new(@args) }.to raise_error(ArgumentError)
|
62
61
|
end
|
63
62
|
|
64
63
|
it "requires description" do
|
65
64
|
@args.delete(:description)
|
66
|
-
|
65
|
+
expect { MadCart::Model::Product.new(@args) }.to raise_error(ArgumentError)
|
67
66
|
end
|
68
67
|
|
69
68
|
it "requires image_url" do
|
70
69
|
@args.delete(:image_url)
|
71
|
-
|
70
|
+
expect { MadCart::Model::Product.new(@args) }.to raise_error(ArgumentError)
|
72
71
|
end
|
73
72
|
end
|
74
73
|
end
|
data/spec/lib/store/base_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe MadCart::Store::Base do
|
|
9
9
|
|
10
10
|
describe "connection" do
|
11
11
|
it "adds a create_connection_with method" do
|
12
|
-
MyStore.
|
12
|
+
expect(MyStore).to respond_to(:create_connection_with)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "accepts a method reference" do
|
@@ -21,7 +21,7 @@ describe MadCart::Store::Base do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
MyStore.new.connection.
|
24
|
+
expect(MyStore.new.connection).to eql(TestResult)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "accepts a proc" do
|
@@ -29,7 +29,7 @@ describe MadCart::Store::Base do
|
|
29
29
|
create_connection_with Proc.new {|args| TestResult }
|
30
30
|
end
|
31
31
|
|
32
|
-
MyStore.new.connection.
|
32
|
+
expect(MyStore.new.connection).to eql(TestResult)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "raises an error if any required connection arguments are not present" do
|
@@ -37,7 +37,9 @@ describe MadCart::Store::Base do
|
|
37
37
|
create_connection_with Proc.new { }, :requires => [:api_key, :username]
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
expect {
|
41
|
+
MyStore.new(:api_key => 'key').connection
|
42
|
+
}.to raise_error(ArgumentError, "Missing connection arguments: username")
|
41
43
|
end
|
42
44
|
|
43
45
|
it "retrieves configured connection arguments" do
|
@@ -49,7 +51,7 @@ describe MadCart::Store::Base do
|
|
49
51
|
config.add_store :my_store, {:several => 'of', :args => 'yes?'}
|
50
52
|
end
|
51
53
|
|
52
|
-
|
54
|
+
expect { MyStore.new().connection }.not_to raise_error
|
53
55
|
end
|
54
56
|
|
55
57
|
it "retrieves a combination of configured and initialised connection arguments" do
|
@@ -61,13 +63,13 @@ describe MadCart::Store::Base do
|
|
61
63
|
config.add_store :my_store, {:several => 'only'}
|
62
64
|
end
|
63
65
|
|
64
|
-
|
66
|
+
expect { MyStore.new(:args => 'too').connection }.not_to raise_error
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
68
70
|
describe "fetch" do
|
69
71
|
it "adds a fetch method" do
|
70
|
-
MyStore.
|
72
|
+
expect(MyStore).to respond_to(:fetch)
|
71
73
|
end
|
72
74
|
|
73
75
|
it "accepts a method reference" do
|
@@ -80,8 +82,8 @@ describe MadCart::Store::Base do
|
|
80
82
|
end
|
81
83
|
|
82
84
|
result = double(MadCart::Model::Product)
|
83
|
-
MadCart::Model::Product.
|
84
|
-
MyStore.new.products.
|
85
|
+
expect(MadCart::Model::Product).to receive(:new).with({:some => 'attrs'}).and_return(result)
|
86
|
+
expect(MyStore.new.products).to eql([result])
|
85
87
|
end
|
86
88
|
|
87
89
|
it "accepts a proc" do
|
@@ -90,8 +92,8 @@ describe MadCart::Store::Base do
|
|
90
92
|
end
|
91
93
|
|
92
94
|
result = double(MadCart::Model::Product)
|
93
|
-
MadCart::Model::Product.
|
94
|
-
MyStore.new.products.
|
95
|
+
expect(MadCart::Model::Product).to receive(:new).twice.with({:some => 'attrs'}).and_return(result)
|
96
|
+
expect(MyStore.new.products).to eql([result, result])
|
95
97
|
end
|
96
98
|
|
97
99
|
it "converts hashes into instances of the mad cart model" do
|
@@ -102,7 +104,7 @@ describe MadCart::Store::Base do
|
|
102
104
|
fetch :products, :with => Proc.new { [attrs, attrs] }
|
103
105
|
end
|
104
106
|
|
105
|
-
MyStore.new.products.each{|p| p.
|
107
|
+
MyStore.new.products.each { |p| expect(p).to be_a(MadCart::Model::Product) }
|
106
108
|
end
|
107
109
|
|
108
110
|
it "returns instances of the mad cart model if the fetch method returns them" do
|
@@ -113,7 +115,7 @@ describe MadCart::Store::Base do
|
|
113
115
|
fetch :products, :with => Proc.new { [MadCart::Model::Product.new(attrs), MadCart::Model::Product.new(attrs)] }
|
114
116
|
end
|
115
117
|
|
116
|
-
MyStore.new.products.each{|p| p.
|
118
|
+
MyStore.new.products.each { |p| expect(p).to be_a(MadCart::Model::Product) }
|
117
119
|
end
|
118
120
|
|
119
121
|
it "returns instances of the mad cart model if the format method returns them" do
|
@@ -125,7 +127,7 @@ describe MadCart::Store::Base do
|
|
125
127
|
format :products, :with => Proc.new {|p| MadCart::Model::Product.new(p) }
|
126
128
|
end
|
127
129
|
|
128
|
-
MyStore.new.products.each{|p| p.
|
130
|
+
MyStore.new.products.each { |p| expect(p).to be_a(MadCart::Model::Product) }
|
129
131
|
end
|
130
132
|
|
131
133
|
it "can be configured to retrieve additional attributes" do
|
@@ -141,7 +143,7 @@ describe MadCart::Store::Base do
|
|
141
143
|
|
142
144
|
describe "format" do
|
143
145
|
it "adds a format method" do
|
144
|
-
MyStore.
|
146
|
+
expect(MyStore).to respond_to(:format)
|
145
147
|
end
|
146
148
|
|
147
149
|
it "accepts a method reference" do
|
@@ -155,8 +157,8 @@ describe MadCart::Store::Base do
|
|
155
157
|
end
|
156
158
|
|
157
159
|
store = MyStore.new
|
158
|
-
store.
|
159
|
-
store.
|
160
|
+
expect(store).to receive(:format_method).with(:one => 1).and_return(double(MadCart::Model::Product))
|
161
|
+
allow(store).to receive(:ensure_model_format)
|
160
162
|
store.products
|
161
163
|
end
|
162
164
|
|
@@ -167,7 +169,7 @@ describe MadCart::Store::Base do
|
|
167
169
|
end
|
168
170
|
|
169
171
|
store = MyStore.new
|
170
|
-
store.
|
172
|
+
expect(store).to receive(:ensure_model_format).with(:products, ["1"])
|
171
173
|
store.products
|
172
174
|
end
|
173
175
|
end
|
@@ -183,7 +185,7 @@ describe MadCart::Store::Base do
|
|
183
185
|
end
|
184
186
|
|
185
187
|
o = MyStore.new
|
186
|
-
|
188
|
+
expect { o.connection }.to raise_error(MadCart::Store::SetupError,
|
187
189
|
"It appears MyStore has overrided the default MadCart::Base initialize method. " +
|
188
190
|
"That's fine, but please store any required connection arguments as @init_args " +
|
189
191
|
"for the #connection method to use later. Remember to call #after_initialize " +
|
@@ -193,7 +195,7 @@ describe MadCart::Store::Base do
|
|
193
195
|
|
194
196
|
describe "after_initialize" do
|
195
197
|
it "adds an after_initialize method" do
|
196
|
-
MyStore.
|
198
|
+
expect(MyStore).to respond_to(:after_initialize)
|
197
199
|
end
|
198
200
|
|
199
201
|
it "accepts a method reference" do
|
@@ -210,7 +212,7 @@ describe MadCart::Store::Base do
|
|
210
212
|
end
|
211
213
|
end
|
212
214
|
|
213
|
-
MyStore.new(:connection => TestResult).connection.
|
215
|
+
expect(MyStore.new(:connection => TestResult).connection).to eql(TestResult)
|
214
216
|
end
|
215
217
|
|
216
218
|
it "accepts a proc" do
|
@@ -223,7 +225,7 @@ describe MadCart::Store::Base do
|
|
223
225
|
end
|
224
226
|
end
|
225
227
|
|
226
|
-
TestResult.
|
228
|
+
expect(TestResult).to receive(:new)
|
227
229
|
|
228
230
|
MyStore.new(:connection => TestResult)
|
229
231
|
end
|
@@ -11,85 +11,74 @@ describe MadCart::Store::BigCommerce do
|
|
11
11
|
}
|
12
12
|
|
13
13
|
describe "store" do
|
14
|
-
|
15
14
|
it "expects to be instantiated with an api key, username and store url" do
|
16
|
-
|
17
|
-
|
15
|
+
expect {
|
16
|
+
MadCart::Store::BigCommerce.new(:username => 'test', :store_url => 'test').connection
|
17
|
+
}.to raise_error(ArgumentError)
|
18
|
+
expect {
|
19
|
+
MadCart::Store::BigCommerce.new(:api_key => 'test', :username => 'test', :store_url => 'test').connection
|
20
|
+
}.not_to raise_error
|
18
21
|
end
|
19
22
|
|
20
23
|
it "authenticates via basic auth" do
|
21
|
-
connection =
|
22
|
-
|
23
|
-
|
24
|
-
connection.should_receive(:basic_auth).with('username', 'api_key')
|
25
|
-
|
26
|
-
MadCart::Store::BigCommerce.new(:api_key => 'api_key', :username => 'username', :store_url => 'url').connection
|
24
|
+
connection = MadCart::Store::BigCommerce.new(:api_key => 'api_key', :username => 'username', :store_url => 'url').connection
|
25
|
+
expect(connection.headers['Authorization']).not_to be_nil
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
28
|
|
31
29
|
describe "products" do
|
32
|
-
|
33
30
|
context "retrieval" do
|
34
|
-
|
35
31
|
it "returns products" do
|
36
32
|
VCR.use_cassette('big_commerce_products') do
|
37
33
|
products = subject.products(limit: 10)
|
38
|
-
products.size.
|
34
|
+
expect(products.size).to eql(10)
|
39
35
|
|
40
36
|
first_product = products.first
|
41
|
-
first_product.
|
42
|
-
first_product.name.
|
43
|
-
first_product.description.
|
44
|
-
first_product.image_url.
|
37
|
+
expect(first_product).to be_a(MadCart::Model::Product)
|
38
|
+
expect(first_product.name).not_to be_nil
|
39
|
+
expect(first_product.description).not_to be_nil
|
40
|
+
expect(first_product.image_url).not_to be_nil
|
45
41
|
end
|
46
42
|
end
|
47
43
|
|
48
44
|
it "returns an empty array when there are no products" do
|
49
45
|
VCR.use_cassette('big_commerce_no_records') do
|
50
|
-
subject.products.
|
46
|
+
expect(subject.products).to eql([])
|
51
47
|
end
|
52
48
|
end
|
53
49
|
|
54
|
-
|
55
50
|
it "returns an empty array when there are no images for any products" do
|
56
51
|
VCR.use_cassette('big_commerce_products_no_images') do
|
57
|
-
subject.products.
|
52
|
+
expect(subject.products).to eql([])
|
58
53
|
end
|
59
54
|
end
|
60
|
-
|
61
55
|
end
|
62
56
|
|
63
57
|
context "count" do
|
64
|
-
|
65
58
|
it "returns how many products there are" do
|
66
59
|
VCR.use_cassette('big_commerce_products_count') do
|
67
|
-
subject.products_count.
|
60
|
+
expect(subject.products_count).to eql(45)
|
68
61
|
end
|
69
62
|
end
|
70
|
-
|
71
63
|
end
|
72
|
-
|
73
64
|
end
|
74
65
|
|
75
66
|
describe "customers" do
|
76
67
|
context "retrieval" do
|
77
|
-
|
78
68
|
it "returns all customers" do
|
79
69
|
VCR.use_cassette('big_commerce_customers') do
|
80
70
|
customers = subject.customers
|
81
71
|
|
82
|
-
customers.size.
|
83
|
-
customers.first.
|
72
|
+
expect(customers.size).to be > 0
|
73
|
+
expect(customers.first).to be_a(MadCart::Model::Customer)
|
84
74
|
end
|
85
75
|
end
|
86
76
|
|
87
77
|
it "returns an empty array whern there are no customers" do
|
88
78
|
VCR.use_cassette('big_commerce_no_records') do
|
89
|
-
subject.customers.
|
79
|
+
expect(subject.customers).to eql([])
|
90
80
|
end
|
91
81
|
end
|
92
|
-
|
93
82
|
end
|
94
83
|
end
|
95
84
|
|
@@ -97,17 +86,16 @@ describe MadCart::Store::BigCommerce do
|
|
97
86
|
context "retrieval" do
|
98
87
|
it "returns the store" do
|
99
88
|
VCR.use_cassette('big_commerce_store') do
|
100
|
-
subject.store.
|
89
|
+
expect(subject.store).not_to be_nil
|
101
90
|
end
|
102
91
|
end
|
103
92
|
end
|
104
93
|
end
|
105
94
|
|
106
95
|
describe "validating credentials" do
|
107
|
-
|
108
96
|
it "succeeds if it can get time.json from big commerce" do
|
109
97
|
VCR.use_cassette('big_commerce_time') do
|
110
|
-
subject.
|
98
|
+
expect(subject).to be_valid
|
111
99
|
end
|
112
100
|
end
|
113
101
|
|
@@ -119,7 +107,7 @@ describe MadCart::Store::BigCommerce do
|
|
119
107
|
:username => 'support@madmimi.com'
|
120
108
|
)
|
121
109
|
|
122
|
-
api.
|
110
|
+
expect(api).not_to be_valid
|
123
111
|
end
|
124
112
|
end
|
125
113
|
|
@@ -131,16 +119,15 @@ describe MadCart::Store::BigCommerce do
|
|
131
119
|
:username => 'support@madmimi.com'
|
132
120
|
)
|
133
121
|
|
134
|
-
api.
|
122
|
+
expect(api).not_to be_valid
|
135
123
|
end
|
136
124
|
end
|
137
125
|
|
138
126
|
it "fails if it cannot parse the response from the big commerce server" do
|
139
127
|
VCR.use_cassette('big_commerce_time') do
|
140
|
-
subject.connection.
|
141
|
-
subject.
|
128
|
+
allow(subject.connection).to receive(:get).and_raise(Faraday::ParsingError.new(""))
|
129
|
+
expect(subject).not_to be_valid
|
142
130
|
end
|
143
131
|
end
|
144
132
|
end
|
145
|
-
|
146
133
|
end
|
data/spec/lib/store/etsy_spec.rb
CHANGED
@@ -5,7 +5,6 @@ describe MadCart::Store::Etsy do
|
|
5
5
|
before(:each) { clear_config }
|
6
6
|
|
7
7
|
describe "retrieving products" do
|
8
|
-
|
9
8
|
context "the store doesn't exist" do
|
10
9
|
let(:invalid_store_name) { 'MadeUpStore' }
|
11
10
|
let(:store) { MadCart::Store::Etsy.new(:store_name => invalid_store_name, :api_key => '4j3amz573gly866229iixzri') }
|
@@ -18,7 +17,6 @@ describe MadCart::Store::Etsy do
|
|
18
17
|
end
|
19
18
|
|
20
19
|
context "the store does exist" do
|
21
|
-
|
22
20
|
before(:each) do
|
23
21
|
MadCart.configure do |config|
|
24
22
|
config.add_store :etsy, {:api_key => '4j3amz573gly866229iixzri'}
|
@@ -29,16 +27,15 @@ describe MadCart::Store::Etsy do
|
|
29
27
|
VCR.use_cassette('etsy_store_listings') do
|
30
28
|
api = MadCart::Store::Etsy.new(:store_name => 'FabBeads')
|
31
29
|
products = api.products(:includes => "MainImage")
|
32
|
-
products.size.
|
30
|
+
expect(products.size).to eql(25) # the etsy product limit
|
33
31
|
|
34
32
|
first_product = products.first
|
35
33
|
|
36
|
-
first_product.
|
37
|
-
first_product.name.
|
38
|
-
first_product.description.
|
39
|
-
first_product.image_url.
|
40
|
-
|
41
|
-
first_product.additional_attributes['price'].should == BigDecimal.new('2.5')
|
34
|
+
expect(first_product).to be_a(MadCart::Model::Product)
|
35
|
+
expect(first_product.name).not_to be_nil
|
36
|
+
expect(first_product.description).not_to be_nil
|
37
|
+
expect(first_product.image_url).not_to be_nil
|
38
|
+
expect(first_product.additional_attributes['price']).to eql(BigDecimal.new('2.5'))
|
42
39
|
end
|
43
40
|
end
|
44
41
|
|
@@ -47,26 +44,25 @@ describe MadCart::Store::Etsy do
|
|
47
44
|
VCR.use_cassette('etsy_store_listings_new_format_image') do
|
48
45
|
api = MadCart::Store::Etsy.new(:store_name => 'TheBeadsofDreams')
|
49
46
|
products = api.products(:includes => "MainImage")
|
50
|
-
products.size.
|
47
|
+
expect(products.size).to eql(25) # the etsy product limit
|
51
48
|
|
52
49
|
first_product = products.first
|
53
50
|
|
54
|
-
first_product.
|
55
|
-
first_product.name.
|
56
|
-
first_product.description.
|
57
|
-
first_product.image_url.
|
58
|
-
first_product.additional_attributes['price'].
|
51
|
+
expect(first_product).to be_a(MadCart::Model::Product)
|
52
|
+
expect(first_product.name).not_to be_nil
|
53
|
+
expect(first_product.description).not_to be_nil
|
54
|
+
expect(first_product.image_url).not_to be_nil
|
55
|
+
expect(first_product.additional_attributes['price']).to eql(BigDecimal.new('2.2'))
|
59
56
|
end
|
60
57
|
end
|
61
58
|
end
|
62
59
|
|
63
60
|
context "pagination" do
|
64
|
-
|
65
61
|
it "defaults to page one" do
|
66
62
|
VCR.use_cassette('etsy_store_listings') do
|
67
63
|
api = MadCart::Store::Etsy.new(:store_name => 'FabBeads')
|
68
64
|
|
69
|
-
api.connection.
|
65
|
+
expect(api.connection).to receive(:listings).with(:active, {:page => 1}).and_return([])
|
70
66
|
api.products
|
71
67
|
end
|
72
68
|
end
|
@@ -75,37 +71,31 @@ describe MadCart::Store::Etsy do
|
|
75
71
|
VCR.use_cassette('etsy_store_listings') do
|
76
72
|
api = MadCart::Store::Etsy.new(:store_name => 'FabBeads')
|
77
73
|
|
78
|
-
api.connection.
|
74
|
+
expect(api.connection).to receive(:listings).with(:active, {:page => 2}).and_return([]) # Trusting the Etsy gem, not testing that it works
|
79
75
|
api.products(:page => 2)
|
80
76
|
end
|
81
77
|
end
|
82
|
-
|
83
78
|
end
|
84
79
|
|
85
80
|
context "validating credentials" do
|
86
|
-
|
87
81
|
it "succeeds if it can get a connection object" do
|
88
82
|
VCR.use_cassette('etsy_store_listings') do
|
89
83
|
api = MadCart::Store::Etsy.new(:store_name => 'FabBeads')
|
90
84
|
|
91
|
-
api.
|
85
|
+
expect(api).to be_valid
|
92
86
|
end
|
93
87
|
end
|
94
88
|
|
95
89
|
it "fails if it cannot get a connection object" do
|
96
90
|
VCR.use_cassette('etsy_store_listings') do
|
97
91
|
api = MadCart::Store::Etsy.new(:store_name => 'FabBeads')
|
98
|
-
api.
|
92
|
+
allow(api).to receive(:create_connection).and_return(nil)
|
99
93
|
|
100
|
-
api.
|
94
|
+
expect(api).not_to be_valid
|
101
95
|
end
|
102
96
|
end
|
103
|
-
|
104
97
|
end
|
105
|
-
|
106
98
|
end
|
107
|
-
|
108
99
|
end
|
109
|
-
|
110
100
|
end
|
111
101
|
|
@@ -22,32 +22,28 @@ describe MadCart::Store::Spree do
|
|
22
22
|
}
|
23
23
|
|
24
24
|
describe "store" do
|
25
|
-
|
26
25
|
it "expects to be instantiated with an api key and store url" do
|
27
|
-
|
28
|
-
|
26
|
+
expect { MadCart::Store::Spree.new(:store_url => 'test').connection }.to raise_error(ArgumentError)
|
27
|
+
expect { MadCart::Store::Spree.new(:api_key => 'test', :store_url => 'test').connection }.not_to raise_error
|
29
28
|
end
|
30
|
-
|
31
29
|
end
|
32
30
|
|
33
31
|
describe "products" do
|
34
|
-
|
35
32
|
context "retrieval" do
|
36
|
-
|
37
33
|
context "basic spree installation" do
|
38
34
|
it "returns all products" do
|
39
35
|
VCR.use_cassette(spree_cassette, :record => :new_episodes) do
|
40
36
|
api = MadCart::Store::Spree.new(valid_credentials)
|
41
37
|
|
42
|
-
api.products.size.
|
38
|
+
expect(api.products.size).to eql(58)
|
43
39
|
|
44
40
|
first_product = api.products.first
|
45
41
|
|
46
|
-
first_product.
|
47
|
-
first_product.name.
|
48
|
-
first_product.description.
|
49
|
-
first_product.image_url.
|
50
|
-
first_product.additional_attributes['price'].
|
42
|
+
expect(first_product).to be_a(MadCart::Model::Product)
|
43
|
+
expect(first_product.name).not_to be_nil
|
44
|
+
expect(first_product.description).not_to be_nil
|
45
|
+
expect(first_product.image_url).not_to be_nil
|
46
|
+
expect(first_product.additional_attributes['price']).not_to be_nil
|
51
47
|
end
|
52
48
|
end
|
53
49
|
end
|
@@ -57,15 +53,15 @@ describe MadCart::Store::Spree do
|
|
57
53
|
VCR.use_cassette(spree_alternative_cassette, :record => :new_episodes) do
|
58
54
|
api = MadCart::Store::Spree.new(valid_alternative_credentials)
|
59
55
|
|
60
|
-
api.products.size.
|
56
|
+
expect(api.products.size).to eql(148)
|
61
57
|
|
62
58
|
first_product = api.products.first
|
63
59
|
|
64
|
-
first_product.
|
65
|
-
first_product.name.
|
66
|
-
first_product.description.
|
67
|
-
first_product.image_url.
|
68
|
-
first_product.additional_attributes['price'].
|
60
|
+
expect(first_product).to be_a(MadCart::Model::Product)
|
61
|
+
expect(first_product.name).not_to be_nil
|
62
|
+
expect(first_product.description).not_to be_nil
|
63
|
+
expect(first_product.image_url).not_to be_nil
|
64
|
+
expect(first_product.additional_attributes['price']).not_to be_nil
|
69
65
|
end
|
70
66
|
end
|
71
67
|
end
|
@@ -73,7 +69,7 @@ describe MadCart::Store::Spree do
|
|
73
69
|
it "returns an empty array when there are no products" do
|
74
70
|
VCR.use_cassette(spree_no_records_cassette) do
|
75
71
|
api = MadCart::Store::Spree.new(valid_credentials)
|
76
|
-
api.products.
|
72
|
+
expect(api.products).to eql([])
|
77
73
|
end
|
78
74
|
end
|
79
75
|
|
@@ -84,7 +80,7 @@ describe MadCart::Store::Spree do
|
|
84
80
|
it "returns how many products there are" do
|
85
81
|
VCR.use_cassette(spree_cassette, :record => :new_episodes) do
|
86
82
|
api = MadCart::Store::Spree.new(valid_credentials)
|
87
|
-
api.products_count.
|
83
|
+
expect(api.products_count).to eql(58)
|
88
84
|
end
|
89
85
|
end
|
90
86
|
|
@@ -99,8 +95,8 @@ describe MadCart::Store::Spree do
|
|
99
95
|
VCR.use_cassette(spree_cassette, :record => :new_episodes) do
|
100
96
|
api = MadCart::Store::Spree.new(valid_credentials)
|
101
97
|
|
102
|
-
api.customers.size.
|
103
|
-
api.customers.first.
|
98
|
+
expect(api.customers.size).to be > 0
|
99
|
+
expect(api.customers.first).to be_a(MadCart::Model::Customer)
|
104
100
|
end
|
105
101
|
end
|
106
102
|
|
@@ -108,19 +104,18 @@ describe MadCart::Store::Spree do
|
|
108
104
|
VCR.use_cassette(spree_no_records_cassette) do
|
109
105
|
api = MadCart::Store::Spree.new(valid_credentials)
|
110
106
|
|
111
|
-
api.customers.
|
107
|
+
expect(api.customers).to eql([])
|
112
108
|
end
|
113
109
|
end
|
114
110
|
|
115
111
|
end
|
116
112
|
|
117
113
|
describe "validating credentials" do
|
118
|
-
|
119
114
|
it "succeeds if it can get orders.json from Spree" do
|
120
115
|
VCR.use_cassette(spree_cassette, :record => :new_episodes) do
|
121
116
|
api = MadCart::Store::Spree.new(valid_credentials)
|
122
117
|
|
123
|
-
api.
|
118
|
+
expect(api).to be_valid
|
124
119
|
end
|
125
120
|
end
|
126
121
|
|
@@ -131,11 +126,9 @@ describe MadCart::Store::Spree do
|
|
131
126
|
:store_url => valid_credentials[:store_url]
|
132
127
|
)
|
133
128
|
|
134
|
-
api.
|
129
|
+
expect(api).not_to be_valid
|
135
130
|
end
|
136
131
|
end
|
137
|
-
|
138
132
|
end
|
139
133
|
end
|
140
|
-
|
141
134
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mad_cart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc Heiligers
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-12-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: faraday
|
@@ -203,6 +203,7 @@ extra_rdoc_files: []
|
|
203
203
|
files:
|
204
204
|
- ".gitignore"
|
205
205
|
- ".rspec"
|
206
|
+
- ".travis.yml"
|
206
207
|
- CHANGELOG.md
|
207
208
|
- Gemfile
|
208
209
|
- LICENSE.txt
|