solidus_api 2.2.2 → 2.3.0.beta1

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.

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
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Spree::Api::PaymentsController, type: :controller do
5
- render_views
4
+ describe Spree::Api::PaymentsController, type: :request do
6
5
  let!(:order) { create(:order) }
7
6
  let!(:payment) { create(:payment, order: order) }
8
7
  let!(:attributes) {
@@ -11,8 +10,6 @@ module Spree
11
10
  :created_at, :updated_at]
12
11
  }
13
12
 
14
- let(:resource_scoping) { { order_id: order.to_param } }
15
-
16
13
  before do
17
14
  stub_authentication!
18
15
  end
@@ -24,12 +21,12 @@ module Spree
24
21
  end
25
22
 
26
23
  it "can view the payments for their order" do
27
- api_get :index
24
+ get spree.api_order_payments_path(order)
28
25
  expect(json_response["payments"].first).to have_attributes(attributes)
29
26
  end
30
27
 
31
28
  it "can learn how to create a new payment" do
32
- api_get :new
29
+ get spree.new_api_order_payment_path(order)
33
30
  expect(json_response["attributes"]).to eq(attributes.map(&:to_s))
34
31
  expect(json_response["payment_methods"]).not_to be_empty
35
32
  expect(json_response["payment_methods"].first).to have_attributes([:id, :name, :description])
@@ -37,31 +34,20 @@ module Spree
37
34
 
38
35
  context "payment source is not required" do
39
36
  before do
40
- allow_any_instance_of(Spree::Gateway::Bogus).to receive(:source_required?).and_return(false)
37
+ allow_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:source_required?).and_return(false)
41
38
  end
42
39
 
43
40
  it "can create a new payment" do
44
- api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50 }
41
+ post spree.api_order_payments_path(order), params: { payment: { payment_method_id: PaymentMethod.first.id, amount: 50 } }
45
42
  expect(response.status).to eq(201)
46
43
  expect(json_response).to have_attributes(attributes)
47
44
  end
48
-
49
- context "disallowed payment method" do
50
- it "does not create a new payment" do
51
- PaymentMethod.first.update!(available_to_users: false)
52
-
53
- expect {
54
- api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50 }
55
- }.not_to change { Spree::Payment.count }
56
- expect(response.status).to eq(404)
57
- end
58
- end
59
45
  end
60
46
 
61
47
  context "payment source is required" do
62
48
  context "no source is provided" do
63
49
  it "returns errors" do
64
- api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50 }
50
+ post spree.api_order_payments_path(order), params: { payment: { payment_method_id: PaymentMethod.first.id, amount: 50 } }
65
51
  expect(response.status).to eq(422)
66
52
  expect(json_response['error']).to eq("Invalid resource. Please fix errors and try again.")
67
53
  expect(json_response['errors']['source']).to eq(["can't be blank"])
@@ -70,7 +56,7 @@ module Spree
70
56
 
71
57
  context "source is provided" do
72
58
  it "can create a new payment" do
73
- api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50, source_attributes: { gateway_payment_profile_id: 1 } }
59
+ post spree.api_order_payments_path(order), params: { payment: { payment_method_id: PaymentMethod.first.id, amount: 50, source_attributes: { gateway_payment_profile_id: 1 } } }
74
60
  expect(response.status).to eq(201)
75
61
  expect(json_response).to have_attributes(attributes)
76
62
  end
@@ -78,17 +64,17 @@ module Spree
78
64
  end
79
65
 
80
66
  it "can view a pre-existing payment's details" do
81
- api_get :show, id: payment.to_param
67
+ get spree.api_order_payment_path(order, payment)
82
68
  expect(json_response).to have_attributes(attributes)
83
69
  end
84
70
 
85
71
  it "cannot update a payment" do
86
- api_put :update, id: payment.to_param, payment: { amount: 2.01 }
72
+ put spree.api_order_payment_path(order, payment), params: { payment: { amount: 2.01 } }
87
73
  assert_unauthorized!
88
74
  end
89
75
 
90
76
  it "cannot authorize a payment" do
91
- api_put :authorize, id: payment.to_param
77
+ put spree.authorize_api_order_payment_path(order, payment)
92
78
  assert_unauthorized!
93
79
  end
94
80
  end
@@ -99,12 +85,12 @@ module Spree
99
85
  end
100
86
 
101
87
  it "cannot view payments for somebody else's order" do
102
- api_get :index, order_id: order.to_param
88
+ get spree.api_order_payments_path(order)
103
89
  assert_unauthorized!
104
90
  end
105
91
 
106
92
  it "can view the payments for an order given the order token" do
107
- api_get :index, order_id: order.to_param, order_token: order.guest_token
93
+ get spree.api_order_payments_path(order), params: { order_token: order.guest_token }
108
94
  expect(json_response["payments"].first).to have_attributes(attributes)
109
95
  end
110
96
  end
@@ -114,7 +100,7 @@ module Spree
114
100
  sign_in_as_admin!
115
101
 
116
102
  it "can view the payments on any order" do
117
- api_get :index
103
+ get spree.api_order_payments_path(order)
118
104
  expect(response.status).to eq(200)
119
105
  expect(json_response["payments"].first).to have_attributes(attributes)
120
106
  end
@@ -123,12 +109,12 @@ module Spree
123
109
  before { @payment = create(:payment, order: order) }
124
110
 
125
111
  it "can view all payments on an order" do
126
- api_get :index
112
+ get spree.api_order_payments_path(order)
127
113
  expect(json_response["count"]).to eq(2)
128
114
  end
129
115
 
130
116
  it 'can control the page size through a parameter' do
131
- api_get :index, per_page: 1
117
+ get spree.api_order_payments_path(order), params: { per_page: 1 }
132
118
  expect(json_response['count']).to eq(1)
133
119
  expect(json_response['current_page']).to eq(1)
134
120
  expect(json_response['pages']).to eq(2)
@@ -139,7 +125,7 @@ module Spree
139
125
  context "updating" do
140
126
  it "can update" do
141
127
  payment.update_attributes(state: 'pending')
142
- api_put :update, id: payment.to_param, payment: { amount: 2.01 }
128
+ put spree.api_order_payment_path(order, payment), params: { payment: { amount: 2.01 } }
143
129
  expect(response.status).to eq(200)
144
130
  expect(payment.reload.amount).to eq(2.01)
145
131
  end
@@ -147,14 +133,14 @@ module Spree
147
133
  context "update fails" do
148
134
  it "returns a 422 status when the amount is invalid" do
149
135
  payment.update_attributes(state: 'pending')
150
- api_put :update, id: payment.to_param, payment: { amount: 'invalid' }
136
+ put spree.api_order_payment_path(order, payment), params: { payment: { amount: 'invalid' } }
151
137
  expect(response.status).to eq(422)
152
138
  expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.")
153
139
  end
154
140
 
155
141
  it "returns a 403 status when the payment is not pending" do
156
142
  payment.update_attributes(state: 'completed')
157
- api_put :update, id: payment.to_param, payment: { amount: 2.01 }
143
+ put spree.api_order_payment_path(order, payment), params: { payment: { amount: 2.01 } }
158
144
  expect(response.status).to eq(403)
159
145
  expect(json_response["error"]).to eq("This payment cannot be updated because it is completed.")
160
146
  end
@@ -163,7 +149,7 @@ module Spree
163
149
 
164
150
  context "authorizing" do
165
151
  it "can authorize" do
166
- api_put :authorize, id: payment.to_param
152
+ put spree.authorize_api_order_payment_path(order, payment)
167
153
  expect(response.status).to eq(200)
168
154
  expect(payment.reload.state).to eq("pending")
169
155
  end
@@ -171,8 +157,8 @@ module Spree
171
157
  context "authorization fails" do
172
158
  before do
173
159
  fake_response = double(success?: false, to_s: "Could not authorize card")
174
- expect_any_instance_of(Spree::Gateway::Bogus).to receive(:authorize).and_return(fake_response)
175
- api_put :authorize, id: payment.to_param
160
+ expect_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:authorize).and_return(fake_response)
161
+ put spree.authorize_api_order_payment_path(order, payment)
176
162
  end
177
163
 
178
164
  it "returns a 422 status" do
@@ -190,7 +176,7 @@ module Spree
190
176
 
191
177
  context "capturing" do
192
178
  it "can capture" do
193
- api_put :capture, id: payment.to_param
179
+ put spree.capture_api_order_payment_path(order, payment)
194
180
  expect(response.status).to eq(200)
195
181
  expect(payment.reload.state).to eq("completed")
196
182
  end
@@ -198,11 +184,11 @@ module Spree
198
184
  context "capturing fails" do
199
185
  before do
200
186
  fake_response = double(success?: false, to_s: "Insufficient funds")
201
- expect_any_instance_of(Spree::Gateway::Bogus).to receive(:capture).and_return(fake_response)
187
+ expect_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:capture).and_return(fake_response)
202
188
  end
203
189
 
204
190
  it "returns a 422 status" do
205
- api_put :capture, id: payment.to_param
191
+ put spree.capture_api_order_payment_path(order, payment)
206
192
  expect(response.status).to eq(422)
207
193
  expect(json_response["error"]).to eq "Invalid resource. Please fix errors and try again."
208
194
  expect(json_response["errors"]["base"][0]).to eq "Insufficient funds"
@@ -212,7 +198,7 @@ module Spree
212
198
 
213
199
  context "purchasing" do
214
200
  it "can purchase" do
215
- api_put :purchase, id: payment.to_param
201
+ put spree.purchase_api_order_payment_path(order, payment)
216
202
  expect(response.status).to eq(200)
217
203
  expect(payment.reload.state).to eq("completed")
218
204
  end
@@ -220,11 +206,11 @@ module Spree
220
206
  context "purchasing fails" do
221
207
  before do
222
208
  fake_response = double(success?: false, to_s: "Insufficient funds")
223
- expect_any_instance_of(Spree::Gateway::Bogus).to receive(:purchase).and_return(fake_response)
209
+ expect_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:purchase).and_return(fake_response)
224
210
  end
225
211
 
226
212
  it "returns a 422 status" do
227
- api_put :purchase, id: payment.to_param
213
+ put spree.purchase_api_order_payment_path(order, payment)
228
214
  expect(response.status).to eq(422)
229
215
  expect(json_response["error"]).to eq "Invalid resource. Please fix errors and try again."
230
216
  expect(json_response["errors"]["base"][0]).to eq "Insufficient funds"
@@ -234,7 +220,7 @@ module Spree
234
220
 
235
221
  context "voiding" do
236
222
  it "can void" do
237
- api_put :void, id: payment.to_param
223
+ put spree.void_api_order_payment_path(order, payment)
238
224
  expect(response.status).to eq 200
239
225
  expect(payment.reload.state).to eq "void"
240
226
  end
@@ -242,11 +228,11 @@ module Spree
242
228
  context "voiding fails" do
243
229
  before do
244
230
  fake_response = double(success?: false, to_s: "NO REFUNDS")
245
- expect_any_instance_of(Spree::Gateway::Bogus).to receive(:void).and_return(fake_response)
231
+ expect_any_instance_of(Spree::PaymentMethod::BogusCreditCard).to receive(:void).and_return(fake_response)
246
232
  end
247
233
 
248
234
  it "returns a 422 status" do
249
- api_put :void, id: payment.to_param
235
+ put spree.void_api_order_payment_path(order, payment)
250
236
  expect(response.status).to eq 422
251
237
  expect(json_response["error"]).to eq "Invalid resource. Please fix errors and try again."
252
238
  expect(json_response["errors"]["base"][0]).to eq "NO REFUNDS"
@@ -2,8 +2,7 @@ require 'spec_helper'
2
2
  require 'shared_examples/protect_product_actions'
3
3
 
4
4
  module Spree
5
- describe Spree::Api::ProductPropertiesController, type: :controller do
6
- render_views
5
+ describe Spree::Api::ProductPropertiesController, type: :request do
7
6
 
8
7
  let!(:product) { create(:product) }
9
8
  let!(:property_1) { product.product_properties.create(property_name: "My Property 1", value: "my value 1", position: 0) }
@@ -22,19 +21,19 @@ module Spree
22
21
  end
23
22
 
24
23
  it "can not see a list of product properties" do
25
- api_get :index
24
+ get spree.api_product_product_properties_path(product)
26
25
  expect(response.status).to eq(404)
27
26
  end
28
27
  end
29
28
 
30
29
  it "can see a list of all product properties" do
31
- api_get :index
30
+ get spree.api_product_product_properties_path(product)
32
31
  expect(json_response["product_properties"].count).to eq 2
33
32
  expect(json_response["product_properties"].first).to have_attributes(attributes)
34
33
  end
35
34
 
36
35
  it "can control the page size through a parameter" do
37
- api_get :index, per_page: 1
36
+ get spree.api_product_product_properties_path(product), params: { per_page: 1 }
38
37
  expect(json_response['product_properties'].count).to eq(1)
39
38
  expect(json_response['current_page']).to eq(1)
40
39
  expect(json_response['pages']).to eq(2)
@@ -43,34 +42,34 @@ module Spree
43
42
  it 'can query the results through a parameter' do
44
43
  Spree::ProductProperty.last.update_attribute(:value, 'loose')
45
44
  property = Spree::ProductProperty.last
46
- api_get :index, q: { value_cont: 'loose' }
45
+ get spree.api_product_product_properties_path(product), params: { q: { value_cont: 'loose' } }
47
46
  expect(json_response['count']).to eq(1)
48
47
  expect(json_response['product_properties'].first['value']).to eq property.value
49
48
  end
50
49
 
51
50
  it "can see a single product_property" do
52
- api_get :show, id: property_1.property_name
51
+ get spree.api_product_product_property_path(product, property_1.property_name)
53
52
  expect(json_response).to have_attributes(attributes)
54
53
  end
55
54
 
56
55
  it "can learn how to create a new product property" do
57
- api_get :new
56
+ get spree.new_api_product_product_property_path(product)
58
57
  expect(json_response["attributes"]).to eq(attributes.map(&:to_s))
59
58
  expect(json_response["required_attributes"]).to be_empty
60
59
  end
61
60
 
62
61
  it "cannot create a new product property if not an admin" do
63
- api_post :create, product_property: { property_name: "My Property 3" }
62
+ post spree.api_product_product_properties_path(product), params: { product_property: { property_name: "My Property 3" } }
64
63
  assert_unauthorized!
65
64
  end
66
65
 
67
66
  it "cannot update a product property" do
68
- api_put :update, id: property_1.property_name, product_property: { value: "my value 456" }
67
+ put spree.api_product_product_property_path(product, property_1.property_name), params: { product_property: { value: "my value 456" } }
69
68
  assert_unauthorized!
70
69
  end
71
70
 
72
71
  it "cannot delete a product property" do
73
- api_delete :destroy, id: property_1.property_name
72
+ delete spree.api_product_product_property_path(product, property_1.property_name)
74
73
  assert_unauthorized!
75
74
  expect { property_1.reload }.not_to raise_error
76
75
  end
@@ -80,34 +79,33 @@ module Spree
80
79
 
81
80
  it "can create a new product property" do
82
81
  expect do
83
- api_post :create, product_property: { property_name: "My Property 3", value: "my value 3" }
82
+ post spree.api_product_product_properties_path(product), params: { product_property: { property_name: "My Property 3", value: "my value 3" } }
84
83
  end.to change(product.product_properties, :count).by(1)
85
84
  expect(json_response).to have_attributes(attributes)
86
85
  expect(response.status).to eq(201)
87
86
  end
88
87
 
89
88
  it "can update a product property" do
90
- api_put :update, id: property_1.property_name, product_property: { value: "my value 456" }
89
+ put spree.api_product_product_property_path(product, property_1.property_name), params: { product_property: { value: "my value 456" } }
91
90
  expect(response.status).to eq(200)
92
91
  end
93
92
 
94
93
  it "can delete a product property" do
95
- api_delete :destroy, id: property_1.property_name
94
+ delete spree.api_product_product_property_path(product, property_1.property_name)
96
95
  expect(response.status).to eq(204)
97
96
  expect { property_1.reload }.to raise_error(ActiveRecord::RecordNotFound)
98
97
  end
99
98
  end
100
99
 
101
100
  context "with product identified by id" do
102
- let(:resource_scoping) { { product_id: product.id } }
103
101
  it "can see a list of all product properties" do
104
- api_get :index
102
+ get spree.api_product_product_properties_path(product)
105
103
  expect(json_response["product_properties"].count).to eq 2
106
104
  expect(json_response["product_properties"].first).to have_attributes(attributes)
107
105
  end
108
106
 
109
107
  it "can see a single product_property by id" do
110
- api_get :show, id: property_1.id
108
+ get spree.api_product_product_property_path(product, property_1.id)
111
109
  expect(json_response).to have_attributes(attributes)
112
110
  end
113
111
  end
@@ -2,8 +2,7 @@ require 'spec_helper'
2
2
  require 'shared_examples/protect_product_actions'
3
3
 
4
4
  module Spree
5
- describe Spree::Api::ProductsController, type: :controller do
6
- render_views
5
+ describe Spree::Api::ProductsController, type: :request do
7
6
 
8
7
  let!(:product) { create(:product) }
9
8
  let!(:inactive_product) { create(:product, available_on: Time.current.tomorrow, name: "inactive") }
@@ -39,7 +38,7 @@ module Spree
39
38
  end
40
39
 
41
40
  it "returns unique products" do
42
- api_get :index
41
+ get spree.api_products_path
43
42
  product_ids = json_response["products"].map { |p| p["id"] }
44
43
  expect(product_ids.uniq.count).to eq(product_ids.count)
45
44
  end
@@ -50,7 +49,7 @@ module Spree
50
49
  end
51
50
 
52
51
  it "retrieves a list of products" do
53
- api_get :index
52
+ get spree.api_products_path
54
53
  expect(json_response["products"].first).to have_attributes(show_attributes)
55
54
  expect(json_response["total_count"]).to eq(1)
56
55
  expect(json_response["current_page"]).to eq(1)
@@ -59,7 +58,7 @@ module Spree
59
58
  end
60
59
 
61
60
  it "retrieves a list of products by id" do
62
- api_get :index, ids: [product.id]
61
+ get spree.api_products_path, params: { ids: [product.id] }
63
62
  expect(json_response["products"].first).to have_attributes(show_attributes)
64
63
  expect(json_response["total_count"]).to eq(1)
65
64
  expect(json_response["current_page"]).to eq(1)
@@ -71,14 +70,14 @@ module Spree
71
70
  before { product.master.prices.create currency: "EUR", amount: 22 }
72
71
 
73
72
  it "returns distinct products only" do
74
- api_get :index
73
+ get spree.api_products_path
75
74
  expect(assigns(:products).map(&:id).uniq).to eq assigns(:products).map(&:id)
76
75
  end
77
76
  end
78
77
 
79
78
  it "retrieves a list of products by ids string" do
80
79
  second_product = create(:product)
81
- api_get :index, ids: [product.id, second_product.id].join(",")
80
+ get spree.api_products_path, params: { ids: [product.id, second_product.id].join(",") }
82
81
  expect(json_response["products"].first).to have_attributes(show_attributes)
83
82
  expect(json_response["products"][1]).to have_attributes(show_attributes)
84
83
  expect(json_response["total_count"]).to eq(2)
@@ -88,19 +87,19 @@ module Spree
88
87
  end
89
88
 
90
89
  it "does not return inactive products when queried by ids" do
91
- api_get :index, ids: [inactive_product.id]
90
+ get spree.api_products_path, params: { ids: [inactive_product.id] }
92
91
  expect(json_response["count"]).to eq(0)
93
92
  end
94
93
 
95
94
  it "does not list unavailable products" do
96
- api_get :index
95
+ get spree.api_products_path
97
96
  expect(json_response["products"].first["name"]).not_to eq("inactive")
98
97
  end
99
98
 
100
99
  context "pagination" do
101
100
  it "can select the next page of products" do
102
101
  create(:product)
103
- api_get :index, page: 2, per_page: 1
102
+ get spree.api_products_path, params: { page: 2, per_page: 1 }
104
103
  expect(json_response["products"].first).to have_attributes(show_attributes)
105
104
  expect(json_response["total_count"]).to eq(2)
106
105
  expect(json_response["current_page"]).to eq(2)
@@ -109,7 +108,7 @@ module Spree
109
108
 
110
109
  it 'can control the page size through a parameter' do
111
110
  create(:product)
112
- api_get :index, per_page: 1
111
+ get spree.api_products_path, params: { per_page: 1 }
113
112
  expect(json_response['count']).to eq(1)
114
113
  expect(json_response['total_count']).to eq(2)
115
114
  expect(json_response['current_page']).to eq(1)
@@ -119,7 +118,7 @@ module Spree
119
118
 
120
119
  it "can search for products" do
121
120
  create(:product, name: "The best product in the world")
122
- api_get :index, q: { name_cont: "best" }
121
+ get spree.api_products_path, params: { q: { name_cont: "best" } }
123
122
  expect(json_response["products"].first).to have_attributes(show_attributes)
124
123
  expect(json_response["count"]).to eq(1)
125
124
  end
@@ -131,7 +130,7 @@ module Spree
131
130
  product.set_property("spree", "rocks")
132
131
  product.taxons << create(:taxon)
133
132
 
134
- api_get :show, id: product.to_param
133
+ get spree.api_product_path(product)
135
134
 
136
135
  expect(json_response).to have_attributes(show_attributes)
137
136
  expect(json_response['variants'].first).to have_attributes([:name,
@@ -161,7 +160,7 @@ module Spree
161
160
  before { Config.track_inventory_levels = false }
162
161
 
163
162
  it "still displays valid json with total_on_hand Float::INFINITY" do
164
- api_get :show, id: product.to_param
163
+ get spree.api_product_path(product)
165
164
  expect(response).to be_ok
166
165
  expect(json_response[:total_on_hand]).to eq nil
167
166
  end
@@ -177,27 +176,27 @@ module Spree
177
176
  end
178
177
 
179
178
  specify do
180
- api_get :show, id: product.to_param
179
+ get spree.api_product_path(product)
181
180
  expect(json_response["slug"]).to match(/and-1-ways/)
182
181
  product.destroy
183
182
 
184
- api_get :show, id: other_product.id
183
+ get spree.api_product_path(other_product)
185
184
  expect(json_response["slug"]).to match(/droids/)
186
185
  end
187
186
  end
188
187
 
189
188
  it "cannot see inactive products" do
190
- api_get :show, id: inactive_product.to_param
189
+ get spree.api_product_path(inactive_product)
191
190
  assert_not_found!
192
191
  end
193
192
 
194
193
  it "returns a 404 error when it cannot find a product" do
195
- api_get :show, id: "non-existant"
194
+ get spree.api_product_path("non-existant")
196
195
  assert_not_found!
197
196
  end
198
197
 
199
198
  it "can learn how to create a new product" do
200
- api_get :new
199
+ get spree.new_api_product_path
201
200
  expect(json_response["attributes"]).to eq(new_attributes.map(&:to_s))
202
201
  required_attributes = json_response["required_attributes"]
203
202
  expect(required_attributes).to include("name")
@@ -215,7 +214,7 @@ module Spree
215
214
  sign_in_as_admin!
216
215
 
217
216
  it "can see all products" do
218
- api_get :index
217
+ get spree.api_products_path
219
218
  expect(json_response["products"].count).to eq(2)
220
219
  expect(json_response["count"]).to eq(2)
221
220
  expect(json_response["current_page"]).to eq(1)
@@ -229,21 +228,23 @@ module Spree
229
228
  end
230
229
 
231
230
  it "does not include deleted products" do
232
- api_get :index
231
+ get spree.api_products_path
233
232
  expect(json_response["products"].count).to eq(2)
234
233
  end
235
234
 
236
235
  it "can include deleted products" do
237
- api_get :index, show_deleted: 1
236
+ get spree.api_products_path, params: { show_deleted: 1 }
238
237
  expect(json_response["products"].count).to eq(3)
239
238
  end
240
239
  end
241
240
 
242
241
  describe "creating a product" do
243
242
  it "can create a new product" do
244
- api_post :create, product: { name: "The Other Product",
245
- price: 19.99,
246
- shipping_category_id: create(:shipping_category).id }
243
+ post spree.api_products_path, params: {
244
+ product: { name: "The Other Product",
245
+ price: 19.99,
246
+ shipping_category_id: create(:shipping_category).id }
247
+ }
247
248
  expect(json_response).to have_attributes(base_attributes)
248
249
  expect(response.status).to eq(201)
249
250
  end
@@ -251,7 +252,7 @@ module Spree
251
252
  it "creates with embedded variants" do
252
253
  product_data[:variants] = [attributes_for_variant, attributes_for_variant]
253
254
 
254
- api_post :create, product: product_data
255
+ post spree.api_products_path, params: { product: product_data }
255
256
  expect(response.status).to eq 201
256
257
 
257
258
  variants = json_response['variants']
@@ -268,7 +269,7 @@ module Spree
268
269
  value: "cotton"
269
270
  }]
270
271
 
271
- api_post :create, product: product_data
272
+ post spree.api_products_path, params: { product: product_data }
272
273
 
273
274
  expect(json_response['product_properties'][0]['property_name']).to eq('fabric')
274
275
  expect(json_response['product_properties'][0]['value']).to eq('cotton')
@@ -277,7 +278,7 @@ module Spree
277
278
  it "can create a new product with option_types" do
278
279
  product_data[:option_types] = ['size', 'color']
279
280
 
280
- api_post :create, product: product_data
281
+ post spree.api_products_path, params: { product: product_data }
281
282
  expect(json_response['option_types'].count).to eq(2)
282
283
  end
283
284
 
@@ -286,23 +287,23 @@ module Spree
286
287
  price: 19.99,
287
288
  shipping_category: "Free Ships" }
288
289
 
289
- api_post :create, product: hash
290
+ post spree.api_products_path, params: { product: hash }
290
291
  expect(response.status).to eq 201
291
292
 
292
- shipping_id = ShippingCategory.find_by_name("Free Ships").id
293
+ shipping_id = ShippingCategory.find_by(name: "Free Ships").id
293
294
  expect(json_response['shipping_category_id']).to eq shipping_id
294
295
  end
295
296
 
296
297
  it "puts the created product in the given taxon" do
297
298
  product_data[:taxon_ids] = taxon_1.id.to_s
298
- api_post :create, product: product_data
299
+ post spree.api_products_path, params: { product: product_data }
299
300
  expect(json_response["taxon_ids"]).to eq([taxon_1.id])
300
301
  end
301
302
 
302
303
  # Regression test for https://github.com/spree/spree/issues/4123
303
304
  it "puts the created product in the given taxons" do
304
305
  product_data[:taxon_ids] = [taxon_1.id, taxon_2.id].join(',')
305
- api_post :create, product: product_data
306
+ post spree.api_products_path, params: { product: product_data }
306
307
  expect(json_response["taxon_ids"]).to eq([taxon_1.id, taxon_2.id])
307
308
  end
308
309
 
@@ -317,14 +318,14 @@ module Spree
317
318
  end
318
319
 
319
320
  it "can still create a product" do
320
- api_post :create, product: product_data, token: "fake"
321
+ post spree.api_products_path, params: { product: product_data, token: "fake" }
321
322
  expect(json_response).to have_attributes(show_attributes)
322
323
  expect(response.status).to eq(201)
323
324
  end
324
325
  end
325
326
 
326
327
  it "cannot create a new product with invalid attributes" do
327
- api_post :create, product: { foo: :bar }
328
+ post spree.api_products_path, params: { product: { foo: :bar } }
328
329
  expect(response.status).to eq(422)
329
330
  expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.")
330
331
  errors = json_response["errors"]
@@ -334,17 +335,17 @@ module Spree
334
335
 
335
336
  context 'updating a product' do
336
337
  it "can update a product" do
337
- api_put :update, id: product.to_param, product: { name: "New and Improved Product!" }
338
+ put spree.api_product_path(product), params: { product: { name: "New and Improved Product!" } }
338
339
  expect(response.status).to eq(200)
339
340
  end
340
341
 
341
342
  it "can create new option types on a product" do
342
- api_put :update, id: product.to_param, product: { option_types: ['shape', 'color'] }
343
+ put spree.api_product_path(product), params: { product: { option_types: ['shape', 'color'] } }
343
344
  expect(json_response['option_types'].count).to eq(2)
344
345
  end
345
346
 
346
347
  it "can create new variants on a product" do
347
- api_put :update, id: product.to_param, product: { variants: [attributes_for_variant, attributes_for_variant.merge(sku: "ABC-#{Kernel.rand(9999)}")] }
348
+ put spree.api_product_path(product), params: { product: { variants: [attributes_for_variant, attributes_for_variant.merge(sku: "ABC-#{Kernel.rand(9999)}")] } }
348
349
  expect(response.status).to eq 200
349
350
  expect(json_response['variants'].count).to eq(2) # 2 variants
350
351
 
@@ -361,7 +362,7 @@ module Spree
361
362
  }
362
363
  variant_id = product.variants.create!({ product: product }.merge(variant_hash)).id
363
364
 
364
- api_put :update, id: product.to_param, product: {
365
+ put spree.api_product_path(product), params: { product: {
365
366
  variants: [
366
367
  variant_hash.merge(
367
368
  id: variant_id.to_s,
@@ -369,7 +370,7 @@ module Spree
369
370
  options: [{ name: "size", value: "large" }]
370
371
  )
371
372
  ]
372
- }
373
+ } }
373
374
 
374
375
  expect(json_response['variants'].count).to eq(1)
375
376
  variants = json_response['variants'].select { |v| !v['is_master'] }
@@ -379,7 +380,7 @@ module Spree
379
380
  end
380
381
 
381
382
  it "cannot update a product with an invalid attribute" do
382
- api_put :update, id: product.to_param, product: { name: "" }
383
+ put spree.api_product_path(product), params: { product: { name: "" } }
383
384
  expect(response.status).to eq(422)
384
385
  expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.")
385
386
  expect(json_response["errors"]["name"]).to eq(["can't be blank"])
@@ -387,20 +388,20 @@ module Spree
387
388
 
388
389
  # Regression test for https://github.com/spree/spree/issues/4123
389
390
  it "puts the created product in the given taxon" do
390
- api_put :update, id: product.to_param, product: { taxon_ids: taxon_1.id.to_s }
391
+ put spree.api_product_path(product), params: { product: { taxon_ids: taxon_1.id.to_s } }
391
392
  expect(json_response["taxon_ids"]).to eq([taxon_1.id])
392
393
  end
393
394
 
394
395
  # Regression test for https://github.com/spree/spree/issues/4123
395
396
  it "puts the created product in the given taxons" do
396
- api_put :update, id: product.to_param, product: { taxon_ids: [taxon_1.id, taxon_2.id].join(',') }
397
+ put spree.api_product_path(product), params: { product: { taxon_ids: [taxon_1.id, taxon_2.id].join(',') } }
397
398
  expect(json_response["taxon_ids"]).to match_array([taxon_1.id, taxon_2.id])
398
399
  end
399
400
  end
400
401
 
401
402
  it "can delete a product" do
402
403
  expect(product.deleted_at).to be_nil
403
- api_delete :destroy, id: product.to_param
404
+ delete spree.api_product_path(product)
404
405
  expect(response.status).to eq(204)
405
406
  expect(product.reload.deleted_at).not_to be_nil
406
407
  end