spree_api 3.1.5 → 3.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/api/v1/product_properties_controller.rb +7 -10
  3. data/app/views/spree/api/v1/countries/index.v1.rabl +1 -1
  4. data/app/views/spree/api/v1/credit_cards/index.v1.rabl +1 -1
  5. data/app/views/spree/api/v1/orders/index.v1.rabl +1 -1
  6. data/app/views/spree/api/v1/orders/mine.v1.rabl +1 -1
  7. data/app/views/spree/api/v1/payments/index.v1.rabl +1 -1
  8. data/app/views/spree/api/v1/product_properties/index.v1.rabl +1 -1
  9. data/app/views/spree/api/v1/products/index.v1.rabl +1 -1
  10. data/app/views/spree/api/v1/properties/index.v1.rabl +1 -1
  11. data/app/views/spree/api/v1/return_authorizations/index.v1.rabl +1 -1
  12. data/app/views/spree/api/v1/shipments/mine.v1.rabl +1 -1
  13. data/app/views/spree/api/v1/states/index.v1.rabl +1 -1
  14. data/app/views/spree/api/v1/stock_items/index.v1.rabl +1 -1
  15. data/app/views/spree/api/v1/stock_locations/index.v1.rabl +1 -1
  16. data/app/views/spree/api/v1/stock_movements/index.v1.rabl +1 -1
  17. data/app/views/spree/api/v1/taxonomies/index.v1.rabl +1 -1
  18. data/app/views/spree/api/v1/taxons/index.v1.rabl +1 -1
  19. data/app/views/spree/api/v1/users/index.v1.rabl +1 -1
  20. data/app/views/spree/api/v1/zones/index.v1.rabl +1 -1
  21. data/spree_api.gemspec +1 -2
  22. metadata +6 -88
  23. data/spec/controllers/spree/api/base_controller_spec.rb +0 -96
  24. data/spec/controllers/spree/api/v1/addresses_controller_spec.rb +0 -56
  25. data/spec/controllers/spree/api/v1/checkouts_controller_spec.rb +0 -363
  26. data/spec/controllers/spree/api/v1/classifications_controller_spec.rb +0 -48
  27. data/spec/controllers/spree/api/v1/countries_controller_spec.rb +0 -48
  28. data/spec/controllers/spree/api/v1/credit_cards_controller_spec.rb +0 -80
  29. data/spec/controllers/spree/api/v1/images_controller_spec.rb +0 -115
  30. data/spec/controllers/spree/api/v1/inventory_units_controller_spec.rb +0 -49
  31. data/spec/controllers/spree/api/v1/line_items_controller_spec.rb +0 -184
  32. data/spec/controllers/spree/api/v1/option_types_controller_spec.rb +0 -122
  33. data/spec/controllers/spree/api/v1/option_values_controller_spec.rb +0 -141
  34. data/spec/controllers/spree/api/v1/orders_controller_spec.rb +0 -735
  35. data/spec/controllers/spree/api/v1/payments_controller_spec.rb +0 -234
  36. data/spec/controllers/spree/api/v1/product_properties_controller_spec.rb +0 -116
  37. data/spec/controllers/spree/api/v1/products_controller_spec.rb +0 -409
  38. data/spec/controllers/spree/api/v1/promotion_application_spec.rb +0 -50
  39. data/spec/controllers/spree/api/v1/promotions_controller_spec.rb +0 -64
  40. data/spec/controllers/spree/api/v1/properties_controller_spec.rb +0 -102
  41. data/spec/controllers/spree/api/v1/return_authorizations_controller_spec.rb +0 -161
  42. data/spec/controllers/spree/api/v1/shipments_controller_spec.rb +0 -187
  43. data/spec/controllers/spree/api/v1/states_controller_spec.rb +0 -86
  44. data/spec/controllers/spree/api/v1/stock_items_controller_spec.rb +0 -143
  45. data/spec/controllers/spree/api/v1/stock_locations_controller_spec.rb +0 -113
  46. data/spec/controllers/spree/api/v1/stock_movements_controller_spec.rb +0 -84
  47. data/spec/controllers/spree/api/v1/stores_controller_spec.rb +0 -133
  48. data/spec/controllers/spree/api/v1/taxonomies_controller_spec.rb +0 -114
  49. data/spec/controllers/spree/api/v1/taxons_controller_spec.rb +0 -177
  50. data/spec/controllers/spree/api/v1/unauthenticated_products_controller_spec.rb +0 -26
  51. data/spec/controllers/spree/api/v1/users_controller_spec.rb +0 -153
  52. data/spec/controllers/spree/api/v1/variants_controller_spec.rb +0 -205
  53. data/spec/controllers/spree/api/v1/zones_controller_spec.rb +0 -91
  54. data/spec/fixtures/thinking-cat.jpg +0 -0
  55. data/spec/models/spree/legacy_user_spec.rb +0 -19
  56. data/spec/requests/rabl_cache_spec.rb +0 -32
  57. data/spec/requests/ransackable_attributes_spec.rb +0 -79
  58. data/spec/requests/version_spec.rb +0 -19
  59. data/spec/shared_examples/protect_product_actions.rb +0 -17
  60. data/spec/spec_helper.rb +0 -55
  61. data/spec/support/controller_hacks.rb +0 -33
  62. data/spec/support/database_cleaner.rb +0 -14
  63. data/spec/support/have_attributes_matcher.rb +0 -13
@@ -1,56 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Api::V1::AddressesController, :type => :controller do
5
- render_views
6
-
7
- before do
8
- stub_authentication!
9
- @address = create(:address)
10
- @order = create(:order, :bill_address => @address)
11
- end
12
-
13
- context "with their own address" do
14
- before do
15
- allow_any_instance_of(Order).to receive_messages :user => current_api_user
16
- end
17
-
18
- it "gets an address" do
19
- api_get :show, :id => @address.id, :order_id => @order.number
20
- expect(json_response['address1']).to eq @address.address1
21
- end
22
-
23
- it "updates an address" do
24
- api_put :update, :id => @address.id, :order_id => @order.number,
25
- :address => { :address1 => "123 Test Lane" }
26
- expect(json_response['address1']).to eq '123 Test Lane'
27
- end
28
-
29
- it "receives the errors object if address is invalid" do
30
- api_put :update, :id => @address.id, :order_id => @order.number,
31
- :address => { :address1 => "" }
32
-
33
- expect(json_response['error']).not_to be_nil
34
- expect(json_response['errors']).not_to be_nil
35
- expect(json_response['errors']['address1'].first).to eq "can't be blank"
36
- end
37
- end
38
-
39
- context "on an address that does not belong to this order" do
40
- before do
41
- @order.bill_address_id = nil
42
- @order.ship_address = nil
43
- end
44
-
45
- it "cannot retrieve address information" do
46
- api_get :show, :id => @address.id, :order_id => @order.number
47
- assert_unauthorized!
48
- end
49
-
50
- it "cannot update address information" do
51
- api_get :update, :id => @address.id, :order_id => @order.number
52
- assert_unauthorized!
53
- end
54
- end
55
- end
56
- end
@@ -1,363 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Api::V1::CheckoutsController, type: :controller do
5
- render_views
6
-
7
- shared_examples_for 'action which loads order using load_order_with_lock' do
8
- before do
9
- allow(controller).to receive(:load_order).with(true).and_return(true)
10
- end
11
-
12
- it 'should invoke load_order_with_lock' do
13
- expect(controller).to receive(:load_order_with_lock).exactly(1).times
14
- end
15
-
16
- it 'should invoke load_order' do
17
- expect(controller).to receive(:load_order).with(true).exactly(1).times.and_return(true)
18
- end
19
-
20
- context 'ensure no double_render_error' do
21
- before do
22
- def controller.load_order(*)
23
- respond_with(@order, default_template: 'spree/api/v1/orders/show', status: 200)
24
- end
25
- end
26
-
27
- it 'should not generate double_render_error' do
28
- expect(response).to be_success
29
- end
30
- end
31
-
32
- after do
33
- send_request
34
- end
35
- end
36
-
37
- before(:each) do
38
- stub_authentication!
39
- Spree::Config[:track_inventory_levels] = false
40
- country_zone = create(:zone, name: 'CountryZone')
41
- @state = create(:state)
42
- @country = @state.country
43
- country_zone.members.create(zoneable: @country)
44
- create(:stock_location)
45
-
46
- @shipping_method = create(:shipping_method, zones: [country_zone])
47
- @payment_method = create(:credit_card_payment_method)
48
- end
49
-
50
- after do
51
- Spree::Config[:track_inventory_levels] = true
52
- end
53
-
54
- context "PUT 'update'" do
55
- let(:order) do
56
- order = create(:order_with_line_items)
57
- # Order should be in a pristine state
58
- # Without doing this, the order may transition from 'cart' straight to 'delivery'
59
- order.shipments.delete_all
60
- order
61
- end
62
-
63
- before(:each) do
64
- allow_any_instance_of(Order).to receive_messages(confirmation_required?: true)
65
- allow_any_instance_of(Order).to receive_messages(payment_required?: true)
66
- end
67
-
68
- it "should transition a recently created order from cart to address" do
69
- expect(order.state).to eq "cart"
70
- expect(order.email).not_to be_nil
71
- api_put :update, id: order.to_param, order_token: order.guest_token
72
- expect(order.reload.state).to eq "address"
73
- end
74
-
75
- it "should transition a recently created order from cart to address with order token in header" do
76
- expect(order.state).to eq "cart"
77
- expect(order.email).not_to be_nil
78
- request.headers["X-Spree-Order-Token"] = order.guest_token
79
- api_put :update, :id => order.to_param
80
- expect(order.reload.state).to eq "address"
81
- end
82
-
83
- it "can take line_items_attributes as a parameter" do
84
- line_item = order.line_items.first
85
- api_put :update, id: order.to_param, order_token: order.guest_token,
86
- order: { line_items_attributes: { 0 => { id: line_item.id, quantity: 1 } } }
87
- expect(response.status).to eq(200)
88
- expect(order.reload.state).to eq "address"
89
- end
90
-
91
- it "can take line_items as a parameter" do
92
- line_item = order.line_items.first
93
- api_put :update, id: order.to_param, order_token: order.guest_token,
94
- order: { line_items: { 0 => { id: line_item.id, quantity: 1 } } }
95
- expect(response.status).to eq(200)
96
- expect(order.reload.state).to eq "address"
97
- end
98
-
99
- it "will return an error if the order cannot transition" do
100
- skip "not sure if this test is valid"
101
- order.bill_address = nil
102
- order.save
103
- order.update_column(:state, "address")
104
- api_put :update, id: order.to_param, order_token: order.guest_token
105
- # Order has not transitioned
106
- expect(response.status).to eq(422)
107
- end
108
-
109
- context "transitioning to delivery" do
110
- before do
111
- order.update_column(:state, "address")
112
- end
113
-
114
- let(:address) do
115
- {
116
- firstname: 'John',
117
- lastname: 'Doe',
118
- address1: '7735 Old Georgetown Road',
119
- city: 'Bethesda',
120
- phone: '3014445002',
121
- zipcode: '20814',
122
- state_id: @state.id,
123
- country_id: @country.id
124
- }
125
- end
126
-
127
- it "can update addresses and transition from address to delivery" do
128
- api_put :update,
129
- id: order.to_param, order_token: order.guest_token,
130
- order: {
131
- bill_address_attributes: address,
132
- ship_address_attributes: address
133
- }
134
- expect(json_response['state']).to eq('delivery')
135
- expect(json_response['bill_address']['firstname']).to eq('John')
136
- expect(json_response['ship_address']['firstname']).to eq('John')
137
- expect(response.status).to eq(200)
138
- end
139
-
140
- # Regression Spec for #5389 & #5880
141
- it "can update addresses but not transition to delivery w/o shipping setup" do
142
- Spree::ShippingMethod.destroy_all
143
- api_put :update,
144
- id: order.to_param, order_token: order.guest_token,
145
- order: {
146
- bill_address_attributes: address,
147
- ship_address_attributes: address
148
- }
149
- expect(json_response['error']).to eq(I18n.t(:could_not_transition, scope: "spree.api.order"))
150
- expect(response.status).to eq(422)
151
- end
152
-
153
- # Regression test for #4498
154
- it "does not contain duplicate variant data in delivery return" do
155
- api_put :update,
156
- id: order.to_param, order_token: order.guest_token,
157
- order: {
158
- bill_address_attributes: address,
159
- ship_address_attributes: address
160
- }
161
- # Shipments manifests should not return the ENTIRE variant
162
- # This information is already present within the order's line items
163
- expect(json_response['shipments'].first['manifest'].first['variant']).to be_nil
164
- expect(json_response['shipments'].first['manifest'].first['variant_id']).to_not be_nil
165
- end
166
- end
167
-
168
- it "can update shipping method and transition from delivery to payment" do
169
- order.update_column(:state, "delivery")
170
- shipment = create(:shipment, order: order)
171
- shipment.refresh_rates
172
- shipping_rate = shipment.shipping_rates.where(selected: false).first
173
- api_put :update, id: order.to_param, order_token: order.guest_token,
174
- order: { shipments_attributes: { "0" => { selected_shipping_rate_id: shipping_rate.id, id: shipment.id } } }
175
- expect(response.status).to eq(200)
176
- # Find the correct shipment...
177
- json_shipment = json_response['shipments'].detect { |s| s["id"] == shipment.id }
178
- # Find the correct shipping rate for that shipment...
179
- json_shipping_rate = json_shipment['shipping_rates'].detect { |sr| sr["id"] == shipping_rate.id }
180
- # ... And finally ensure that it's selected
181
- expect(json_shipping_rate['selected']).to be true
182
- # Order should automatically transfer to payment because all criteria are met
183
- expect(json_response['state']).to eq('payment')
184
- end
185
-
186
- it "can update payment method and transition from payment to confirm" do
187
- order.update_column(:state, "payment")
188
- api_put :update, id: order.to_param, order_token: order.guest_token,
189
- order: { payments_attributes: [{ payment_method_id: @payment_method.id }] }
190
- expect(json_response['state']).to eq('confirm')
191
- expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
192
- expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
193
- expect(response.status).to eq(200)
194
- end
195
-
196
- it "can update payment method with source and transition from payment to confirm" do
197
- order.update_column(:state, "payment")
198
- source_attributes = {
199
- number: "4111111111111111",
200
- month: 1.month.from_now.month,
201
- year: 1.month.from_now.year,
202
- verification_value: "123",
203
- name: "Spree Commerce"
204
- }
205
-
206
- api_put :update, id: order.to_param, order_token: order.guest_token,
207
- order: { payments_attributes: [{ payment_method_id: @payment_method.id.to_s }],
208
- payment_source: { @payment_method.id.to_s => source_attributes } }
209
- expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
210
- expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
211
- expect(response.status).to eq(200)
212
- end
213
-
214
- it "returns errors when source is missing attributes" do
215
- order.update_column(:state, "payment")
216
- api_put :update, id: order.to_param, order_token: order.guest_token,
217
- order: {
218
- payments_attributes: [{ payment_method_id: @payment_method.id }]
219
- },
220
- payment_source: {
221
- @payment_method.id.to_s => { name: "Spree" }
222
- }
223
-
224
- expect(response.status).to eq(422)
225
- cc_errors = json_response['errors']['payments.Credit Card']
226
- expect(cc_errors).to include("Number can't be blank")
227
- expect(cc_errors).to include("Month is not a number")
228
- expect(cc_errors).to include("Year is not a number")
229
- expect(cc_errors).to include("Verification Value can't be blank")
230
- end
231
-
232
- it "allow users to reuse a credit card" do
233
- order.update_column(:state, "payment")
234
- credit_card = create(:credit_card, user_id: order.user_id, payment_method_id: @payment_method.id)
235
-
236
- api_put :update, id: order.to_param, order_token: order.guest_token,
237
- order: { existing_card: credit_card.id }
238
-
239
- expect(response.status).to eq 200
240
- expect(order.credit_cards).to match_array [credit_card]
241
- end
242
-
243
- it "can transition from confirm to complete" do
244
- order.update_columns(state: 'confirm')
245
- allow_any_instance_of(Spree::Order).to receive_messages(payment_required?: false)
246
- api_put :update, id: order.to_param, order_token: order.guest_token
247
- expect(json_response['state']).to eq('complete')
248
- expect(response.status).to eq(200)
249
- end
250
-
251
- it "returns the order if the order is already complete" do
252
- order.update_columns(completed_at: Time.current, state: 'complete')
253
- api_put :update, id: order.to_param, order_token: order.guest_token
254
- expect(json_response['number']).to eq(order.number)
255
- expect(response.status).to eq(200)
256
- end
257
-
258
- # Regression test for #3784
259
- it "can update the special instructions for an order" do
260
- instructions = "Don't drop it. (Please)"
261
- api_put :update, id: order.to_param, order_token: order.guest_token,
262
- order: { special_instructions: instructions }
263
- expect(json_response['special_instructions']).to eql(instructions)
264
- end
265
-
266
- context "as an admin" do
267
- sign_in_as_admin!
268
- it "can assign a user to the order" do
269
- user = create(:user)
270
- # Need to pass email as well so that validations succeed
271
- api_put :update, id: order.to_param, order_token: order.guest_token,
272
- order: { user_id: user.id, email: "guest@spreecommerce.com" }
273
- expect(response.status).to eq(200)
274
- expect(json_response['user_id']).to eq(user.id)
275
- end
276
- end
277
-
278
- it "can assign an email to the order" do
279
- api_put :update, id: order.to_param, order_token: order.guest_token,
280
- order: { email: "guest@spreecommerce.com" }
281
- expect(json_response['email']).to eq("guest@spreecommerce.com")
282
- expect(response.status).to eq(200)
283
- end
284
-
285
- it "can apply a coupon code to an order" do
286
- skip "ensure that the order totals are properly updated, see frontend orders_controller or checkout_controller as example"
287
-
288
- order.update_column(:state, "payment")
289
- expect(PromotionHandler::Coupon).to receive(:new).with(order).and_call_original
290
- expect_any_instance_of(PromotionHandler::Coupon).to receive(:apply).and_return({ coupon_applied?: true })
291
- api_put :update, :id => order.to_param, order_token: order.guest_token, order: { coupon_code: "foobar" }
292
- end
293
-
294
- def send_request
295
- api_put :update, id: order.to_param, order_token: order.guest_token
296
- end
297
-
298
- it_should_behave_like 'action which loads order using load_order_with_lock'
299
- end
300
-
301
- context "PUT 'next'" do
302
- let!(:order) { create(:order_with_line_items) }
303
- it "cannot transition to address without a line item" do
304
- order.line_items.delete_all
305
- order.update_column(:email, "spree@example.com")
306
- api_put :next, id: order.to_param, order_token: order.guest_token
307
- expect(response.status).to eq(422)
308
- expect(json_response["errors"]["base"]).to include(Spree.t(:there_are_no_items_for_this_order))
309
- end
310
-
311
- it "can transition an order to the next state" do
312
- order.update_column(:email, "spree@example.com")
313
-
314
- api_put :next, id: order.to_param, order_token: order.guest_token
315
- expect(response.status).to eq(200)
316
- expect(json_response['state']).to eq('address')
317
- end
318
-
319
- it "cannot transition if order email is blank" do
320
- order.update_columns(
321
- state: 'address',
322
- email: nil
323
- )
324
-
325
- api_put :next, :id => order.to_param, :order_token => order.guest_token
326
- expect(response.status).to eq(422)
327
- expect(json_response['error']).to match(/could not be transitioned/)
328
- end
329
-
330
- it "doesnt advance payment state if order has no payment" do
331
- order.update_column(:state, "payment")
332
- api_put :next, id: order.to_param, order_token: order.guest_token, order: {}
333
- expect(json_response["errors"]["base"]).to include(Spree.t(:no_payment_found))
334
- end
335
-
336
- def send_request
337
- api_put :next, id: order.to_param, order_token: order.guest_token
338
- end
339
-
340
- it_should_behave_like 'action which loads order using load_order_with_lock'
341
- end
342
-
343
- context "PUT 'advance'" do
344
- let!(:order) { create(:order_with_line_items) }
345
-
346
- it 'continues to advance advances an order while it can move forward' do
347
- expect_any_instance_of(Spree::Order).to receive(:next).exactly(3).times.and_return(true, true, false)
348
- api_put :advance, id: order.to_param, order_token: order.guest_token
349
- end
350
-
351
- it 'returns the order' do
352
- api_put :advance, id: order.to_param, order_token: order.guest_token
353
- expect(json_response['id']).to eq(order.id)
354
- end
355
-
356
- def send_request
357
- api_put :advance, id: order.to_param, order_token: order.guest_token
358
- end
359
-
360
- it_should_behave_like 'action which loads order using load_order_with_lock'
361
- end
362
- end
363
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Api::V1::ClassificationsController, type: :controller do
5
- let(:taxon) do
6
- taxon = create(:taxon)
7
-
8
- 3.times do
9
- product = create(:product)
10
- product.taxons << taxon
11
- end
12
- taxon
13
- end
14
-
15
- before do
16
- stub_authentication!
17
- end
18
-
19
- context "as a user" do
20
- it "cannot change the order of a product" do
21
- api_put :update, taxon_id: taxon, product_id: taxon.products.first, position: 1
22
- expect(response.status).to eq(401)
23
- end
24
- end
25
-
26
- context "as an admin" do
27
- sign_in_as_admin!
28
-
29
- let(:last_product) { taxon.products.last }
30
-
31
- it "can change the order a product" do
32
- classification = taxon.classifications.find_by(product_id: last_product.id)
33
- expect(classification.position).to eq(3)
34
- api_put :update, taxon_id: taxon, product_id: last_product, position: 0
35
- expect(response.status).to eq(200)
36
- expect(classification.reload.position).to eq(1)
37
- end
38
-
39
- it "should touch the taxon" do
40
- taxon.update_attributes(updated_at: Time.current - 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
46
- end
47
- end
48
- end