spree_api 2.4.2 → 2.4.3

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