mad_cart 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|