solidus_api 2.4.2 → 2.5.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 (46) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +1 -5
  3. data/Rakefile +7 -8
  4. data/app/controllers/spree/api/line_items_controller.rb +1 -3
  5. data/app/controllers/spree/api/orders_controller.rb +1 -1
  6. data/app/controllers/spree/api/products_controller.rb +1 -1
  7. data/app/controllers/spree/api/shipments_controller.rb +21 -7
  8. data/app/controllers/spree/api/stock_items_controller.rb +4 -4
  9. data/app/controllers/spree/api/taxonomies_controller.rb +1 -0
  10. data/app/controllers/spree/api/taxons_controller.rb +1 -0
  11. data/app/controllers/spree/api/variants_controller.rb +13 -4
  12. data/app/helpers/spree/api/api_helpers.rb +0 -9
  13. data/app/views/spree/api/shared/_pagination.json.jbuilder +1 -1
  14. data/app/views/spree/api/shipments/estimated_rates.json.jbuilder +4 -0
  15. data/app/views/spree/api/variants/_big.json.jbuilder +0 -1
  16. data/app/views/spree/api/variants/_small.json.jbuilder +6 -1
  17. data/config/locales/en.yml +0 -6
  18. data/config/routes.rb +3 -7
  19. data/lib/spree/api/engine.rb +0 -10
  20. data/lib/spree_api.rb +0 -1
  21. data/solidus_api.gemspec +1 -2
  22. data/spec/controllers/spree/api/resource_controller_spec.rb +9 -9
  23. data/spec/features/checkout_spec.rb +8 -8
  24. data/spec/requests/api/address_books_spec.rb +1 -3
  25. data/spec/requests/spree/api/checkouts_controller_spec.rb +4 -5
  26. data/spec/requests/spree/api/config_controller_spec.rb +2 -2
  27. data/spec/requests/spree/api/orders_controller_spec.rb +27 -11
  28. data/spec/requests/spree/api/products_controller_spec.rb +1 -1
  29. data/spec/requests/spree/api/return_authorizations_controller_spec.rb +13 -13
  30. data/spec/requests/spree/api/shipments_controller_spec.rb +66 -4
  31. data/spec/requests/spree/api/stock_items_controller_spec.rb +4 -4
  32. data/spec/requests/spree/api/stock_locations_controller_spec.rb +7 -7
  33. data/spec/requests/spree/api/taxonomies_controller_spec.rb +1 -0
  34. data/spec/requests/spree/api/taxons_controller_spec.rb +3 -2
  35. data/spec/requests/spree/api/variants_controller_spec.rb +26 -0
  36. data/spec/spec_helper.rb +13 -23
  37. metadata +11 -41
  38. data/Gemfile +0 -5
  39. data/app/controllers/spree/api/stock_transfers_controller.rb +0 -20
  40. data/app/controllers/spree/api/transfer_items_controller.rb +0 -42
  41. data/app/views/spree/api/errors/variant_not_in_stock_transfer.json.jbuilder +0 -1
  42. data/app/views/spree/api/stock_transfers/receive.json.jbuilder +0 -4
  43. data/app/views/spree/api/transfer_items/_transfer_item.json.jbuilder +0 -5
  44. data/app/views/spree/api/transfer_items/show.json.jbuilder +0 -1
  45. data/spec/requests/spree/api/stock_transfers_controller_spec.rb +0 -97
  46. data/spec/requests/spree/api/transfer_items_controller_spec.rb +0 -150
@@ -45,20 +45,20 @@ module Spree
45
45
 
46
46
  it "does not include unpermitted params, or allow overriding the user" do
47
47
  subject
48
- expect(response).to be_success
48
+ expect(response).to be_successful
49
49
  order = Spree::Order.last
50
50
  expect(order.user).to eq current_api_user
51
51
  expect(order.email).to eq target_user.email
52
52
  end
53
53
 
54
- it { is_expected.to be_success }
54
+ it { is_expected.to be_successful }
55
55
 
56
56
  context 'creating payment' do
57
57
  let(:attributes) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) }
58
58
 
59
59
  context "with allowed payment method" do
60
60
  let!(:payment_method) { create(:check_payment_method, name: "allowed" ) }
61
- it { is_expected.to be_success }
61
+ it { is_expected.to be_successful }
62
62
  it "creates a payment" do
63
63
  expect {
64
64
  subject
@@ -91,7 +91,7 @@ module Spree
91
91
  expect(order.created_at).to eq date_override
92
92
  end
93
93
 
94
- it { is_expected.to be_success }
94
+ it { is_expected.to be_successful }
95
95
  end
96
96
 
97
97
  context 'when the line items have custom attributes' do
@@ -126,7 +126,7 @@ module Spree
126
126
  }.to change { order.reload.email }.to("foo@foobar.com")
127
127
  end
128
128
 
129
- it { is_expected.to be_success }
129
+ it { is_expected.to be_successful }
130
130
 
131
131
  it "does not associate users" do
132
132
  expect {
@@ -145,7 +145,7 @@ module Spree
145
145
 
146
146
  context "with allowed payment method" do
147
147
  let!(:payment_method) { create(:check_payment_method, name: "allowed" ) }
148
- it { is_expected.to be_success }
148
+ it { is_expected.to be_successful }
149
149
  it "creates a payment" do
150
150
  expect {
151
151
  subject
@@ -269,7 +269,7 @@ module Spree
269
269
 
270
270
  describe 'GET #show' do
271
271
  let(:order) { create :order_with_line_items }
272
- let(:adjustment) { FactoryGirl.create(:adjustment, adjustable: order, order: order) }
272
+ let(:adjustment) { FactoryBot.create(:adjustment, adjustable: order, order: order) }
273
273
 
274
274
  subject { get spree.api_order_path(order) }
275
275
 
@@ -289,6 +289,22 @@ module Spree
289
289
  end
290
290
  end
291
291
 
292
+ context 'when an item does not track inventory' do
293
+ before do
294
+ order.line_items.first.variant.update_attributes!(track_inventory: false)
295
+ end
296
+
297
+ it 'contains stock information on variant' do
298
+ subject
299
+ variant = json_response['line_items'][0]['variant']
300
+ expect(variant).to_not be_nil
301
+ expect(variant['in_stock']).to eq(true)
302
+ expect(variant['total_on_hand']).to eq(nil)
303
+ expect(variant['is_backorderable']).to eq(true)
304
+ expect(variant['is_destroyed']).to eq(false)
305
+ end
306
+ end
307
+
292
308
  context 'when shipment adjustments are present' do
293
309
  before do
294
310
  order.shipments.first.adjustments << adjustment
@@ -541,7 +557,7 @@ module Spree
541
557
  context "order has shipments" do
542
558
  before { order.create_proposed_shipments }
543
559
 
544
- it "clears out all existing shipments on line item udpate" do
560
+ it "clears out all existing shipments on line item update" do
545
561
  put spree.api_order_path(order), params: { order: {
546
562
  line_items: {
547
563
  0 => { id: line_item.id, quantity: 10 }
@@ -616,7 +632,7 @@ module Spree
616
632
 
617
633
  context "when in delivery" do
618
634
  let!(:shipping_method) do
619
- FactoryGirl.create(:shipping_method).tap do |shipping_method|
635
+ FactoryBot.create(:shipping_method).tap do |shipping_method|
620
636
  shipping_method.calculator.preferred_amount = 10
621
637
  shipping_method.calculator.save
622
638
  end
@@ -825,7 +841,7 @@ module Spree
825
841
  expect(response.status).to eq 200
826
842
  expect(order.reload.promotions).to eq [promo]
827
843
  expect(json_response).to eq({
828
- "success" => Spree.t(:coupon_code_applied),
844
+ "success" => I18n.t('spree.coupon_code_applied'),
829
845
  "error" => nil,
830
846
  "successful" => true,
831
847
  "status_code" => "coupon_code_applied"
@@ -843,7 +859,7 @@ module Spree
843
859
  expect(order.reload.promotions).to eq []
844
860
  expect(json_response).to eq({
845
861
  "success" => nil,
846
- "error" => Spree.t(:coupon_code_unknown_error),
862
+ "error" => I18n.t('spree.coupon_code_unknown_error'),
847
863
  "successful" => false,
848
864
  "status_code" => "coupon_code_unknown_error"
849
865
  })
@@ -178,7 +178,7 @@ module Spree
178
178
  specify do
179
179
  get spree.api_product_path(product)
180
180
  expect(json_response["slug"]).to match(/and-1-ways/)
181
- product.destroy
181
+ product.discard
182
182
 
183
183
  get spree.api_product_path(other_product)
184
184
  expect(json_response["slug"]).to match(/droids/)
@@ -14,8 +14,8 @@ module Spree
14
14
 
15
15
  shared_examples_for 'a return authorization creator' do
16
16
  it "can create a new return authorization" do
17
- stock_location = FactoryGirl.create(:stock_location)
18
- reason = FactoryGirl.create(:return_reason)
17
+ stock_location = FactoryBot.create(:stock_location)
18
+ reason = FactoryBot.create(:return_reason)
19
19
  rma_params = { stock_location_id: stock_location.id,
20
20
  return_reason_id: reason.id,
21
21
  memo: "Defective" }
@@ -74,7 +74,7 @@ module Spree
74
74
  sign_in_as_admin!
75
75
 
76
76
  it "can show return authorization" do
77
- FactoryGirl.create(:return_authorization, order: order)
77
+ FactoryBot.create(:return_authorization, order: order)
78
78
  return_authorization = order.return_authorizations.first
79
79
  get spree.api_order_return_authorization_path(order, return_authorization.id)
80
80
  expect(response.status).to eq(200)
@@ -83,8 +83,8 @@ module Spree
83
83
  end
84
84
 
85
85
  it "can get a list of return authorizations" do
86
- FactoryGirl.create(:return_authorization, order: order)
87
- FactoryGirl.create(:return_authorization, order: order)
86
+ FactoryBot.create(:return_authorization, order: order)
87
+ FactoryBot.create(:return_authorization, order: order)
88
88
  get spree.api_order_return_authorizations_path(order), params: { order_id: order.number }
89
89
  expect(response.status).to eq(200)
90
90
  return_authorizations = json_response["return_authorizations"]
@@ -93,8 +93,8 @@ module Spree
93
93
  end
94
94
 
95
95
  it 'can control the page size through a parameter' do
96
- FactoryGirl.create(:return_authorization, order: order)
97
- FactoryGirl.create(:return_authorization, order: order)
96
+ FactoryBot.create(:return_authorization, order: order)
97
+ FactoryBot.create(:return_authorization, order: order)
98
98
  get spree.api_order_return_authorizations_path(order), params: { order_id: order.number, per_page: 1 }
99
99
  expect(json_response['count']).to eq(1)
100
100
  expect(json_response['current_page']).to eq(1)
@@ -102,7 +102,7 @@ module Spree
102
102
  end
103
103
 
104
104
  it 'can query the results through a paramter' do
105
- FactoryGirl.create(:return_authorization, order: order)
105
+ FactoryBot.create(:return_authorization, order: order)
106
106
  expected_result = create(:return_authorization, memo: 'damaged')
107
107
  order.return_authorizations << expected_result
108
108
  get spree.api_order_return_authorizations_path(order), params: { q: { memo_cont: 'damaged' } }
@@ -118,7 +118,7 @@ module Spree
118
118
  end
119
119
 
120
120
  it "can update a return authorization on the order" do
121
- FactoryGirl.create(:return_authorization, order: order)
121
+ FactoryBot.create(:return_authorization, order: order)
122
122
  return_authorization = order.return_authorizations.first
123
123
  put spree.api_order_return_authorization_path(order, return_authorization.id), params: { return_authorization: { memo: "ABC" } }
124
124
  expect(response.status).to eq(200)
@@ -126,7 +126,7 @@ module Spree
126
126
  end
127
127
 
128
128
  it "can cancel a return authorization on the order" do
129
- FactoryGirl.create(:new_return_authorization, order: order)
129
+ FactoryBot.create(:new_return_authorization, order: order)
130
130
  return_authorization = order.return_authorizations.first
131
131
  expect(return_authorization.state).to eq("authorized")
132
132
  put spree.cancel_api_order_return_authorization_path(order, return_authorization.id)
@@ -135,7 +135,7 @@ module Spree
135
135
  end
136
136
 
137
137
  it "can delete a return authorization on the order" do
138
- FactoryGirl.create(:return_authorization, order: order)
138
+ FactoryBot.create(:return_authorization, order: order)
139
139
  return_authorization = order.return_authorizations.first
140
140
  delete spree.api_order_return_authorization_path(order, return_authorization.id)
141
141
  expect(response.status).to eq(204)
@@ -152,7 +152,7 @@ module Spree
152
152
  end
153
153
 
154
154
  it "cannot update a return authorization on the order" do
155
- FactoryGirl.create(:return_authorization, order: order)
155
+ FactoryBot.create(:return_authorization, order: order)
156
156
  return_authorization = order.return_authorizations.first
157
157
  put spree.api_order_return_authorization_path(order, return_authorization.id), params: { return_authorization: { memo: "ABC" } }
158
158
  assert_unauthorized!
@@ -160,7 +160,7 @@ module Spree
160
160
  end
161
161
 
162
162
  it "cannot delete a return authorization on the order" do
163
- FactoryGirl.create(:return_authorization, order: order)
163
+ FactoryBot.create(:return_authorization, order: order)
164
164
  return_authorization = order.return_authorizations.first
165
165
  delete spree.api_order_return_authorization_path(order, return_authorization.id)
166
166
  assert_unauthorized!
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Spree::Api::ShipmentsController, type: :request do
4
+ include ActiveSupport::Testing::TimeHelpers
5
+
4
6
  let!(:shipment) { create(:shipment, inventory_units: [build(:inventory_unit, shipment: nil)]) }
5
7
  let!(:attributes) { [:id, :tracking, :tracking_url, :number, :cost, :shipped_at, :stock_location_name, :order_id, :shipping_rates, :shipping_methods] }
6
8
 
@@ -126,7 +128,7 @@ describe Spree::Api::ShipmentsController, type: :request do
126
128
 
127
129
  it 'removes a destroyed variant from a shipment' do
128
130
  order.contents.add(variant, 2)
129
- variant.destroy
131
+ variant.discard
130
132
 
131
133
  put spree.remove_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 }
132
134
  expect(response.status).to eq(200)
@@ -134,6 +136,23 @@ describe Spree::Api::ShipmentsController, type: :request do
134
136
  end
135
137
  end
136
138
 
139
+ context 'for ready shipments' do
140
+ let(:order) { create :order_ready_to_ship, line_items_attributes: [{ variant: variant, quantity: 1 }] }
141
+ let(:shipment) { order.shipments.first }
142
+
143
+ it 'adds a variant to a shipment' do
144
+ put spree.add_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 }
145
+ expect(response.status).to eq(200)
146
+ expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }['quantity']).to eq(2)
147
+ end
148
+
149
+ it 'removes a variant from a shipment' do
150
+ put spree.remove_api_shipment_path(shipment), params: { variant_id: variant.to_param, quantity: 1 }
151
+ expect(response.status).to eq(200)
152
+ expect(json_response['manifest'].detect { |h| h['variant']['id'] == variant.id }).to be nil
153
+ end
154
+ end
155
+
137
156
  context "for shipped shipments" do
138
157
  let(:order) { create :shipped_order }
139
158
  let(:shipment) { order.shipments.first }
@@ -218,6 +237,48 @@ describe Spree::Api::ShipmentsController, type: :request do
218
237
  end
219
238
  end
220
239
 
240
+ describe "#estimated_rates" do
241
+ let!(:user_shipping_method) { shipment.shipping_method }
242
+ let!(:admin_shipping_method) { create(:shipping_method, available_to_users: false, name: "Secret") }
243
+
244
+ sign_in_as_admin!
245
+
246
+ subject do
247
+ get spree.estimated_rates_api_shipment_path(shipment)
248
+ end
249
+
250
+ it "returns success" do
251
+ subject
252
+ expect(response).to be_success
253
+ end
254
+
255
+ it "returns rates available to user" do
256
+ subject
257
+ expect(json_response['shipping_rates']).to include(
258
+ {
259
+ "name" => user_shipping_method.name,
260
+ "cost" => "100.0",
261
+ "shipping_method_id" => user_shipping_method.id,
262
+ "shipping_method_code" => user_shipping_method.code,
263
+ "display_cost" => "$100.00"
264
+ }
265
+ )
266
+ end
267
+
268
+ it "returns rates available to admin" do
269
+ subject
270
+ expect(json_response['shipping_rates']).to include(
271
+ {
272
+ "name" => admin_shipping_method.name,
273
+ "cost" => "10.0",
274
+ "shipping_method_id" => admin_shipping_method.id,
275
+ "shipping_method_code" => admin_shipping_method.code,
276
+ "display_cost" => "$10.00"
277
+ }
278
+ )
279
+ end
280
+ end
281
+
221
282
  describe "#ship" do
222
283
  let(:shipment) { create(:order_ready_to_ship).shipments.first }
223
284
 
@@ -230,11 +291,12 @@ describe Spree::Api::ShipmentsController, type: :request do
230
291
  context "the user is allowed to ship the shipment" do
231
292
  sign_in_as_admin!
232
293
  it "ships the shipment" do
233
- Timecop.freeze do
294
+ now = Time.current
295
+ travel_to(now) do
234
296
  subject
235
297
  shipment.reload
236
298
  expect(shipment.state).to eq 'shipped'
237
- expect(shipment.shipped_at.to_i).to eq Time.current.to_i
299
+ expect(shipment.shipped_at.to_i).to eq now.to_i
238
300
  end
239
301
  end
240
302
 
@@ -348,7 +410,7 @@ describe Spree::Api::ShipmentsController, type: :request do
348
410
 
349
411
  it "returns the correct message" do
350
412
  subject
351
- expect(response).to be_success
413
+ expect(response).to be_successful
352
414
  expect(parsed_response["success"]).to be true
353
415
  expect(parsed_response["message"]).to eq("Variants successfully transferred")
354
416
  end
@@ -18,7 +18,7 @@ module Spree
18
18
  describe "#index" do
19
19
  it "can list stock items for an active stock location" do
20
20
  get spree.api_stock_location_stock_items_path(stock_location)
21
- expect(response).to be_success
21
+ expect(response).to be_successful
22
22
  expect(json_response['stock_items'].first).to have_attributes(attributes)
23
23
  expect(json_response['stock_items'].first['variant']['sku']).to match /\ASKU-\d+\z/
24
24
  end
@@ -169,7 +169,7 @@ module Spree
169
169
  it "does not allow negative inventory for the stock item" do
170
170
  subject
171
171
  expect(response.status).to eq 422
172
- expect(response.body).to match Spree.t(:stock_not_below_zero)
172
+ expect(response.body).to match I18n.t('spree.stock_not_below_zero')
173
173
  expect(assigns(:stock_item).count_on_hand).to eq 0
174
174
  end
175
175
  end
@@ -235,7 +235,7 @@ module Spree
235
235
  it "does not allow negative inventory for the stock item" do
236
236
  subject
237
237
  expect(response.status).to eq 422
238
- expect(response.body).to match Spree.t(:stock_not_below_zero)
238
+ expect(response.body).to match I18n.t('spree.stock_not_below_zero')
239
239
  expect(assigns(:stock_item).count_on_hand).to eq 10
240
240
  end
241
241
  end
@@ -293,7 +293,7 @@ module Spree
293
293
  it "does not allow negative inventory for the stock item" do
294
294
  subject
295
295
  expect(response.status).to eq 422
296
- expect(response.body).to match Spree.t(:stock_not_below_zero)
296
+ expect(response.body).to match I18n.t('spree.stock_not_below_zero')
297
297
  expect(assigns(:stock_item).count_on_hand).to eq 10
298
298
  end
299
299
  end
@@ -14,7 +14,7 @@ module Spree
14
14
  describe "#index" do
15
15
  it "can see active stock locations" do
16
16
  get spree.api_stock_locations_path
17
- expect(response).to be_success
17
+ expect(response).to be_successful
18
18
  stock_locations = json_response['stock_locations'].map { |sl| sl['name'] }
19
19
  expect(stock_locations).to include stock_location.name
20
20
  end
@@ -22,7 +22,7 @@ module Spree
22
22
  it "cannot see inactive stock locations" do
23
23
  stock_location.update_attributes!(active: false)
24
24
  get spree.api_stock_locations_path
25
- expect(response).to be_success
25
+ expect(response).to be_successful
26
26
  stock_locations = json_response['stock_locations'].map { |sl| sl['name'] }
27
27
  expect(stock_locations).not_to include stock_location.name
28
28
  end
@@ -31,7 +31,7 @@ module Spree
31
31
  describe "#show" do
32
32
  it "can see active stock locations" do
33
33
  get spree.api_stock_location_path(stock_location)
34
- expect(response).to be_success
34
+ expect(response).to be_successful
35
35
  expect(json_response['name']).to eq stock_location.name
36
36
  end
37
37
 
@@ -77,7 +77,7 @@ module Spree
77
77
  describe "#index" do
78
78
  it "can see active stock locations" do
79
79
  get spree.api_stock_locations_path
80
- expect(response).to be_success
80
+ expect(response).to be_successful
81
81
  stock_locations = json_response['stock_locations'].map { |sl| sl['name'] }
82
82
  expect(stock_locations).to include stock_location.name
83
83
  end
@@ -85,7 +85,7 @@ module Spree
85
85
  it "can see inactive stock locations" do
86
86
  stock_location.update_attributes!(active: false)
87
87
  get spree.api_stock_locations_path
88
- expect(response).to be_success
88
+ expect(response).to be_successful
89
89
  stock_locations = json_response['stock_locations'].map { |sl| sl['name'] }
90
90
  expect(stock_locations).to include stock_location.name
91
91
  end
@@ -116,14 +116,14 @@ module Spree
116
116
  describe "#show" do
117
117
  it "can see active stock locations" do
118
118
  get spree.api_stock_location_path(stock_location)
119
- expect(response).to be_success
119
+ expect(response).to be_successful
120
120
  expect(json_response['name']).to eq stock_location.name
121
121
  end
122
122
 
123
123
  it "can see inactive stock locations" do
124
124
  stock_location.update_attributes!(active: false)
125
125
  get spree.api_stock_location_path(stock_location)
126
- expect(response).to be_success
126
+ expect(response).to be_successful
127
127
  expect(json_response['name']).to eq stock_location.name
128
128
  end
129
129
  end
@@ -59,6 +59,7 @@ module Spree
59
59
  end
60
60
 
61
61
  it "gets the jstree-friendly version of a taxonomy" do
62
+ expect(Spree::Deprecation).to(receive(:warn))
62
63
  get spree.jstree_api_taxonomy_path(taxonomy.id)
63
64
  expect(json_response["data"]).to eq(taxonomy.root.name)
64
65
  expect(json_response["attr"]).to eq({ "id" => taxonomy.root.id, "name" => taxonomy.root.name })
@@ -92,6 +92,7 @@ module Spree
92
92
  end
93
93
 
94
94
  it "gets all taxons in JSTree form" do
95
+ expect(Spree::Deprecation).to(receive(:warn))
95
96
  get spree.jstree_api_taxonomy_taxon_path(taxonomy, taxon.id)
96
97
  response = json_response.first
97
98
  expect(response["data"]).to eq(taxon2.name)
@@ -130,11 +131,11 @@ module Spree
130
131
 
131
132
  it "handles exclude_data correctly" do
132
133
  get spree.api_taxon_products_path, params: { id: taxon.id, simple: true }
133
- expect(response).to be_success
134
+ expect(response).to be_successful
134
135
  simple_response = json_response
135
136
 
136
137
  get spree.api_taxon_products_path, params: { id: taxon.id }
137
- expect(response).to be_success
138
+ expect(response).to be_successful
138
139
  full_response = json_response
139
140
 
140
141
  expect(simple_response["products"][0]["description"]).to be_nil
@@ -114,6 +114,32 @@ module Spree
114
114
  end
115
115
  end
116
116
 
117
+ context "only suplliable variants" do
118
+ subject { get spree.api_variants_path, params: { suppliable_only: "true" } }
119
+
120
+ context "variant is backorderable" do
121
+ before do
122
+ variant.stock_items.update_all(count_on_hand: 0, backorderable: true)
123
+ end
124
+
125
+ it "is not returned in the results" do
126
+ subject
127
+ expect(json_response["variants"].count).to eq 1
128
+ end
129
+ end
130
+
131
+ context "variant is unsuppliable" do
132
+ before do
133
+ variant.stock_items.update_all(count_on_hand: 0, backorderable: false)
134
+ end
135
+
136
+ it "is returned in the results" do
137
+ subject
138
+ expect(json_response["variants"].count).to eq 0
139
+ end
140
+ end
141
+ end
142
+
117
143
  context "all variants" do
118
144
  subject { get spree.api_variants_path, params: { in_stock_only: "false" } }
119
145
 
data/spec/spec_helper.rb CHANGED
@@ -1,28 +1,24 @@
1
1
  if ENV["COVERAGE"]
2
- # Run Coverage report
3
2
  require 'simplecov'
4
- SimpleCov.start do
5
- add_group 'Controllers', 'app/controllers'
6
- add_group 'Helpers', 'app/helpers'
7
- add_group 'Mailers', 'app/mailers'
8
- add_group 'Models', 'app/models'
9
- add_group 'Views', 'app/views'
10
- add_group 'Libraries', 'lib'
11
- end
3
+ SimpleCov.start('rails')
12
4
  end
13
5
 
14
6
  # This file is copied to spec/ when you run 'rails generate rspec:install'
15
7
  ENV["RAILS_ENV"] ||= 'test'
16
8
 
17
- begin
18
- require File.expand_path("../dummy/config/environment", __FILE__)
19
- rescue LoadError
20
- $stderr.puts "Could not load dummy application. Please ensure you have run `bundle exec rake test_app`"
21
- exit 1
22
- end
9
+ require 'solidus_api'
10
+ require 'spree/testing_support/dummy_app'
11
+ DummyApp.setup(
12
+ gem_root: File.expand_path('../../', __FILE__),
13
+ lib_name: 'solidus_api'
14
+ )
23
15
 
16
+ require 'rails-controller-testing'
24
17
  require 'rspec/rails'
25
- require 'ffaker'
18
+ require 'rspec-activemodel-mocks'
19
+
20
+ require 'database_cleaner'
21
+ require 'with_model'
26
22
 
27
23
  # Requires supporting ruby files with custom matchers and macros, etc,
28
24
  # in spec/support/ and its subdirectories.
@@ -49,7 +45,7 @@ RSpec.configure do |config|
49
45
  c.syntax = :expect
50
46
  end
51
47
 
52
- config.include FactoryGirl::Syntax::Methods
48
+ config.include FactoryBot::Syntax::Methods
53
49
  config.include Spree::Api::TestingSupport::Helpers, type: :request
54
50
  config.extend Spree::Api::TestingSupport::Setup, type: :request
55
51
  config.include Spree::Api::TestingSupport::Helpers, type: :controller
@@ -58,8 +54,6 @@ RSpec.configure do |config|
58
54
 
59
55
  config.extend WithModel
60
56
 
61
- config.fail_fast = ENV['FAIL_FAST'] || false
62
-
63
57
  config.before(:each) do
64
58
  Rails.cache.clear
65
59
  reset_spree_preferences
@@ -67,10 +61,6 @@ RSpec.configure do |config|
67
61
  end
68
62
 
69
63
  config.include ActiveJob::TestHelper
70
- config.include VersionCake::TestHelpers, type: :controller
71
- config.before(:each, type: :controller) do
72
- set_request_version('', 1)
73
- end
74
64
 
75
65
  config.use_transactional_fixtures = true
76
66