spree_api 2.4.2 → 2.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9c508f1db57c6d3162093a618db8ae73f80889e
4
- data.tar.gz: c2d8de75c3961ac03fbc5bb4804d62890bdff4ca
3
+ metadata.gz: 0baeb34a841cbeec0a8b478e5412b14747e28433
4
+ data.tar.gz: 26e9a4951c2d5875a51bd4c3454c2b64b152116b
5
5
  SHA512:
6
- metadata.gz: 0f2cf6539f49c45718e4af844d1f75bb92303ede18c9c829a99f87888d0cdc52993209a7cd86e624211dbffa2dc54fb4f76edd93b3d90aca42cf79882d3b9d6f
7
- data.tar.gz: 1ba85f77edc9a122e4fdeef402ef96f9de6d936d3e58b8ebbba9b65cf755c68588cb59aea55946010480a25bdcf726adc942cc942e135b2ec57ef769045c4335
6
+ metadata.gz: 74cb502eefc6a43572559fee484fba1bd6f880d3d2d7bc8c835c63ad6685700adbd71b5f6002ff9cd011b450f682f8cfa44d1c702b1262d3e2e3dff55b57ce4a
7
+ data.tar.gz: d5f37aebf55c5d8efacdd9f6221cc67e0822e1d7201ed85c0229c85387f56e49ef4f092bcf54aa3d2a6f7b915ad76509db4a2de24720bab7950d3b69f32cc4b8
@@ -34,8 +34,13 @@ module Spree
34
34
  end
35
35
 
36
36
  return if after_update_attributes
37
- state_callback(:after) if @order.next
38
- respond_with(@order, default_template: 'spree/api/orders/show')
37
+
38
+ if @order.next || @order.completed?
39
+ state_callback(:after)
40
+ respond_with(@order, default_template: 'spree/api/orders/show')
41
+ else
42
+ respond_with(@order, default_template: 'spree/api/orders/could_not_transition', status: 422)
43
+ end
39
44
  else
40
45
  invalid_resource!(@order)
41
46
  end
@@ -1,3 +1,3 @@
1
1
  object false
2
- node(:error) { I18n.t(:could_not_transition, :scope => "spree.api.order") }
2
+ node(:error) { I18n.t(:could_not_transition, scope: "spree.api.order") }
3
3
  node(:errors) { @order.errors.to_hash }
data/config/routes.rb CHANGED
@@ -62,7 +62,7 @@ Spree::Core::Engine.add_routes do
62
62
  end
63
63
 
64
64
  get '/orders/mine', to: 'orders#mine', as: 'my_orders'
65
- get "/orders/current", to: "orders#current", to: "orders#current", as: "current_order"
65
+ get "/orders/current", to: "orders#current", as: "current_order"
66
66
 
67
67
  resources :orders, concerns: :order_routes
68
68
 
@@ -1,19 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::CheckoutsController, :type => :controller do
4
+ describe Api::CheckoutsController, type: :controller do
5
5
  render_views
6
6
 
7
7
  before(:each) do
8
8
  stub_authentication!
9
9
  Spree::Config[:track_inventory_levels] = false
10
- country_zone = create(:zone, :name => 'CountryZone')
10
+ country_zone = create(:zone, name: 'CountryZone')
11
11
  @state = create(:state)
12
12
  @country = @state.country
13
- country_zone.members.create(:zoneable => @country)
13
+ country_zone.members.create(zoneable: @country)
14
14
  create(:stock_location)
15
15
 
16
- @shipping_method = create(:shipping_method, :zones => [country_zone])
16
+ @shipping_method = create(:shipping_method, zones: [country_zone])
17
17
  @payment_method = create(:credit_card_payment_method)
18
18
  end
19
19
 
@@ -31,14 +31,14 @@ module Spree
31
31
  end
32
32
 
33
33
  before(:each) do
34
- allow_any_instance_of(Order).to receive_messages(:confirmation_required? => true)
35
- allow_any_instance_of(Order).to receive_messages(:payment_required? => true)
34
+ allow_any_instance_of(Order).to receive_messages(confirmation_required?: true)
35
+ allow_any_instance_of(Order).to receive_messages(payment_required?: true)
36
36
  end
37
37
 
38
38
  it "should transition a recently created order from cart to address" do
39
39
  expect(order.state).to eq "cart"
40
40
  expect(order.email).not_to be_nil
41
- api_put :update, :id => order.to_param, :order_token => order.guest_token
41
+ api_put :update, id: order.to_param, order_token: order.guest_token
42
42
  expect(order.reload.state).to eq "address"
43
43
  end
44
44
 
@@ -52,16 +52,16 @@ module Spree
52
52
 
53
53
  it "can take line_items_attributes as a parameter" do
54
54
  line_item = order.line_items.first
55
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
56
- :order => { :line_items_attributes => { 0 => { :id => line_item.id, :quantity => 1 } } }
55
+ api_put :update, id: order.to_param, order_token: order.guest_token,
56
+ order: { line_items_attributes: { 0 => { id: line_item.id, quantity: 1 } } }
57
57
  expect(response.status).to eq(200)
58
58
  expect(order.reload.state).to eq "address"
59
59
  end
60
60
 
61
61
  it "can take line_items as a parameter" do
62
62
  line_item = order.line_items.first
63
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
64
- :order => { :line_items => { 0 => { :id => line_item.id, :quantity => 1 } } }
63
+ api_put :update, id: order.to_param, order_token: order.guest_token,
64
+ order: { line_items: { 0 => { id: line_item.id, quantity: 1 } } }
65
65
  expect(response.status).to eq(200)
66
66
  expect(order.reload.state).to eq "address"
67
67
  end
@@ -71,7 +71,7 @@ module Spree
71
71
  order.bill_address = nil
72
72
  order.save
73
73
  order.update_column(:state, "address")
74
- api_put :update, :id => order.to_param, :order_token => order.guest_token
74
+ api_put :update, id: order.to_param, order_token: order.guest_token
75
75
  # Order has not transitioned
76
76
  expect(response.status).to eq(422)
77
77
  end
@@ -83,38 +83,51 @@ module Spree
83
83
 
84
84
  let(:address) do
85
85
  {
86
- :firstname => 'John',
87
- :lastname => 'Doe',
88
- :address1 => '7735 Old Georgetown Road',
89
- :city => 'Bethesda',
90
- :phone => '3014445002',
91
- :zipcode => '20814',
92
- :state_id => @state.id,
93
- :country_id => @country.id
86
+ firstname: 'John',
87
+ lastname: 'Doe',
88
+ address1: '7735 Old Georgetown Road',
89
+ city: 'Bethesda',
90
+ phone: '3014445002',
91
+ zipcode: '20814',
92
+ state_id: @state.id,
93
+ country_id: @country.id
94
94
  }
95
95
  end
96
96
 
97
97
  it "can update addresses and transition from address to delivery" do
98
98
  api_put :update,
99
- :id => order.to_param, :order_token => order.guest_token,
100
- :order => {
101
- :bill_address_attributes => address,
102
- :ship_address_attributes => address
103
- }
99
+ id: order.to_param, order_token: order.guest_token,
100
+ order: {
101
+ bill_address_attributes: address,
102
+ ship_address_attributes: address
103
+ }
104
104
  expect(json_response['state']).to eq('delivery')
105
105
  expect(json_response['bill_address']['firstname']).to eq('John')
106
106
  expect(json_response['ship_address']['firstname']).to eq('John')
107
107
  expect(response.status).to eq(200)
108
108
  end
109
109
 
110
+ # Regression Spec for #5389 & #5880
111
+ it "can update addresses but not transition to delivery w/o shipping setup" do
112
+ Spree::ShippingMethod.destroy_all
113
+ api_put :update,
114
+ id: order.to_param, order_token: order.guest_token,
115
+ order: {
116
+ bill_address_attributes: address,
117
+ ship_address_attributes: address
118
+ }
119
+ expect(json_response['error']).to eq(I18n.t(:could_not_transition, scope: "spree.api.order"))
120
+ expect(response.status).to eq(422)
121
+ end
122
+
110
123
  # Regression test for #4498
111
124
  it "does not contain duplicate variant data in delivery return" do
112
125
  api_put :update,
113
- :id => order.to_param, :order_token => order.guest_token,
114
- :order => {
115
- :bill_address_attributes => address,
116
- :ship_address_attributes => address
117
- }
126
+ id: order.to_param, order_token: order.guest_token,
127
+ order: {
128
+ bill_address_attributes: address,
129
+ ship_address_attributes: address
130
+ }
118
131
  # Shipments manifests should not return the ENTIRE variant
119
132
  # This information is already present within the order's line items
120
133
  expect(json_response['shipments'].first['manifest'].first['variant']).to be_nil
@@ -124,11 +137,11 @@ module Spree
124
137
 
125
138
  it "can update shipping method and transition from delivery to payment" do
126
139
  order.update_column(:state, "delivery")
127
- shipment = create(:shipment, :order => order)
140
+ shipment = create(:shipment, order: order)
128
141
  shipment.refresh_rates
129
- shipping_rate = shipment.shipping_rates.where(:selected => false).first
130
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
131
- :order => { :shipments_attributes => { "0" => { :selected_shipping_rate_id => shipping_rate.id, :id => shipment.id } } }
142
+ shipping_rate = shipment.shipping_rates.where(selected: false).first
143
+ api_put :update, id: order.to_param, order_token: order.guest_token,
144
+ order: { shipments_attributes: { "0" => { selected_shipping_rate_id: shipping_rate.id, id: shipment.id } } }
132
145
  expect(response.status).to eq(200)
133
146
  # Find the correct shipment...
134
147
  json_shipment = json_response['shipments'].detect { |s| s["id"] == shipment.id }
@@ -142,8 +155,8 @@ module Spree
142
155
 
143
156
  it "can update payment method and transition from payment to confirm" do
144
157
  order.update_column(:state, "payment")
145
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
146
- :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id }] }
158
+ api_put :update, id: order.to_param, order_token: order.guest_token,
159
+ order: { payments_attributes: [{ payment_method_id: @payment_method.id }] }
147
160
  expect(json_response['state']).to eq('confirm')
148
161
  expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
149
162
  expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
@@ -153,16 +166,16 @@ module Spree
153
166
  it "can update payment method with source and transition from payment to confirm" do
154
167
  order.update_column(:state, "payment")
155
168
  source_attributes = {
156
- "number" => "4111111111111111",
157
- "month" => 1.month.from_now.month,
158
- "year" => 1.month.from_now.year,
159
- "verification_value" => "123",
160
- "name" => "Spree Commerce"
169
+ number: "4111111111111111",
170
+ month: 1.month.from_now.month,
171
+ year: 1.month.from_now.year,
172
+ verification_value: "123",
173
+ name: "Spree Commerce"
161
174
  }
162
175
 
163
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
164
- :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id.to_s }],
165
- :payment_source => { @payment_method.id.to_s => source_attributes } }
176
+ api_put :update, id: order.to_param, order_token: order.guest_token,
177
+ order: { payments_attributes: [{ payment_method_id: @payment_method.id.to_s }],
178
+ payment_source: { @payment_method.id.to_s => source_attributes } }
166
179
  expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
167
180
  expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
168
181
  expect(response.status).to eq(200)
@@ -170,11 +183,11 @@ module Spree
170
183
 
171
184
  it "returns errors when source is missing attributes" do
172
185
  order.update_column(:state, "payment")
173
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
174
- :order => {
175
- :payments_attributes => [{ :payment_method_id => @payment_method.id }]
186
+ api_put :update, id: order.to_param, order_token: order.guest_token,
187
+ order: {
188
+ payments_attributes: [{ payment_method_id: @payment_method.id }]
176
189
  },
177
- :payment_source => {
190
+ payment_source: {
178
191
  @payment_method.id.to_s => { name: "Spree" }
179
192
  }
180
193
 
@@ -190,24 +203,24 @@ module Spree
190
203
  order.update_column(:state, "payment")
191
204
  credit_card = create(:credit_card, user_id: order.user_id, payment_method_id: @payment_method.id)
192
205
 
193
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
194
- :order => { :existing_card => credit_card.id }
206
+ api_put :update, id: order.to_param, order_token: order.guest_token,
207
+ order: { existing_card: credit_card.id }
195
208
 
196
209
  expect(response.status).to eq 200
197
210
  expect(order.credit_cards).to match_array [credit_card]
198
211
  end
199
212
 
200
213
  it "can transition from confirm to complete" do
201
- order.update_column(:state, "confirm")
202
- allow_any_instance_of(Spree::Order).to receive_messages(:payment_required? => false)
203
- api_put :update, :id => order.to_param, :order_token => order.guest_token
214
+ order.update_columns(completed_at: Time.now, state: 'complete')
215
+ allow_any_instance_of(Spree::Order).to receive_messages(payment_required?: false)
216
+ api_put :update, id: order.to_param, order_token: order.guest_token
204
217
  expect(json_response['state']).to eq('complete')
205
218
  expect(response.status).to eq(200)
206
219
  end
207
220
 
208
221
  it "returns the order if the order is already complete" do
209
- order.update_column(:state, "complete")
210
- api_put :update, :id => order.to_param, :order_token => order.guest_token
222
+ order.update_columns(completed_at: Time.now, state: 'complete')
223
+ api_put :update, id: order.to_param, order_token: order.guest_token
211
224
  expect(json_response['number']).to eq(order.number)
212
225
  expect(response.status).to eq(200)
213
226
  end
@@ -215,8 +228,8 @@ module Spree
215
228
  # Regression test for #3784
216
229
  it "can update the special instructions for an order" do
217
230
  instructions = "Don't drop it. (Please)"
218
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
219
- :order => { :special_instructions => instructions }
231
+ api_put :update, id: order.to_param, order_token: order.guest_token,
232
+ order: { special_instructions: instructions }
220
233
  expect(json_response['special_instructions']).to eql(instructions)
221
234
  end
222
235
 
@@ -225,16 +238,16 @@ module Spree
225
238
  it "can assign a user to the order" do
226
239
  user = create(:user)
227
240
  # Need to pass email as well so that validations succeed
228
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
229
- :order => { :user_id => user.id, :email => "guest@spreecommerce.com" }
241
+ api_put :update, id: order.to_param, order_token: order.guest_token,
242
+ order: { user_id: user.id, email: "guest@spreecommerce.com" }
230
243
  expect(response.status).to eq(200)
231
244
  expect(json_response['user_id']).to eq(user.id)
232
245
  end
233
246
  end
234
247
 
235
248
  it "can assign an email to the order" do
236
- api_put :update, :id => order.to_param, :order_token => order.guest_token,
237
- :order => { :email => "guest@spreecommerce.com" }
249
+ api_put :update, id: order.to_param, order_token: order.guest_token,
250
+ order: { email: "guest@spreecommerce.com" }
238
251
  expect(json_response['email']).to eq("guest@spreecommerce.com")
239
252
  expect(response.status).to eq(200)
240
253
  end
@@ -244,8 +257,8 @@ module Spree
244
257
 
245
258
  order.update_column(:state, "payment")
246
259
  expect(PromotionHandler::Coupon).to receive(:new).with(order).and_call_original
247
- expect_any_instance_of(PromotionHandler::Coupon).to receive(:apply).and_return({:coupon_applied? => true})
248
- api_put :update, :id => order.to_param, :order_token => order.guest_token, :order => { :coupon_code => "foobar" }
260
+ expect_any_instance_of(PromotionHandler::Coupon).to receive(:apply).and_return({ coupon_applied?: true })
261
+ api_put :update, :id => order.to_param, order_token: order.guest_token, order: { coupon_code: "foobar" }
249
262
  end
250
263
  end
251
264
 
@@ -254,7 +267,7 @@ module Spree
254
267
  it "cannot transition to address without a line item" do
255
268
  order.line_items.delete_all
256
269
  order.update_column(:email, "spree@example.com")
257
- api_put :next, :id => order.to_param, :order_token => order.guest_token
270
+ api_put :next, id: order.to_param, order_token: order.guest_token
258
271
  expect(response.status).to eq(422)
259
272
  expect(json_response["errors"]["base"]).to include(Spree.t(:there_are_no_items_for_this_order))
260
273
  end
@@ -262,7 +275,7 @@ module Spree
262
275
  it "can transition an order to the next state" do
263
276
  order.update_column(:email, "spree@example.com")
264
277
 
265
- api_put :next, :id => order.to_param, :order_token => order.guest_token
278
+ api_put :next, id: order.to_param, order_token: order.guest_token
266
279
  expect(response.status).to eq(200)
267
280
  expect(json_response['state']).to eq('address')
268
281
  end
@@ -280,7 +293,7 @@ module Spree
280
293
 
281
294
  it "doesnt advance payment state if order has no payment" do
282
295
  order.update_column(:state, "payment")
283
- api_put :next, :id => order.to_param, :order_token => order.guest_token, :order => {}
296
+ api_put :next, id: order.to_param, order_token: order.guest_token, order: {}
284
297
  expect(json_response["errors"]["base"]).to include(Spree.t(:no_payment_found))
285
298
  end
286
299
  end
@@ -290,11 +303,11 @@ module Spree
290
303
 
291
304
  it 'continues to advance advances an order while it can move forward' do
292
305
  expect_any_instance_of(Spree::Order).to receive(:next).exactly(3).times.and_return(true, true, false)
293
- api_put :advance, :id => order.to_param, :order_token => order.guest_token
306
+ api_put :advance, id: order.to_param, order_token: order.guest_token
294
307
  end
295
308
 
296
309
  it 'returns the order' do
297
- api_put :advance, :id => order.to_param, :order_token => order.guest_token
310
+ api_put :advance, id: order.to_param, order_token: order.guest_token
298
311
  expect(json_response['id']).to eq(order.id)
299
312
  end
300
313
  end
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::ClassificationsController, :type => :controller do
4
+ describe Api::ClassificationsController, type: :controller do
5
5
  let(:taxon) do
6
6
  taxon = create(:taxon)
7
+
7
8
  3.times do
8
9
  product = create(:product)
9
10
  product.taxons << taxon
@@ -17,7 +18,7 @@ module Spree
17
18
 
18
19
  context "as a user" do
19
20
  it "cannot change the order of a product" do
20
- api_put :update, :taxon_id => taxon, :product_id => taxon.products.first, :position => 1
21
+ api_put :update, taxon_id: taxon, product_id: taxon.products.first, position: 1
21
22
  expect(response.status).to eq(401)
22
23
  end
23
24
  end
@@ -25,14 +26,23 @@ module Spree
25
26
  context "as an admin" do
26
27
  sign_in_as_admin!
27
28
 
29
+ let(:last_product) { taxon.products.last }
30
+
28
31
  it "can change the order a product" do
29
- last_product = taxon.products.last
30
- classification = taxon.classifications.find_by(:product_id => last_product.id)
32
+ classification = taxon.classifications.find_by(product_id: last_product.id)
31
33
  expect(classification.position).to eq(3)
32
- api_put :update, :taxon_id => taxon, :product_id => last_product, :position => 0
34
+ api_put :update, taxon_id: taxon, product_id: last_product, position: 0
33
35
  expect(response.status).to eq(200)
34
36
  expect(classification.reload.position).to eq(1)
35
37
  end
38
+
39
+ it "should touch the taxon" do
40
+ taxon.update_attributes(updated_at: Time.now - 10.seconds)
41
+ taxon_last_updated_at = taxon.updated_at
42
+ api_put :update, taxon_id: taxon, product_id: last_product, position: 0
43
+ taxon.reload
44
+ expect(taxon_last_updated_at.to_i).to_not eq(taxon.updated_at.to_i)
45
+ end
36
46
  end
37
47
  end
38
- end
48
+ end
@@ -35,7 +35,7 @@ module Spree
35
35
  "seo_title" => nil,
36
36
  "mail_from_address" => "spree@example.org",
37
37
  "default_currency" => nil,
38
- "code" => "spree_1",
38
+ "code" => store.code,
39
39
  "default" => true
40
40
  },
41
41
  {
@@ -47,7 +47,7 @@ module Spree
47
47
  "seo_title" => nil,
48
48
  "mail_from_address" => "spree@example.org",
49
49
  "default_currency" => nil,
50
- "code" => "spree_2",
50
+ "code" => non_default_store.code,
51
51
  "default" => false
52
52
  }
53
53
  ])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.2
4
+ version: 2.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Bigg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2015-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.2
19
+ version: 2.4.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 2.4.2
26
+ version: 2.4.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rabl
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -266,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
266
  version: '0'
267
267
  requirements: []
268
268
  rubyforge_project:
269
- rubygems_version: 2.2.2
269
+ rubygems_version: 2.4.5
270
270
  signing_key:
271
271
  specification_version: 4
272
272
  summary: Spree's API