solidus_api 2.2.2 → 2.3.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_api might be problematic. Click here for more details.

Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/api/images_controller.rb +2 -2
  3. data/app/controllers/spree/api/line_items_controller.rb +2 -10
  4. data/app/controllers/spree/api/orders_controller.rb +2 -12
  5. data/app/controllers/spree/api/payments_controller.rb +0 -1
  6. data/app/controllers/spree/api/promotions_controller.rb +1 -1
  7. data/app/controllers/spree/api/variants_controller.rb +2 -1
  8. data/app/views/spree/api/orders/show.v1.rabl +2 -1
  9. data/lib/spree/api/testing_support/setup.rb +1 -1
  10. data/spec/controllers/spree/api/base_controller_spec.rb +7 -7
  11. data/spec/controllers/spree/api/resource_controller_spec.rb +16 -16
  12. data/spec/requests/api/address_books_spec.rb +1 -1
  13. data/spec/{controllers → requests}/spree/api/addresses_controller_spec.rb +6 -9
  14. data/spec/{controllers → requests}/spree/api/checkouts_controller_spec.rb +38 -69
  15. data/spec/{controllers → requests}/spree/api/classifications_controller_spec.rb +4 -4
  16. data/spec/{controllers → requests}/spree/api/config_controller_spec.rb +3 -4
  17. data/spec/{controllers → requests}/spree/api/countries_controller_spec.rb +6 -7
  18. data/spec/{controllers → requests}/spree/api/credit_cards_controller_spec.rb +8 -9
  19. data/spec/{controllers → requests}/spree/api/images_controller_spec.rb +19 -16
  20. data/spec/{controllers → requests}/spree/api/inventory_units_controller_spec.rb +17 -14
  21. data/spec/{controllers → requests}/spree/api/line_items_controller_spec.rb +32 -32
  22. data/spec/{controllers → requests}/spree/api/option_types_controller_spec.rb +27 -27
  23. data/spec/{controllers → requests}/spree/api/option_values_controller_spec.rb +32 -29
  24. data/spec/{controllers → requests}/spree/api/orders_controller_spec.rb +103 -133
  25. data/spec/{controllers → requests}/spree/api/payments_controller_spec.rb +30 -44
  26. data/spec/{controllers → requests}/spree/api/product_properties_controller_spec.rb +15 -17
  27. data/spec/{controllers → requests}/spree/api/products_controller_spec.rb +44 -43
  28. data/spec/{controllers → requests}/spree/api/promotion_application_spec.rb +3 -4
  29. data/spec/{controllers → requests}/spree/api/promotions_controller_spec.rb +8 -6
  30. data/spec/{controllers → requests}/spree/api/properties_controller_spec.rb +15 -16
  31. data/spec/{controllers → requests}/spree/api/return_authorizations_controller_spec.rb +19 -21
  32. data/spec/requests/spree/api/shipments_controller_spec.rb +394 -88
  33. data/spec/{controllers → requests}/spree/api/states_controller_spec.rb +8 -9
  34. data/spec/{controllers → requests}/spree/api/stock_items_controller_spec.rb +21 -21
  35. data/spec/{controllers → requests}/spree/api/stock_locations_controller_spec.rb +18 -20
  36. data/spec/{controllers → requests}/spree/api/stock_movements_controller_spec.rb +9 -12
  37. data/spec/{controllers → requests}/spree/api/stock_transfers_controller_spec.rb +2 -3
  38. data/spec/requests/spree/api/store_credit_events_controller_spec.rb +57 -0
  39. data/spec/{controllers → requests}/spree/api/stores_controller_spec.rb +19 -20
  40. data/spec/{controllers → requests}/spree/api/taxonomies_controller_spec.rb +14 -15
  41. data/spec/{controllers → requests}/spree/api/taxons_controller_spec.rb +17 -18
  42. data/spec/{controllers → requests}/spree/api/transfer_items_controller_spec.rb +7 -9
  43. data/spec/{controllers → requests}/spree/api/unauthenticated_products_controller_spec.rb +2 -3
  44. data/spec/{controllers → requests}/spree/api/users_controller_spec.rb +18 -19
  45. data/spec/{controllers → requests}/spree/api/variants_controller_spec.rb +70 -37
  46. data/spec/{controllers → requests}/spree/api/zones_controller_spec.rb +13 -14
  47. data/spec/shared_examples/protect_product_actions.rb +3 -3
  48. data/spec/spec_helper.rb +4 -1
  49. metadata +70 -72
  50. data/spec/controllers/spree/api/shipments_controller_spec.rb +0 -301
  51. data/spec/controllers/spree/api/store_credit_events_controller_spec.rb +0 -66
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9bf090ca7d6dce9405c4514004a088dffe253498
4
- data.tar.gz: 59d40cff4dc3259b807d908b0cb3b8f23c74561d
3
+ metadata.gz: 928c0cebd7463ee3e18cfc1908bf8ca8159bed63
4
+ data.tar.gz: ce51986e249ddbdbba441aa0f2129fcb5d4d7566
5
5
  SHA512:
6
- metadata.gz: 1d6706de3c8ca25c4b136b531198faa318011731298ce37826f0ad9ee9c0ed869f579666c73966ae3b69c95fce7e163cddcdea33970ae06ddc89c869db83f02f
7
- data.tar.gz: 6caefd25b36f1e933ec25597c565243fafc00c821100e4481a384fd12351783bfff379cd2e067c7c0f6d2f8a02f33247e4be10dd5d4aba9cf09f2894c29d1bb0
6
+ metadata.gz: cf5bce9111f255c90f026c5b5ea8197782be2376bf13196717f3cc499dc7c9a4ee70181d358391489463329afae41393887f4460ae60bf5bb619a833e49b4656
7
+ data.tar.gz: a10878a8da640034946b6fc4c20933814022bd542aa6ad8b0973bb20cdf5810d512c9a1d659cd618f049cedf5134fec625cdbee27460c346f81898081e98b86b
@@ -18,13 +18,13 @@ module Spree
18
18
  end
19
19
 
20
20
  def update
21
- @image = scope.images.accessible_by(current_ability, :update).find(params[:id])
21
+ @image = Spree::Image.accessible_by(current_ability, :update).find(params[:id])
22
22
  @image.update_attributes(image_params)
23
23
  respond_with(@image, default_template: :show)
24
24
  end
25
25
 
26
26
  def destroy
27
- @image = scope.images.accessible_by(current_ability, :destroy).find(params[:id])
27
+ @image = Spree::Image.accessible_by(current_ability, :destroy).find(params[:id])
28
28
  @image.destroy
29
29
  respond_with(@image, status: 204)
30
30
  end
@@ -1,10 +1,6 @@
1
1
  module Spree
2
2
  module Api
3
3
  class LineItemsController < Spree::Api::BaseController
4
- class_attribute :line_item_options
5
-
6
- self.line_item_options = []
7
-
8
4
  before_action :load_order, only: [:create, :update, :destroy]
9
5
  around_action :lock_order, only: [:create, :update, :destroy]
10
6
 
@@ -18,7 +14,7 @@ module Spree
18
14
  params[:line_item][:quantity] || 1,
19
15
  {
20
16
  stock_location_quantities: params[:line_item][:stock_location_quantities]
21
- }.merge(line_item_params[:options].to_h || {})
17
+ }.merge({ options: line_item_params[:options].to_h })
22
18
  )
23
19
 
24
20
  if @line_item.errors.empty?
@@ -66,11 +62,7 @@ module Spree
66
62
  end
67
63
 
68
64
  def line_item_params
69
- params.require(:line_item).permit(
70
- :quantity,
71
- :variant_id,
72
- options: line_item_options
73
- )
65
+ params.require(:line_item).permit(permitted_line_item_attributes)
74
66
  end
75
67
  end
76
68
  end
@@ -27,18 +27,8 @@ module Spree
27
27
 
28
28
  def create
29
29
  authorize! :create, Order
30
-
31
- if can?(:admin, Order)
32
- @order = Spree::Core::Importer::Order.import(determine_order_user, order_params)
33
- respond_with(@order, default_template: :show, status: 201)
34
- else
35
- @order = Spree::Order.create!(user: current_api_user, store: current_store)
36
- if OrderUpdateAttributes.new(@order, order_params).apply
37
- respond_with(@order, default_template: :show, status: 201)
38
- else
39
- invalid_resource!(@order)
40
- end
41
- end
30
+ @order = Spree::Core::Importer::Order.import(determine_order_user, order_params)
31
+ respond_with(@order, default_template: :show, status: 201)
42
32
  end
43
33
 
44
34
  def empty
@@ -16,7 +16,6 @@ module Spree
16
16
  end
17
17
 
18
18
  def create
19
- @order.validate_payments_attributes(payment_params)
20
19
  @payment = PaymentCreate.new(@order, payment_params).build
21
20
  if @payment.save
22
21
  respond_with(@payment, status: 201, default_template: :show)
@@ -20,7 +20,7 @@ module Spree
20
20
  end
21
21
 
22
22
  def load_promotion
23
- @promotion = Spree::Promotion.find_by_id(params[:id]) || Spree::Promotion.with_coupon_code(params[:id])
23
+ @promotion = Spree::Promotion.find_by(id: params[:id]) || Spree::Promotion.with_coupon_code(params[:id])
24
24
  end
25
25
  end
26
26
  end
@@ -65,8 +65,9 @@ module Spree
65
65
  variants = variants.with_deleted
66
66
  end
67
67
 
68
+ in_stock_only = ActiveRecord::Type::Boolean.new.cast(params[:in_stock_only])
68
69
  variants = variants.accessible_by(current_ability, :read)
69
- variants = variants.in_stock if params[:in_stock_only] || cannot?(:view_out_of_stock, Spree::Variant)
70
+ variants = variants.in_stock if in_stock_only || cannot?(:view_out_of_stock, Spree::Variant)
70
71
  variants
71
72
  end
72
73
 
@@ -2,7 +2,8 @@ object @order
2
2
  extends "spree/api/orders/order"
3
3
 
4
4
  child :available_payment_methods => :payment_methods do
5
- attributes :id, :name, :method_type
5
+ attributes :id, :name, :partial_name
6
+ attributes :partial_name, as: :method_type
6
7
  end
7
8
 
8
9
  child :billing_address => :bill_address do
@@ -4,7 +4,7 @@ module Spree
4
4
  module Setup
5
5
  def sign_in_as_admin!
6
6
  let!(:current_api_user) do
7
- stub_model(Spree::LegacyUser, spree_roles: [Spree::Role.new(name: 'admin')])
7
+ stub_model(Spree::LegacyUser, spree_roles: [Spree::Role.find_or_initialize_by(name: 'admin')])
8
8
  end
9
9
  end
10
10
  end
@@ -24,19 +24,19 @@ describe Spree::Api::BaseController, type: :controller do
24
24
 
25
25
  context "with a correct order token" do
26
26
  it "succeeds" do
27
- api_get :index, order_token: order.guest_token, order_id: order.number
27
+ get :index, params: { order_token: order.guest_token, order_id: order.number }
28
28
  expect(response.status).to eq(200)
29
29
  end
30
30
 
31
31
  it "succeeds with an order_number parameter" do
32
- api_get :index, order_token: order.guest_token, order_number: order.number
32
+ get :index, params: { order_token: order.guest_token, order_number: order.number }
33
33
  expect(response.status).to eq(200)
34
34
  end
35
35
  end
36
36
 
37
37
  context "with an incorrect order token" do
38
38
  it "returns unauthorized" do
39
- api_get :index, order_token: "NOT_A_TOKEN", order_id: order.number
39
+ get :index, params: { order_token: "NOT_A_TOKEN", order_id: order.number }
40
40
  expect(response.status).to eq(401)
41
41
  end
42
42
  end
@@ -44,7 +44,7 @@ describe Spree::Api::BaseController, type: :controller do
44
44
 
45
45
  context "cannot make a request to the API" do
46
46
  it "without an API key" do
47
- api_get :index
47
+ get :index
48
48
  expect(json_response).to eq({ "error" => "You must specify an API key." })
49
49
  expect(response.status).to eq(401)
50
50
  end
@@ -117,7 +117,7 @@ describe Spree::Api::BaseController, type: :controller do
117
117
 
118
118
  it 'should notify notify_error_during_processing' do
119
119
  expect(MockHoneybadger).to receive(:notify_or_ignore).once.with(kind_of(Exception), rack_env: kind_of(Hash))
120
- api_get :foo, token: 123
120
+ get :foo, params: { token: 123 }
121
121
  expect(response.status).to eq(422)
122
122
  end
123
123
  end
@@ -153,7 +153,7 @@ describe Spree::Api::BaseController, type: :controller do
153
153
 
154
154
  context 'without an existing lock' do
155
155
  it 'succeeds' do
156
- api_get :index, order_token: order.guest_token, order_id: order.number
156
+ get :index, params: { order_token: order.guest_token, order_id: order.number }
157
157
  expect(response.status).to eq(200)
158
158
  end
159
159
  end
@@ -164,7 +164,7 @@ describe Spree::Api::BaseController, type: :controller do
164
164
  end
165
165
 
166
166
  it 'returns a 409 conflict' do
167
- api_get :index, order_token: order.guest_token, order_id: order.number
167
+ get :index, params: { order_token: order.guest_token, order_id: order.number }
168
168
  expect(response.status).to eq(409)
169
169
  end
170
170
  end
@@ -50,14 +50,14 @@ module Spree
50
50
  let!(:widget) { Widget.create!(name: "a widget") }
51
51
 
52
52
  it "returns no widgets" do
53
- api_get :index, token: user.spree_api_key
53
+ get :index, params: { token: user.spree_api_key }, as: :json
54
54
  expect(response).to be_success
55
55
  expect(json_response['widgets']).to be_blank
56
56
  end
57
57
 
58
58
  context "it has authorization to read widgets" do
59
59
  it "returns widgets" do
60
- api_get :index, token: admin_user.spree_api_key
60
+ get :index, params: { token: admin_user.spree_api_key }, as: :json
61
61
  expect(response).to be_success
62
62
  expect(json_response['widgets']).to include(hash_including(
63
63
  'name' => 'a widget',
@@ -69,26 +69,26 @@ module Spree
69
69
  let!(:widget2) { Widget.create!(name: "a widget") }
70
70
 
71
71
  it "returns both widgets from comma separated string" do
72
- api_get :index, ids: [widget.id, widget2.id].join(','), token: admin_user.spree_api_key
72
+ get :index, params: { ids: [widget.id, widget2.id].join(','), token: admin_user.spree_api_key }, as: :json
73
73
  expect(response).to be_success
74
74
  expect(json_response['widgets'].size).to eq 2
75
75
  end
76
76
 
77
77
  it "returns both widgets from multiple arguments" do
78
- api_get :index, ids: [widget.id, widget2.id], token: admin_user.spree_api_key
78
+ get :index, params: { ids: [widget.id, widget2.id], token: admin_user.spree_api_key }, as: :json
79
79
  expect(response).to be_success
80
80
  expect(json_response['widgets'].size).to eq 2
81
81
  end
82
82
 
83
83
  it "returns one requested widgets" do
84
- api_get :index, ids: widget2.id.to_s, token: admin_user.spree_api_key
84
+ get :index, params: { ids: widget2.id.to_s, token: admin_user.spree_api_key }, as: :json
85
85
  expect(response).to be_success
86
86
  expect(json_response['widgets'].size).to eq 1
87
87
  expect(json_response['widgets'][0]['id']).to eq widget2.id
88
88
  end
89
89
 
90
90
  it "returns no widgets if empty" do
91
- api_get :index, ids: '', token: admin_user.spree_api_key
91
+ get :index, params: { ids: '', token: admin_user.spree_api_key }, as: :json
92
92
  expect(response).to be_success
93
93
  expect(json_response['widgets']).to be_empty
94
94
  end
@@ -100,13 +100,13 @@ module Spree
100
100
  let(:widget) { Widget.create!(name: "a widget") }
101
101
 
102
102
  it "returns not found" do
103
- api_get :show, id: widget.to_param, token: user.spree_api_key
103
+ get :show, params: { id: widget.to_param, token: user.spree_api_key }, as: :json
104
104
  assert_not_found!
105
105
  end
106
106
 
107
107
  context "it has authorization read widgets" do
108
108
  it "returns widget details" do
109
- api_get :show, id: widget.to_param, token: admin_user.spree_api_key
109
+ get :show, params: { id: widget.to_param, token: admin_user.spree_api_key }, as: :json
110
110
  expect(response).to be_success
111
111
  expect(json_response['name']).to eq 'a widget'
112
112
  end
@@ -115,13 +115,13 @@ module Spree
115
115
 
116
116
  describe "#new" do
117
117
  it "returns unauthorized" do
118
- api_get :new, token: user.spree_api_key
118
+ get :new, params: { token: user.spree_api_key }, as: :json
119
119
  expect(response).to be_unauthorized
120
120
  end
121
121
 
122
122
  context "it is allowed to view a new widget" do
123
123
  it "can learn how to create a new widget" do
124
- api_get :new, token: admin_user.spree_api_key
124
+ get :new, params: { token: admin_user.spree_api_key }, as: :json
125
125
  expect(response).to be_success
126
126
  expect(json_response["attributes"]).to eq(['name'])
127
127
  end
@@ -131,7 +131,7 @@ module Spree
131
131
  describe "#create" do
132
132
  it "returns unauthorized" do
133
133
  expect {
134
- api_post :create, widget: { name: "a widget" }, token: user.spree_api_key
134
+ post :create, params: { widget: { name: "a widget" }, token: user.spree_api_key }, as: :json
135
135
  }.not_to change(Widget, :count)
136
136
  expect(response).to be_unauthorized
137
137
  end
@@ -139,7 +139,7 @@ module Spree
139
139
  context "it is authorized to create widgets" do
140
140
  it "can create a widget" do
141
141
  expect {
142
- api_post :create, widget: { name: "a widget" }, token: admin_user.spree_api_key
142
+ post :create, params: { widget: { name: "a widget" }, token: admin_user.spree_api_key }, as: :json
143
143
  }.to change(Widget, :count).by(1)
144
144
  expect(response).to be_created
145
145
  expect(json_response['name']).to eq 'a widget'
@@ -151,14 +151,14 @@ module Spree
151
151
  describe "#update" do
152
152
  let!(:widget) { Widget.create!(name: "a widget") }
153
153
  it "returns unauthorized" do
154
- api_put :update, id: widget.to_param, widget: { name: "another widget" }, token: user.spree_api_key
154
+ put :update, params: { id: widget.to_param, widget: { name: "another widget" }, token: user.spree_api_key }, as: :json
155
155
  assert_not_found!
156
156
  expect(widget.reload.name).to eq 'a widget'
157
157
  end
158
158
 
159
159
  context "it is authorized to update widgets" do
160
160
  it "can update a widget" do
161
- api_put :update, id: widget.to_param, widget: { name: "another widget" }, token: admin_user.spree_api_key
161
+ put :update, params: { id: widget.to_param, widget: { name: "another widget" }, token: admin_user.spree_api_key }, as: :json
162
162
  expect(response).to be_success
163
163
  expect(json_response['name']).to eq 'another widget'
164
164
  expect(widget.reload.name).to eq 'another widget'
@@ -169,14 +169,14 @@ module Spree
169
169
  describe "#destroy" do
170
170
  let!(:widget) { Widget.create!(name: "a widget") }
171
171
  it "returns unauthorized" do
172
- api_delete :destroy, id: widget.to_param, token: user.spree_api_key
172
+ delete :destroy, params: { id: widget.to_param, token: user.spree_api_key }, as: :json
173
173
  assert_not_found!
174
174
  expect { widget.reload }.not_to raise_error
175
175
  end
176
176
 
177
177
  context "it is authorized to destroy widgets" do
178
178
  it "can destroy a widget" do
179
- api_delete :destroy, id: widget.to_param, token: admin_user.spree_api_key
179
+ delete :destroy, params: { id: widget.to_param, token: admin_user.spree_api_key }, as: :json
180
180
  expect(response.status).to eq 204
181
181
  expect { widget.reload }.to raise_error(ActiveRecord::RecordNotFound)
182
182
  end
@@ -131,7 +131,7 @@ module Spree
131
131
  other_user.save_in_address_book(ron_address_attributes, false)
132
132
 
133
133
  get "/api/users/#{other_user.id}/address_book",
134
- headers: { 'X-SPREE-TOKEN' => 'galleon' }
134
+ headers: { 'X-SPREE-TOKEN' => 'galleon' }
135
135
 
136
136
  json_response = JSON.parse(response.body)
137
137
  expect(response.status).to eq(200)
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::AddressesController, type: :controller do
5
- render_views
4
+ describe Api::AddressesController, type: :request do
6
5
 
7
6
  before do
8
7
  stub_authentication!
@@ -17,20 +16,18 @@ module Spree
17
16
 
18
17
  context "with their own address" do
19
18
  it "gets an address" do
20
- api_get :show, id: @address.id, order_id: @order.number
19
+ get spree.api_order_address_path(@order, @address.id)
21
20
  expect(json_response['address1']).to eq @address.address1
22
21
  end
23
22
 
24
23
  it "update replaces the readonly Address associated to the Order" do
25
- api_put :update, id: @address.id, order_id: @order.number,
26
- address: { address1: "123 Test Lane" }
24
+ put spree.api_order_address_path(@order, @address.id), params: { address: { address1: "123 Test Lane" } }
27
25
  expect(Order.find(@order.id).bill_address_id).not_to eq @address.id
28
26
  expect(json_response['address1']).to eq '123 Test Lane'
29
27
  end
30
28
 
31
29
  it "receives the errors object if address is invalid" do
32
- api_put :update, id: @address.id, order_id: @order.number,
33
- address: { address1: "" }
30
+ put spree.api_order_address_path(@order, @address.id), params: { address: { address1: "" } }
34
31
 
35
32
  expect(json_response['error']).not_to be_nil
36
33
  expect(json_response['errors']).not_to be_nil
@@ -46,12 +43,12 @@ module Spree
46
43
  end
47
44
 
48
45
  it "cannot retrieve address information" do
49
- api_get :show, id: @address.id, order_id: @order.number
46
+ get spree.api_order_address_path(@order, @address.id)
50
47
  assert_unauthorized!
51
48
  end
52
49
 
53
50
  it "cannot update address information" do
54
- api_get :update, id: @address.id, order_id: @order.number
51
+ get spree.api_order_address_path(@order, @address.id)
55
52
  assert_unauthorized!
56
53
  end
57
54
  end
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Api::CheckoutsController, type: :controller do
5
- render_views
4
+ describe Api::CheckoutsController, type: :request do
6
5
 
7
6
  before(:each) do
8
7
  stub_authentication!
@@ -37,30 +36,27 @@ module Spree
37
36
  it "should transition a recently created order from cart to address" do
38
37
  expect(order.state).to eq "cart"
39
38
  expect(order.email).not_to be_nil
40
- api_put :update, id: order.to_param, order_token: order.guest_token
39
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token }
41
40
  expect(order.reload.state).to eq "address"
42
41
  end
43
42
 
44
43
  it "should transition a recently created order from cart to address with order token in header" do
45
44
  expect(order.state).to eq "cart"
46
45
  expect(order.email).not_to be_nil
47
- request.headers["X-Spree-Order-Token"] = order.guest_token
48
- api_put :update, id: order.to_param
46
+ put spree.api_checkout_path(order), headers: { "X-Spree-Order-Token" => order.guest_token }
49
47
  expect(order.reload.state).to eq "address"
50
48
  end
51
49
 
52
50
  it "can take line_items_attributes as a parameter" do
53
51
  line_item = order.line_items.first
54
- api_put :update, id: order.to_param, order_token: order.guest_token,
55
- order: { line_items_attributes: { 0 => { id: line_item.id, quantity: 1 } } }
52
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { line_items_attributes: { 0 => { id: line_item.id, quantity: 1 } } } }
56
53
  expect(response.status).to eq(200)
57
54
  expect(order.reload.state).to eq "address"
58
55
  end
59
56
 
60
57
  it "can take line_items as a parameter" do
61
58
  line_item = order.line_items.first
62
- api_put :update, id: order.to_param, order_token: order.guest_token,
63
- order: { line_items: { 0 => { id: line_item.id, quantity: 1 } } }
59
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { line_items: { 0 => { id: line_item.id, quantity: 1 } } } }
64
60
  expect(response.status).to eq(200)
65
61
  expect(order.reload.state).to eq "address"
66
62
  end
@@ -70,7 +66,7 @@ module Spree
70
66
  order.bill_address = nil
71
67
  order.save
72
68
  order.update_column(:state, "address")
73
- api_put :update, id: order.to_param, order_token: order.guest_token
69
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token }
74
70
  # Order has not transitioned
75
71
  expect(response.status).to eq(422)
76
72
  end
@@ -94,12 +90,11 @@ module Spree
94
90
  end
95
91
 
96
92
  it "can update addresses and transition from address to delivery" do
97
- api_put :update,
98
- id: order.to_param, order_token: order.guest_token,
99
- order: {
93
+ put spree.api_checkout_path(order),
94
+ params: { order_token: order.guest_token, order: {
100
95
  bill_address_attributes: address,
101
96
  ship_address_attributes: address
102
- }
97
+ } }
103
98
  expect(json_response['state']).to eq('delivery')
104
99
  expect(json_response['bill_address']['firstname']).to eq('John')
105
100
  expect(json_response['ship_address']['firstname']).to eq('John')
@@ -109,24 +104,22 @@ module Spree
109
104
  # Regression Spec for https://github.com/spree/spree/issues/5389 and https://github.com/spree/spree/issues/5880
110
105
  it "can update addresses but not transition to delivery w/o shipping setup" do
111
106
  Spree::ShippingMethod.destroy_all
112
- api_put :update,
113
- id: order.to_param, order_token: order.guest_token,
114
- order: {
107
+ put spree.api_checkout_path(order),
108
+ params: { order_token: order.guest_token, order: {
115
109
  bill_address_attributes: address,
116
110
  ship_address_attributes: address
117
- }
111
+ } }
118
112
  expect(json_response['error']).to eq(I18n.t(:could_not_transition, scope: "spree.api.order"))
119
113
  expect(response.status).to eq(422)
120
114
  end
121
115
 
122
116
  # Regression test for https://github.com/spree/spree/issues/4498
123
117
  it "does not contain duplicate variant data in delivery return" do
124
- api_put :update,
125
- id: order.to_param, order_token: order.guest_token,
126
- order: {
118
+ put spree.api_checkout_path(order),
119
+ params: { order_token: order.guest_token, order: {
127
120
  bill_address_attributes: address,
128
121
  ship_address_attributes: address
129
- }
122
+ } }
130
123
  # Shipments manifests should not return the ENTIRE variant
131
124
  # This information is already present within the order's line items
132
125
  expect(json_response['shipments'].first['manifest'].first['variant']).to be_nil
@@ -139,8 +132,7 @@ module Spree
139
132
  shipment = create(:shipment, order: order)
140
133
  shipment.refresh_rates
141
134
  shipping_rate = shipment.shipping_rates.where(selected: false).first
142
- api_put :update, id: order.to_param, order_token: order.guest_token,
143
- order: { shipments_attributes: { "0" => { selected_shipping_rate_id: shipping_rate.id, id: shipment.id } } }
135
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { shipments_attributes: { "0" => { selected_shipping_rate_id: shipping_rate.id, id: shipment.id } } } }
144
136
  expect(response.status).to eq(200)
145
137
  # Find the correct shipment...
146
138
  json_shipment = json_response['shipments'].detect { |s| s["id"] == shipment.id }
@@ -154,32 +146,17 @@ module Spree
154
146
 
155
147
  it "can update payment method and transition from payment to confirm" do
156
148
  order.update_column(:state, "payment")
157
- allow_any_instance_of(Spree::Gateway::Bogus).to receive(:source_required?).and_return(false)
158
- api_put :update, id: order.to_param, order_token: order.guest_token,
159
- order: { payments_attributes: [{ payment_method_id: @payment_method.id }] }
149
+ allow_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:source_required?).and_return(false)
150
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { payments_attributes: [{ payment_method_id: @payment_method.id }] } }
160
151
  expect(json_response['state']).to eq('confirm')
161
152
  expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
162
153
  expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
163
154
  expect(response.status).to eq(200)
164
155
  end
165
156
 
166
- context "with disallowed payment method" do
167
- it "returns not found" do
168
- order.update_column(:state, "payment")
169
- allow_any_instance_of(Spree::Gateway::Bogus).to receive(:source_required?).and_return(false)
170
- @payment_method.update!(available_to_users: false)
171
- expect {
172
- api_put :update, id: order.to_param, order_token: order.guest_token, order: { payments_attributes: [{ payment_method_id: @payment_method.id }] }
173
- }.not_to change { Spree::Payment.count }
174
- expect(response.status).to eq(404)
175
- end
176
- end
177
-
178
-
179
157
  it "returns errors when source is required and missing" do
180
158
  order.update_column(:state, "payment")
181
- api_put :update, id: order.to_param, order_token: order.guest_token,
182
- order: { payments_attributes: [{ payment_method_id: @payment_method.id }] }
159
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { payments_attributes: [{ payment_method_id: @payment_method.id }] } }
183
160
  expect(response.status).to eq(422)
184
161
  source_errors = json_response['errors']['payments.source']
185
162
  expect(source_errors).to include("can't be blank")
@@ -188,7 +165,6 @@ module Spree
188
165
  describe 'setting the payment amount' do
189
166
  let(:params) do
190
167
  {
191
- id: order.to_param,
192
168
  order_token: order.guest_token,
193
169
  order: {
194
170
  payments_attributes: [
@@ -202,7 +178,7 @@ module Spree
202
178
  end
203
179
 
204
180
  it 'sets the payment amount to the order total' do
205
- api_put(:update, params)
181
+ put spree.api_checkout_path(order), params: params
206
182
  expect(response.status).to eq(200)
207
183
  expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
208
184
  end
@@ -215,7 +191,6 @@ module Spree
215
191
 
216
192
  let(:params) do
217
193
  {
218
- id: order.to_param,
219
194
  order_token: order.guest_token,
220
195
  order: {
221
196
  payments_attributes: [
@@ -229,7 +204,7 @@ module Spree
229
204
  end
230
205
 
231
206
  it 'succeeds' do
232
- api_put(:update, params)
207
+ put spree.api_checkout_path(order), params: params
233
208
  expect(response.status).to eq(200)
234
209
  expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
235
210
  expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
@@ -243,7 +218,6 @@ module Spree
243
218
 
244
219
  let(:params) do
245
220
  {
246
- id: order.to_param,
247
221
  order_token: order.guest_token,
248
222
  order: {
249
223
  payments_attributes: [
@@ -257,7 +231,7 @@ module Spree
257
231
  end
258
232
 
259
233
  it 'returns errors' do
260
- api_put(:update, params)
234
+ put spree.api_checkout_path(order), params: params
261
235
 
262
236
  expect(response.status).to eq(422)
263
237
  cc_errors = json_response['errors']['payments.Credit Card']
@@ -275,7 +249,6 @@ module Spree
275
249
 
276
250
  let(:params) do
277
251
  {
278
- id: order.to_param,
279
252
  order_token: order.guest_token,
280
253
  order: {
281
254
  payments_attributes: [
@@ -306,7 +279,7 @@ module Spree
306
279
  receive(:verification_value=).with('456').and_call_original
307
280
  )
308
281
 
309
- api_put(:update, params)
282
+ put spree.api_checkout_path(order), params: params
310
283
 
311
284
  expect(response.status).to eq 200
312
285
  expect(order.credit_cards).to match_array [credit_card]
@@ -315,7 +288,6 @@ module Spree
315
288
  context 'with deprecated existing_card_id param' do
316
289
  let(:params) do
317
290
  {
318
- id: order.to_param,
319
291
  order_token: order.guest_token,
320
292
  order: {
321
293
  payments_attributes: [
@@ -332,7 +304,7 @@ module Spree
332
304
 
333
305
  it 'succeeds' do
334
306
  Spree::Deprecation.silence do
335
- api_put(:update, params)
307
+ put spree.api_checkout_path(order), params: params
336
308
  end
337
309
 
338
310
  expect(response.status).to eq 200
@@ -343,7 +315,7 @@ module Spree
343
315
 
344
316
  it "returns the order if the order is already complete" do
345
317
  order.update_columns(completed_at: Time.current, state: 'complete')
346
- api_put :update, id: order.to_param, order_token: order.guest_token
318
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token }
347
319
  expect(json_response['number']).to eq(order.number)
348
320
  expect(response.status).to eq(200)
349
321
  end
@@ -351,8 +323,7 @@ module Spree
351
323
  # Regression test for https://github.com/spree/spree/issues/3784
352
324
  it "can update the special instructions for an order" do
353
325
  instructions = "Don't drop it. (Please)"
354
- api_put :update, id: order.to_param, order_token: order.guest_token,
355
- order: { special_instructions: instructions }
326
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { special_instructions: instructions } }
356
327
  expect(json_response['special_instructions']).to eql(instructions)
357
328
  end
358
329
 
@@ -361,16 +332,14 @@ module Spree
361
332
  it "can assign a user to the order" do
362
333
  user = create(:user)
363
334
  # Need to pass email as well so that validations succeed
364
- api_put :update, id: order.to_param, order_token: order.guest_token,
365
- order: { user_id: user.id, email: "guest@spreecommerce.com" }
335
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { user_id: user.id, email: "guest@spreecommerce.com" } }
366
336
  expect(response.status).to eq(200)
367
337
  expect(json_response['user_id']).to eq(user.id)
368
338
  end
369
339
  end
370
340
 
371
341
  it "can assign an email to the order" do
372
- api_put :update, id: order.to_param, order_token: order.guest_token,
373
- order: { email: "guest@spreecommerce.com" }
342
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { email: "guest@spreecommerce.com" } }
374
343
  expect(json_response['email']).to eq("guest@spreecommerce.com")
375
344
  expect(response.status).to eq(200)
376
345
  end
@@ -379,7 +348,7 @@ module Spree
379
348
  order.update_column(:state, "payment")
380
349
  expect(PromotionHandler::Coupon).to receive(:new).with(order).and_call_original
381
350
  expect_any_instance_of(PromotionHandler::Coupon).to receive(:apply).and_return({ coupon_applied?: true })
382
- api_put :update, id: order.to_param, order_token: order.guest_token, order: { coupon_code: "foobar" }
351
+ put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { coupon_code: "foobar" } }
383
352
  end
384
353
  end
385
354
 
@@ -388,7 +357,7 @@ module Spree
388
357
  it "cannot transition to address without a line item" do
389
358
  order.line_items.delete_all
390
359
  order.update_column(:email, "spree@example.com")
391
- api_put :next, id: order.to_param, order_token: order.guest_token
360
+ put spree.next_api_checkout_path(order), params: { order_token: order.guest_token }
392
361
  expect(response.status).to eq(422)
393
362
  expect(json_response["errors"]["base"]).to include(Spree.t(:there_are_no_items_for_this_order))
394
363
  end
@@ -396,7 +365,7 @@ module Spree
396
365
  it "can transition an order to the next state" do
397
366
  order.update_column(:email, "spree@example.com")
398
367
 
399
- api_put :next, id: order.to_param, order_token: order.guest_token
368
+ put spree.next_api_checkout_path(order), params: { order_token: order.guest_token }
400
369
  expect(response.status).to eq(200)
401
370
  expect(json_response['state']).to eq('address')
402
371
  end
@@ -407,7 +376,7 @@ module Spree
407
376
  email: nil
408
377
  )
409
378
 
410
- api_put :next, id: order.to_param, order_token: order.guest_token
379
+ put spree.next_api_checkout_path(order), params: { id: order.to_param, order_token: order.guest_token }
411
380
  expect(response.status).to eq(422)
412
381
  expect(json_response['error']).to match(/could not be transitioned/)
413
382
  end
@@ -416,10 +385,10 @@ module Spree
416
385
  context "complete" do
417
386
  context "with order in confirm state" do
418
387
  subject do
419
- api_put :complete, params
388
+ put spree.complete_api_checkout_path(order), params: params
420
389
  end
421
390
 
422
- let(:params) { { id: order.to_param, order_token: order.guest_token } }
391
+ let(:params) { { order_token: order.guest_token } }
423
392
  let(:order) { create(:order_with_line_items) }
424
393
 
425
394
  before do
@@ -434,7 +403,7 @@ module Spree
434
403
  end
435
404
 
436
405
  it "returns a sensible error when no payment method is specified" do
437
- # api_put :complete, id: order.to_param, order_token: order.token, order: {}
406
+ # put :complete, id: order.to_param, order_token: order.token, order: {}
438
407
  subject
439
408
  expect(json_response["errors"]["base"]).to include(Spree.t(:no_payment_found))
440
409
  end
@@ -443,7 +412,7 @@ module Spree
443
412
  let(:params) { super().merge(expected_total: order.total + 1) }
444
413
 
445
414
  it "returns an error if expected_total is present and does not match actual total" do
446
- # api_put :complete, id: order.to_param, order_token: order.token, expected_total: order.total + 1
415
+ # put :complete, id: order.to_param, order_token: order.token, expected_total: order.total + 1
447
416
  subject
448
417
  expect(response.status).to eq(400)
449
418
  expect(json_response['errors']['expected_total']).to include(Spree.t(:expected_total_mismatch, scope: 'api.order'))
@@ -457,11 +426,11 @@ module Spree
457
426
 
458
427
  it 'continues to advance an order while it can move forward' do
459
428
  expect_any_instance_of(Spree::Order).to receive(:next).exactly(3).times.and_return(true, true, false)
460
- api_put :advance, id: order.to_param, order_token: order.guest_token
429
+ put spree.advance_api_checkout_path(order), params: { order_token: order.guest_token }
461
430
  end
462
431
 
463
432
  it 'returns the order' do
464
- api_put :advance, id: order.to_param, order_token: order.guest_token
433
+ put spree.advance_api_checkout_path(order), params: { order_token: order.guest_token }
465
434
  expect(json_response['id']).to eq(order.id)
466
435
  end
467
436
  end