spree_api 2.0.13 → 2.1.0
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/CHANGELOG.md +99 -1
- data/app/controllers/spree/api/addresses_controller.rb +5 -2
- data/app/controllers/spree/api/base_controller.rb +14 -21
- data/app/controllers/spree/api/checkouts_controller.rb +30 -27
- data/app/controllers/spree/api/config_controller.rb +6 -0
- data/app/controllers/spree/api/countries_controller.rb +7 -7
- data/app/controllers/spree/api/images_controller.rb +10 -8
- data/app/controllers/spree/api/inventory_units_controller.rb +7 -4
- data/app/controllers/spree/api/line_items_controller.rb +14 -14
- data/app/controllers/spree/api/option_types_controller.rb +14 -11
- data/app/controllers/spree/api/option_values_controller.rb +13 -11
- data/app/controllers/spree/api/orders_controller.rb +56 -53
- data/app/controllers/spree/api/payments_controller.rb +25 -33
- data/app/controllers/spree/api/product_properties_controller.rb +20 -13
- data/app/controllers/spree/api/products_controller.rb +11 -58
- data/app/controllers/spree/api/properties_controller.rb +19 -16
- data/app/controllers/spree/api/return_authorizations_controller.rb +30 -25
- data/app/controllers/spree/api/shipments_controller.rb +24 -19
- data/app/controllers/spree/api/states_controller.rb +9 -7
- data/app/controllers/spree/api/stock_items_controller.rb +9 -11
- data/app/controllers/spree/api/stock_locations_controller.rb +9 -7
- data/app/controllers/spree/api/stock_movements_controller.rb +7 -5
- data/app/controllers/spree/api/taxonomies_controller.rb +14 -8
- data/app/controllers/spree/api/taxons_controller.rb +25 -20
- data/app/controllers/spree/api/users_controller.rb +7 -5
- data/app/controllers/spree/api/variants_controller.rb +35 -33
- data/app/controllers/spree/api/zones_controller.rb +18 -17
- data/app/helpers/spree/api/api_helpers.rb +7 -6
- data/app/models/spree/option_value_decorator.rb +0 -4
- data/app/models/spree/order_decorator.rb +33 -54
- data/app/views/spree/api/adjustments/show.v1.rabl +2 -1
- data/app/views/spree/api/config/money.v1.rabl +6 -0
- data/app/views/spree/api/config/show.v1.rabl +2 -0
- data/app/views/spree/api/images/show.v1.rabl +0 -1
- data/app/views/spree/api/line_items/show.v1.rabl +3 -0
- data/app/views/spree/api/orders/index.v1.rabl +1 -1
- data/app/views/spree/api/orders/order.v1.rabl +6 -0
- data/app/views/spree/api/orders/payment.v1.rabl +1 -1
- data/app/views/spree/api/orders/show.v1.rabl +1 -1
- data/app/views/spree/api/payments/credit_over_limit.v1.rabl +1 -1
- data/app/views/spree/api/payments/new.v1.rabl +1 -0
- data/app/views/spree/api/products/index.v1.rabl +2 -2
- data/app/views/spree/api/products/show.v1.rabl +1 -0
- data/app/views/spree/api/shipments/show.v1.rabl +22 -5
- data/app/views/spree/api/shipping_rates/show.v1.rabl +2 -0
- data/app/views/spree/api/taxons/index.v1.rabl +2 -4
- data/app/views/spree/api/variants/index.v1.rabl +1 -1
- data/config/locales/en.yml +1 -3
- data/config/routes.rb +4 -1
- data/lib/spree/api/responders/rabl_template.rb +1 -1
- data/lib/spree/api/testing_support/helpers.rb +5 -0
- data/spec/controllers/spree/api/addresses_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +32 -22
- data/spec/controllers/spree/api/config_controller_spec.rb +27 -0
- data/spec/controllers/spree/api/images_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/inventory_units_controller_spec.rb +28 -24
- data/spec/controllers/spree/api/line_items_controller_spec.rb +25 -27
- data/spec/controllers/spree/api/option_types_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/option_values_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/orders_controller_spec.rb +130 -119
- data/spec/controllers/spree/api/payments_controller_spec.rb +77 -118
- data/spec/controllers/spree/api/products_controller_spec.rb +13 -143
- data/spec/controllers/spree/api/return_authorizations_controller_spec.rb +4 -19
- data/spec/controllers/spree/api/shipments_controller_spec.rb +3 -3
- data/spec/controllers/spree/api/states_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/stock_items_controller_spec.rb +26 -62
- data/spec/controllers/spree/api/stock_locations_controller_spec.rb +29 -56
- data/spec/controllers/spree/api/stock_movements_controller_spec.rb +27 -51
- data/spec/controllers/spree/api/taxons_controller_spec.rb +18 -48
- data/spec/controllers/spree/api/users_controller_spec.rb +4 -6
- data/spec/controllers/spree/api/variants_controller_spec.rb +21 -38
- data/spec/controllers/spree/api/zones_controller_spec.rb +2 -2
- data/spec/models/spree/order_spec.rb +19 -111
- data/spec/spec_helper.rb +2 -26
- data/spec/support/controller_hacks.rb +1 -1
- data/spree_api.gemspec +1 -1
- metadata +19 -15
- data/app/models/spree/line_item_decorator.rb +0 -3
- data/app/views/spree/api/payments/update_forbidden.v1.rabl +0 -2
- data/db/migrate/20131017162334_add_index_to_user_spree_api_key.rb +0 -7
@@ -5,12 +5,11 @@ module Spree
|
|
5
5
|
render_views
|
6
6
|
let!(:order) { create(:order) }
|
7
7
|
let!(:payment) { create(:payment, :order => order) }
|
8
|
-
let!(:attributes) { [:id, :source_type, :source_id, :amount,
|
8
|
+
let!(:attributes) { [:id, :source_type, :source_id, :amount,
|
9
9
|
:payment_method_id, :response_code, :state, :avs_response,
|
10
10
|
:created_at, :updated_at] }
|
11
11
|
|
12
12
|
let(:resource_scoping) { { :order_id => order.to_param } }
|
13
|
-
|
14
13
|
before do
|
15
14
|
stub_authentication!
|
16
15
|
end
|
@@ -44,11 +43,6 @@ module Spree
|
|
44
43
|
json_response.should have_attributes(attributes)
|
45
44
|
end
|
46
45
|
|
47
|
-
it "cannot update a payment" do
|
48
|
-
api_put :update, :id => payment.to_param, :payment => { :amount => 2.01 }
|
49
|
-
assert_unauthorized!
|
50
|
-
end
|
51
|
-
|
52
46
|
it "cannot authorize a payment" do
|
53
47
|
api_put :authorize, :id => payment.to_param
|
54
48
|
assert_unauthorized!
|
@@ -99,120 +93,84 @@ module Spree
|
|
99
93
|
end
|
100
94
|
|
101
95
|
context "for a given payment" do
|
102
|
-
context "updating" do
|
103
|
-
it "can update" do
|
104
|
-
payment.update_column(:state, 'pending')
|
105
|
-
api_put :update, :id => payment.to_param, :payment => { :amount => 2.01 }
|
106
|
-
response.status.should == 200
|
107
|
-
payment.reload.amount.should == 2.01
|
108
|
-
end
|
109
96
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
json_response["error"].should == "Invalid resource. Please fix errors and try again."
|
116
|
-
end
|
117
|
-
|
118
|
-
it "returns a 403 status when the payment is not pending" do
|
119
|
-
payment.update_column(:state, 'complete')
|
120
|
-
api_put :update, :id => payment.to_param, :payment => { :amount => 2.01 }
|
121
|
-
response.status.should == 403
|
122
|
-
json_response["error"].should == "This payment cannot be updated because it is complete."
|
123
|
-
end
|
124
|
-
end
|
97
|
+
it "can authorize" do
|
98
|
+
api_put :authorize, :id => payment.to_param
|
99
|
+
response.status.should == 200
|
100
|
+
payment.reload
|
101
|
+
payment.state.should == "pending"
|
125
102
|
end
|
126
103
|
|
127
|
-
context "
|
128
|
-
|
104
|
+
context "authorization fails" do
|
105
|
+
before do
|
106
|
+
fake_response = double(:success? => false, :to_s => "Could not authorize card")
|
107
|
+
Spree::Gateway::Bogus.any_instance.should_receive(:authorize).and_return(fake_response)
|
129
108
|
api_put :authorize, :id => payment.to_param
|
130
|
-
|
131
|
-
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns a 422 status" do
|
112
|
+
response.status.should == 422
|
113
|
+
json_response["error"].should == "There was a problem with the payment gateway: Could not authorize card"
|
132
114
|
end
|
133
115
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
api_put :authorize, :id => payment.to_param
|
139
|
-
end
|
140
|
-
|
141
|
-
it "returns a 422 status" do
|
142
|
-
response.status.should == 422
|
143
|
-
json_response["error"].should == "There was a problem with the payment gateway: Could not authorize card"
|
144
|
-
end
|
145
|
-
|
146
|
-
it "does not raise a stack level error" do
|
147
|
-
pending "Investigate why a payment.reload after the request raises 'stack level too deep'"
|
148
|
-
payment.reload.state.should == "failed"
|
149
|
-
end
|
116
|
+
it "returns a 422 status" do
|
117
|
+
pending "Investigate why a payment.reload after the request raises 'stack level too deep'"
|
118
|
+
payment.reload
|
119
|
+
payment.state.should == "failed"
|
150
120
|
end
|
151
121
|
end
|
152
122
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
123
|
+
it "can capture" do
|
124
|
+
api_put :capture, :id => payment.to_param
|
125
|
+
response.status.should == 200
|
126
|
+
payment.reload
|
127
|
+
payment.state.should == "completed"
|
128
|
+
end
|
159
129
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
it "returns a 422 status" do
|
167
|
-
api_put :capture, :id => payment.to_param
|
168
|
-
response.status.should == 422
|
169
|
-
json_response["error"].should == "There was a problem with the payment gateway: Insufficient funds"
|
170
|
-
end
|
171
|
-
end
|
130
|
+
it "returns a 422 status when purchasing fails" do
|
131
|
+
fake_response = double(:success? => false, :to_s => "Insufficient funds")
|
132
|
+
Spree::Gateway::Bogus.any_instance.should_receive(:capture).and_return(fake_response)
|
133
|
+
api_put :capture, :id => payment.to_param
|
134
|
+
response.status.should == 422
|
135
|
+
json_response["error"].should == "There was a problem with the payment gateway: Insufficient funds"
|
172
136
|
end
|
173
137
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
138
|
+
it "can purchase" do
|
139
|
+
api_put :purchase, :id => payment.to_param
|
140
|
+
response.status.should == 200
|
141
|
+
payment.reload
|
142
|
+
payment.state.should == "completed"
|
143
|
+
end
|
180
144
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
end
|
186
|
-
|
187
|
-
it "returns a 422 status" do
|
188
|
-
api_put :purchase, :id => payment.to_param
|
189
|
-
response.status.should == 422
|
190
|
-
json_response["error"].should == "There was a problem with the payment gateway: Insufficient funds"
|
191
|
-
end
|
145
|
+
context "purchasing fails" do
|
146
|
+
before do
|
147
|
+
fake_response = double(:success? => false, :to_s => "Insufficient funds")
|
148
|
+
Spree::Gateway::Bogus.any_instance.should_receive(:purchase).and_return(fake_response)
|
192
149
|
end
|
193
|
-
end
|
194
150
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
payment.reload.state.should == "void"
|
151
|
+
it "returns a 422" do
|
152
|
+
api_put :purchase, :id => payment.to_param
|
153
|
+
response.status.should == 422
|
154
|
+
json_response["error"].should == "There was a problem with the payment gateway: Insufficient funds"
|
200
155
|
end
|
156
|
+
end
|
201
157
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
158
|
+
it "can void" do
|
159
|
+
api_put :void, :id => payment.to_param
|
160
|
+
response.status.should == 200
|
161
|
+
payment.reload
|
162
|
+
payment.state.should == "void"
|
163
|
+
end
|
207
164
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
165
|
+
it "returns a 422 status when voiding fails" do
|
166
|
+
fake_response = double(:success? => false, :to_s => "NO REFUNDS")
|
167
|
+
Spree::Gateway::Bogus.any_instance.should_receive(:void).and_return(fake_response)
|
168
|
+
api_put :void, :id => payment.to_param
|
169
|
+
response.status.should == 422
|
170
|
+
json_response["error"].should == "There was a problem with the payment gateway: NO REFUNDS"
|
212
171
|
|
213
|
-
|
214
|
-
|
215
|
-
end
|
172
|
+
payment.reload
|
173
|
+
payment.state.should == "checkout"
|
216
174
|
end
|
217
175
|
|
218
176
|
context "crediting" do
|
@@ -223,30 +181,31 @@ module Spree
|
|
223
181
|
it "can credit" do
|
224
182
|
api_put :credit, :id => payment.to_param
|
225
183
|
response.status.should == 200
|
226
|
-
payment.reload
|
184
|
+
payment.reload
|
185
|
+
payment.state.should == "completed"
|
227
186
|
|
228
|
-
#
|
187
|
+
# Ensur that a credit payment was created, and it has correct credit amount
|
229
188
|
credit_payment = Payment.where(:source_type => 'Spree::Payment', :source_id => payment.id).last
|
230
189
|
credit_payment.amount.to_f.should == -45.75
|
231
190
|
end
|
232
191
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
json_response["error"].should == "This payment can only be credited up to 45.75. Please specify an amount less than or equal to this number."
|
246
|
-
end
|
192
|
+
it "returns a 422 status when crediting fails" do
|
193
|
+
fake_response = double(:success? => false, :to_s => "NO CREDIT FOR YOU")
|
194
|
+
Spree::Gateway::Bogus.any_instance.should_receive(:credit).and_return(fake_response)
|
195
|
+
api_put :credit, :id => payment.to_param
|
196
|
+
response.status.should == 422
|
197
|
+
json_response["error"].should == "There was a problem with the payment gateway: NO CREDIT FOR YOU"
|
198
|
+
end
|
199
|
+
|
200
|
+
it "cannot credit over credit_allowed limit" do
|
201
|
+
api_put :credit, :id => payment.to_param, :amount => 1000000
|
202
|
+
response.status.should == 422
|
203
|
+
json_response["error"].should == "This payment can only be credited up to 45.75. Please specify an amount less than or equal to this number."
|
247
204
|
end
|
248
205
|
end
|
249
206
|
end
|
207
|
+
|
250
208
|
end
|
209
|
+
|
251
210
|
end
|
252
211
|
end
|
@@ -7,22 +7,7 @@ module Spree
|
|
7
7
|
|
8
8
|
let!(:product) { create(:product) }
|
9
9
|
let!(:inactive_product) { create(:product, :available_on => Time.now.tomorrow, :name => "inactive") }
|
10
|
-
let(:attributes) { [:id, :name, :description, :price, :available_on, :permalink, :meta_description, :meta_keywords, :shipping_category_id, :taxon_ids] }
|
11
|
-
let(:product_hash) do
|
12
|
-
{ :name => "The Other Product",
|
13
|
-
:price => 19.99,
|
14
|
-
:shipping_category_id => create(:shipping_category).id }
|
15
|
-
end
|
16
|
-
let(:attributes_for_variant) do
|
17
|
-
h = attributes_for(:variant).except(:is_master, :product)
|
18
|
-
h.delete(:option_values)
|
19
|
-
h.merge({
|
20
|
-
options: [
|
21
|
-
{ name: "size", value: "small" },
|
22
|
-
{ name: "color", value: "black" }
|
23
|
-
]
|
24
|
-
})
|
25
|
-
end
|
10
|
+
let(:attributes) { [:id, :name, :description, :price, :display_price, :available_on, :permalink, :meta_description, :meta_keywords, :shipping_category_id, :taxon_ids] }
|
26
11
|
|
27
12
|
before do
|
28
13
|
stub_authentication!
|
@@ -32,25 +17,16 @@ module Spree
|
|
32
17
|
it "retrieves a list of products" do
|
33
18
|
api_get :index
|
34
19
|
json_response["products"].first.should have_attributes(attributes)
|
35
|
-
json_response["
|
20
|
+
json_response["total_count"].should == 1
|
36
21
|
json_response["current_page"].should == 1
|
37
22
|
json_response["pages"].should == 1
|
23
|
+
json_response["per_page"].should == Kaminari.config.default_per_page
|
38
24
|
end
|
39
25
|
|
40
26
|
it "retrieves a list of products by id" do
|
41
27
|
api_get :index, :ids => [product.id]
|
42
28
|
json_response["products"].first.should have_attributes(attributes)
|
43
|
-
json_response["
|
44
|
-
json_response["current_page"].should == 1
|
45
|
-
json_response["pages"].should == 1
|
46
|
-
end
|
47
|
-
|
48
|
-
it "retrieves a list of products by ids string" do
|
49
|
-
second_product = create(:product)
|
50
|
-
api_get :index, :ids => [product.id, second_product.id].join(",")
|
51
|
-
json_response["products"].first.should have_attributes(attributes)
|
52
|
-
json_response["products"][1].should have_attributes(attributes)
|
53
|
-
json_response["total_count"].should == 2
|
29
|
+
json_response["total_count"].should == 1
|
54
30
|
json_response["current_page"].should == 1
|
55
31
|
json_response["pages"].should == 1
|
56
32
|
json_response["per_page"].should == Kaminari.config.default_per_page
|
@@ -92,13 +68,6 @@ module Spree
|
|
92
68
|
response.body.should =~ /^callback\(.*\)$/
|
93
69
|
response.header['Content-Type'].should include('application/javascript')
|
94
70
|
end
|
95
|
-
|
96
|
-
# Regression test for #4332
|
97
|
-
it "does not escape quotes" do
|
98
|
-
api_get :index, {:callback => 'callback'}
|
99
|
-
response.body.should =~ /^callback\({"count":1,"total_count":1/
|
100
|
-
response.header['Content-Type'].should include('application/javascript')
|
101
|
-
end
|
102
71
|
end
|
103
72
|
|
104
73
|
it "can search for products" do
|
@@ -124,7 +93,10 @@ module Spree
|
|
124
93
|
:attachment_width,
|
125
94
|
:attachment_height,
|
126
95
|
:attachment_content_type,
|
127
|
-
:
|
96
|
+
:mini_url,
|
97
|
+
:small_url,
|
98
|
+
:product_url,
|
99
|
+
:large_url])
|
128
100
|
|
129
101
|
json_response["product_properties"].first.should have_attributes([:value,
|
130
102
|
:product_id,
|
@@ -151,14 +123,12 @@ module Spree
|
|
151
123
|
|
152
124
|
it "cannot see inactive products" do
|
153
125
|
api_get :show, :id => inactive_product.to_param
|
154
|
-
|
155
|
-
response.status.should == 404
|
126
|
+
assert_not_found!
|
156
127
|
end
|
157
128
|
|
158
129
|
it "returns a 404 error when it cannot find a product" do
|
159
130
|
api_get :show, :id => "non-existant"
|
160
|
-
|
161
|
-
response.status.should == 404
|
131
|
+
assert_not_found!
|
162
132
|
end
|
163
133
|
|
164
134
|
it "can learn how to create a new product" do
|
@@ -202,71 +172,13 @@ module Spree
|
|
202
172
|
end
|
203
173
|
|
204
174
|
it "can create a new product" do
|
205
|
-
api_post :create, :product =>
|
175
|
+
api_post :create, :product => { :name => "The Other Product",
|
176
|
+
:price => 19.99,
|
177
|
+
:shipping_category_id => create(:shipping_category).id }
|
206
178
|
json_response.should have_attributes(attributes)
|
207
179
|
response.status.should == 201
|
208
180
|
end
|
209
181
|
|
210
|
-
describe "creating products with" do
|
211
|
-
it "embedded variants" do
|
212
|
-
product_hash.merge!({
|
213
|
-
variants_attributes: [
|
214
|
-
attributes_for_variant,
|
215
|
-
attributes_for_variant
|
216
|
-
]
|
217
|
-
})
|
218
|
-
|
219
|
-
api_post :create, :product => product_hash
|
220
|
-
expect(response.status).to eq 201
|
221
|
-
|
222
|
-
variants = json_response['variants'].select { |v| !v['is_master'] }
|
223
|
-
expect(variants.first['option_values'][0]['name']).to eq('small')
|
224
|
-
expect(variants.first['option_values'][0]['option_type_name']).to eq('size')
|
225
|
-
|
226
|
-
expect(json_response['option_types'].count).to eq(2) # size, color
|
227
|
-
end
|
228
|
-
|
229
|
-
it "embedded product_properties" do
|
230
|
-
product_hash.merge!({
|
231
|
-
shipping_category_id: 1,
|
232
|
-
|
233
|
-
product_properties_attributes: [{
|
234
|
-
property_name: "fabric",
|
235
|
-
value: "cotton"
|
236
|
-
}]
|
237
|
-
})
|
238
|
-
|
239
|
-
api_post :create, :product => product_hash
|
240
|
-
|
241
|
-
expect(json_response['product_properties'][0]['property_name']).to eq('fabric')
|
242
|
-
expect(json_response['product_properties'][0]['value']).to eq('cotton')
|
243
|
-
end
|
244
|
-
|
245
|
-
it "option_types even if without variants" do
|
246
|
-
product_hash.merge!({
|
247
|
-
shipping_category_id: 1,
|
248
|
-
|
249
|
-
option_types: ['size', 'color']
|
250
|
-
})
|
251
|
-
|
252
|
-
api_post :create, :product => product_hash
|
253
|
-
|
254
|
-
expect(json_response['option_types'].count).to eq(2)
|
255
|
-
end
|
256
|
-
|
257
|
-
it "creates with shipping categories" do
|
258
|
-
hash = { :name => "The Other Product",
|
259
|
-
:price => 19.99,
|
260
|
-
:shipping_category => "Free Ships" }
|
261
|
-
|
262
|
-
api_post :create, :product => hash
|
263
|
-
expect(response.status).to eq 201
|
264
|
-
|
265
|
-
shipping_id = ShippingCategory.find_by_name("Free Ships").id
|
266
|
-
expect(json_response['shipping_category_id']).to eq shipping_id
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
182
|
# Regression test for #2140
|
271
183
|
context "with authentication_required set to false" do
|
272
184
|
before do
|
@@ -301,13 +213,6 @@ module Spree
|
|
301
213
|
response.status.should == 200
|
302
214
|
end
|
303
215
|
|
304
|
-
it "updates shipping category properly if provided" do
|
305
|
-
api_put :update, :id => product.to_param, :product => { :shipping_category => "New Ships" }
|
306
|
-
expect(response.status).to eq 200
|
307
|
-
shipping_id = ShippingCategory.find_by_name("New Ships").id
|
308
|
-
expect(json_response['shipping_category_id']).to eq shipping_id
|
309
|
-
end
|
310
|
-
|
311
216
|
it "cannot update a product with an invalid attribute" do
|
312
217
|
api_put :update, :id => product.to_param, :product => { :name => "" }
|
313
218
|
response.status.should == 422
|
@@ -321,41 +226,6 @@ module Spree
|
|
321
226
|
response.status.should == 204
|
322
227
|
product.reload.deleted_at.should_not be_nil
|
323
228
|
end
|
324
|
-
|
325
|
-
describe "updating products with" do
|
326
|
-
it "embedded option types" do
|
327
|
-
api_put :update, :id => product.to_param, :product => { :option_types => ['shape', 'color'] }
|
328
|
-
json_response['option_types'].count.should eq(2)
|
329
|
-
end
|
330
|
-
|
331
|
-
it "new variants" do
|
332
|
-
api_put :update, :id => product.to_param, :product => { :variants_attributes => [attributes_for_variant, attributes_for_variant] }
|
333
|
-
response.status.should == 200
|
334
|
-
json_response['variants'].count.should == 3 # 1 master + 2 variants
|
335
|
-
|
336
|
-
variants = json_response['variants'].select { |v| !v['is_master'] }
|
337
|
-
variants.last['option_values'][0]['name'].should == 'small'
|
338
|
-
variants.last['option_values'][0]['option_type_name'].should == 'size'
|
339
|
-
|
340
|
-
json_response['option_types'].count.should == 2 # size, color
|
341
|
-
end
|
342
|
-
|
343
|
-
it "updating an existing variant" do
|
344
|
-
variant_hash = {
|
345
|
-
:sku => '123', :price => 19.99, :options => [{:name => "size", :value => "small"}]
|
346
|
-
}
|
347
|
-
variant = product.variants.new
|
348
|
-
variant.update_attributes(variant_hash)
|
349
|
-
|
350
|
-
api_put :update, :id => product.to_param, :product => { :variants_attributes => [variant_hash.merge(:id => variant.id.to_s, :sku => '456', :options => [{:name => "size", :value => "large" }])] }
|
351
|
-
|
352
|
-
json_response['variants'].count.should == 2 # 1 master + 2 variants
|
353
|
-
variants = json_response['variants'].select { |v| !v['is_master'] }
|
354
|
-
variants.last['option_values'][0]['name'].should == 'large'
|
355
|
-
variants.last['sku'].should == '456'
|
356
|
-
variants.count.should == 1
|
357
|
-
end
|
358
|
-
end
|
359
229
|
end
|
360
230
|
end
|
361
231
|
end
|
@@ -41,27 +41,12 @@ module Spree
|
|
41
41
|
|
42
42
|
it "cannot update a return authorization" do
|
43
43
|
api_put :update
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
it "cannot add a variant to a return authorization" do
|
48
|
-
api_put :add
|
49
|
-
assert_unauthorized!
|
50
|
-
end
|
51
|
-
|
52
|
-
it "cannot mark a return authorization as received" do
|
53
|
-
api_put :receive
|
54
|
-
assert_unauthorized!
|
55
|
-
end
|
56
|
-
|
57
|
-
it "cannot cancel a return authorization" do
|
58
|
-
api_put :cancel
|
59
|
-
assert_unauthorized!
|
44
|
+
assert_not_found!
|
60
45
|
end
|
61
46
|
|
62
47
|
it "cannot delete a return authorization" do
|
63
48
|
api_delete :destroy
|
64
|
-
|
49
|
+
assert_not_found!
|
65
50
|
end
|
66
51
|
end
|
67
52
|
|
@@ -133,7 +118,7 @@ module Spree
|
|
133
118
|
end
|
134
119
|
|
135
120
|
it "can mark a return authorization as received on the order with an inventory unit" do
|
136
|
-
FactoryGirl.create(:new_return_authorization, :order => order
|
121
|
+
FactoryGirl.create(:new_return_authorization, :order => order)
|
137
122
|
return_authorization = order.return_authorizations.first
|
138
123
|
return_authorization.state.should == "authorized"
|
139
124
|
|
@@ -176,7 +161,7 @@ module Spree
|
|
176
161
|
end
|
177
162
|
|
178
163
|
it "can add a new return authorization to an existing order" do
|
179
|
-
api_post :create, :
|
164
|
+
api_post :create, :order_id => order.number, :return_authorization => { :amount => 14.22, :reason => "Defective" }
|
180
165
|
response.status.should == 201
|
181
166
|
json_response.should have_attributes(attributes)
|
182
167
|
json_response["state"].should_not be_blank
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Spree::Api::ShipmentsController do
|
4
4
|
render_views
|
5
5
|
let!(:shipment) { create(:shipment) }
|
6
|
-
let!(:attributes) { [:id, :tracking, :number, :cost, :shipped_at, :stock_location_name, :order_id, :shipping_rates, :
|
6
|
+
let!(:attributes) { [:id, :tracking, :number, :cost, :shipped_at, :stock_location_name, :order_id, :shipping_rates, :shipping_methods] }
|
7
7
|
|
8
8
|
before do
|
9
9
|
stub_authentication!
|
@@ -96,7 +96,7 @@ describe Spree::Api::ShipmentsController do
|
|
96
96
|
it 'adds a variant to a shipment' do
|
97
97
|
api_put :add, { variant_id: variant.to_param, quantity: 2 }
|
98
98
|
response.status.should == 200
|
99
|
-
json_response['
|
99
|
+
json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"].should == 2
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'removes a variant from a shipment' do
|
@@ -104,7 +104,7 @@ describe Spree::Api::ShipmentsController do
|
|
104
104
|
|
105
105
|
api_put :remove, { variant_id: variant.to_param, quantity: 1 }
|
106
106
|
response.status.should == 200
|
107
|
-
json_response['
|
107
|
+
json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }["quantity"].should == 1
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
@@ -19,7 +19,7 @@ module Spree
|
|
19
19
|
|
20
20
|
context "pagination" do
|
21
21
|
before do
|
22
|
-
State.should_receive(:
|
22
|
+
State.should_receive(:accessible_by).and_return(@scope = double)
|
23
23
|
@scope.stub_chain(:ransack, :result, :includes, :order).and_return(@scope)
|
24
24
|
end
|
25
25
|
|