solidus_api 2.8.6 → 2.9.0.rc.1
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.
- checksums.yaml +4 -4
- data/app/controllers/spree/api/checkouts_controller.rb +4 -17
- data/app/controllers/spree/api/orders_controller.rb +12 -7
- data/app/controllers/spree/api/shipments_controller.rb +3 -6
- data/app/controllers/spree/api/stock_items_controller.rb +2 -2
- data/app/helpers/spree/api/api_helpers.rb +6 -2
- data/app/views/spree/api/errors/invalid_api_key.json.jbuilder +1 -1
- data/app/views/spree/api/payments/credit_over_limit.json.jbuilder +1 -1
- data/app/views/spree/api/payments/source_views/{_storecredit.json.jbuilder → _store_credit.json.jbuilder} +0 -0
- data/app/views/spree/api/payments/update_forbidden.json.jbuilder +1 -1
- data/app/views/spree/api/products/_product.json.jbuilder +4 -2
- data/app/views/spree/api/shipments/_big.json.jbuilder +1 -10
- data/app/views/spree/api/variants/_small.json.jbuilder +4 -6
- data/config/locales/en.yml +20 -17
- data/db/migrate/20120411123334_resize_api_key_field.rb +1 -1
- data/spec/models/spree/legacy_user_spec.rb +3 -3
- data/spec/requests/spree/api/checkouts_controller_spec.rb +6 -38
- data/spec/requests/spree/api/orders_controller_spec.rb +39 -25
- data/spec/requests/spree/api/products_controller_spec.rb +18 -3
- data/spec/requests/spree/api/return_authorizations_controller_spec.rb +8 -0
- data/spec/requests/spree/api/stock_items_controller_spec.rb +3 -3
- data/spec/requests/spree/api/variants_controller_spec.rb +12 -0
- data/spec/spec_helper.rb +0 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f072a9ee2804fcc901b86b39bcc46256c1bf9a150010b38f68f8b21482c1ac4b
|
4
|
+
data.tar.gz: ad1d4f5fa1e4eb2111c6487a440cac9de7c3eabd1389166c7473f28ecfbf85db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7977793990e1c7a1e2ef3327a8e0a1cbe251c684305a68cc75333401179ca2fdc94dfedf7c2fe28d3b8280fd0aed17c41f8467b14e6460a9729c3f4d971f138c
|
7
|
+
data.tar.gz: 1681331bc656cbc6922629217c138887774f0faca3d835797f7d35d960ae31422efbe0429f2bffdf14aaf924a9b2adb9576ddca4d5b13b1dab0426c395335c38
|
@@ -76,24 +76,11 @@ module Spree
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def update_params
|
79
|
-
|
80
|
-
|
81
|
-
when :cart, :address
|
82
|
-
massaged_params.fetch(:order, {}).permit(
|
83
|
-
permitted_checkout_address_attributes
|
84
|
-
)
|
85
|
-
when :delivery
|
86
|
-
massaged_params.require(:order).permit(
|
87
|
-
permitted_checkout_delivery_attributes
|
88
|
-
)
|
89
|
-
when :payment
|
90
|
-
massaged_params.require(:order).permit(
|
91
|
-
permitted_checkout_payment_attributes
|
92
|
-
)
|
79
|
+
if update_params = massaged_params[:order]
|
80
|
+
update_params.permit(permitted_checkout_attributes)
|
93
81
|
else
|
94
|
-
|
95
|
-
|
96
|
-
)
|
82
|
+
# We current allow update requests without any parameters in them.
|
83
|
+
{}
|
97
84
|
end
|
98
85
|
end
|
99
86
|
|
@@ -9,6 +9,9 @@ module Spree
|
|
9
9
|
class_attribute :admin_order_attributes
|
10
10
|
self.admin_order_attributes = [:import, :number, :completed_at, :locked_at, :channel, :user_id, :created_at]
|
11
11
|
|
12
|
+
class_attribute :admin_payment_attributes
|
13
|
+
self.admin_payment_attributes = [:payment_method, :amount, :state, source: {}]
|
14
|
+
|
12
15
|
skip_before_action :authenticate_user, only: :apply_coupon_code
|
13
16
|
|
14
17
|
before_action :find_order, except: [:create, :mine, :current, :index]
|
@@ -128,13 +131,7 @@ module Spree
|
|
128
131
|
end
|
129
132
|
|
130
133
|
def normalize_params
|
131
|
-
if params[:order][:payments]
|
132
|
-
payments_params = params[:order].delete(:payments)
|
133
|
-
params[:order][:payments_attributes] = payments_params.map do |payment_params|
|
134
|
-
payment_params[:source_attributes] = payment_params.delete(:source) if payment_params[:source].present?
|
135
|
-
payment_params
|
136
|
-
end
|
137
|
-
end
|
134
|
+
params[:order][:payments_attributes] = params[:order].delete(:payments) if params[:order][:payments]
|
138
135
|
params[:order][:shipments_attributes] = params[:order].delete(:shipments) if params[:order][:shipments]
|
139
136
|
params[:order][:line_items_attributes] = params[:order].delete(:line_items) if params[:order][:line_items]
|
140
137
|
params[:order][:ship_address_attributes] = params[:order].delete(:ship_address) if params[:order][:ship_address].present?
|
@@ -162,6 +159,14 @@ module Spree
|
|
162
159
|
end
|
163
160
|
end
|
164
161
|
|
162
|
+
def permitted_payment_attributes
|
163
|
+
if can?(:admin, Spree::Payment)
|
164
|
+
super + admin_payment_attributes
|
165
|
+
else
|
166
|
+
super
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
165
170
|
def find_order(_lock = false)
|
166
171
|
@order = Spree::Order.find_by!(number: params[:id])
|
167
172
|
end
|
@@ -113,7 +113,7 @@ module Spree
|
|
113
113
|
)
|
114
114
|
|
115
115
|
if fulfilment_changer.run!
|
116
|
-
render json: { success: true, message: t('spree.
|
116
|
+
render json: { success: true, message: t('spree.api.shipment.transfer_success') }, status: :accepted
|
117
117
|
else
|
118
118
|
render json: { success: false, message: fulfilment_changer.errors.full_messages.to_sentence }, status: :accepted
|
119
119
|
end
|
@@ -131,11 +131,8 @@ module Spree
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def find_order_on_create
|
134
|
-
|
135
|
-
|
136
|
-
@order = Spree::Order.find_by!(number: params[:shipment][:order_id])
|
137
|
-
authorize! :read, @order
|
138
|
-
end
|
134
|
+
@order = Spree::Order.find_by!(number: params[:shipment][:order_id])
|
135
|
+
authorize! :read, @order
|
139
136
|
end
|
140
137
|
|
141
138
|
def find_shipment
|
@@ -77,14 +77,14 @@ module Spree
|
|
77
77
|
|
78
78
|
def adjust_stock_item_count_on_hand(count_on_hand_adjustment)
|
79
79
|
if @stock_item.count_on_hand + count_on_hand_adjustment < 0
|
80
|
-
raise StockLocation::InvalidMovementError.new(t('spree.stock_not_below_zero'))
|
80
|
+
raise StockLocation::InvalidMovementError.new(t('spree.api.stock_not_below_zero'))
|
81
81
|
end
|
82
82
|
@stock_movement = @stock_location.move(@stock_item.variant, count_on_hand_adjustment, current_api_user)
|
83
83
|
@stock_item = @stock_movement.stock_item
|
84
84
|
end
|
85
85
|
|
86
86
|
def render_stock_items_error
|
87
|
-
render json: { error: t('spree.stock_not_below_zero') }, status: 422
|
87
|
+
render json: { error: t('spree.api.stock_not_below_zero') }, status: 422
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -51,7 +51,7 @@ module Spree
|
|
51
51
|
end
|
52
52
|
|
53
53
|
@@product_attributes = [
|
54
|
-
:id, :name, :description, :
|
54
|
+
:id, :name, :description, :available_on,
|
55
55
|
:slug, :meta_description, :meta_keywords, :shipping_category_id,
|
56
56
|
:taxon_ids, :total_on_hand, :meta_title
|
57
57
|
]
|
@@ -61,7 +61,7 @@ module Spree
|
|
61
61
|
]
|
62
62
|
|
63
63
|
@@variant_attributes = [
|
64
|
-
:id, :name, :sku, :
|
64
|
+
:id, :name, :sku, :weight, :height, :width, :depth, :is_master,
|
65
65
|
:slug, :description, :track_inventory
|
66
66
|
]
|
67
67
|
|
@@ -183,6 +183,10 @@ module Spree
|
|
183
183
|
@@variant_attributes
|
184
184
|
end
|
185
185
|
end
|
186
|
+
|
187
|
+
def total_on_hand_for(object)
|
188
|
+
object.total_on_hand.finite? ? object.total_on_hand : nil
|
189
|
+
end
|
186
190
|
end
|
187
191
|
end
|
188
192
|
end
|
File without changes
|
@@ -2,8 +2,10 @@
|
|
2
2
|
|
3
3
|
@product_attributes ||= product_attributes
|
4
4
|
json.cache! [I18n.locale, @current_user_roles.include?('admin'), current_pricing_options, @product_attributes, @exclude_data, product] do
|
5
|
-
json.(product,
|
6
|
-
json.
|
5
|
+
json.(product, *(@product_attributes - [:total_on_hand]))
|
6
|
+
json.total_on_hand(total_on_hand_for(product))
|
7
|
+
json.price(product.price_for(current_pricing_options).try(:to_d))
|
8
|
+
json.display_price(product.price_for(current_pricing_options).to_s)
|
7
9
|
|
8
10
|
@exclude_data ||= {}
|
9
11
|
unless @exclude_data[:variants]
|
@@ -2,13 +2,7 @@
|
|
2
2
|
|
3
3
|
json.cache! [I18n.locale, shipment] do
|
4
4
|
json.(shipment, *shipment_attributes)
|
5
|
-
json.
|
6
|
-
if shipment.selected_shipping_rate
|
7
|
-
json.partial!("spree/api/shipping_rates/shipping_rate", shipping_rate: shipment.selected_shipping_rate)
|
8
|
-
else
|
9
|
-
json.nil!
|
10
|
-
end
|
11
|
-
end
|
5
|
+
json.partial!("spree/api/shipments/small", shipment: shipment)
|
12
6
|
json.inventory_units(shipment.inventory_units) do |inventory_unit|
|
13
7
|
json.(inventory_unit, *inventory_unit_attributes)
|
14
8
|
json.variant do
|
@@ -37,9 +31,6 @@ json.cache! [I18n.locale, shipment] do
|
|
37
31
|
json.ship_address do
|
38
32
|
json.partial!("spree/api/addresses/address", address: shipment.order.shipping_address)
|
39
33
|
end
|
40
|
-
json.adjustments(shipment.order.adjustments) do |adjustment|
|
41
|
-
json.partial!("spree/api/adjustments/adjustment", adjustment: adjustment)
|
42
|
-
end
|
43
34
|
json.payments(shipment.order.payments) do |payment|
|
44
35
|
json.(payment, :id, :amount, :display_amount, :state)
|
45
36
|
if payment.source
|
@@ -1,17 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
json.cache! [I18n.locale, variant] do
|
3
|
+
json.cache! [I18n.locale, current_pricing_options, variant] do
|
4
4
|
json.(variant, *variant_attributes)
|
5
|
-
json.
|
5
|
+
json.price(variant.price_for(current_pricing_options).try(:to_d))
|
6
|
+
json.display_price(variant.price_for(current_pricing_options).to_s)
|
6
7
|
json.options_text(variant.options_text)
|
7
8
|
json.track_inventory(variant.should_track_inventory?)
|
8
9
|
json.in_stock(variant.in_stock?)
|
9
10
|
json.is_backorderable(variant.is_backorderable?)
|
10
11
|
|
11
|
-
|
12
|
-
# Under JSON this woulb be NULL
|
13
|
-
# Under oj this would error
|
14
|
-
json.total_on_hand(variant.should_track_inventory? ? variant.total_on_hand : nil)
|
12
|
+
json.total_on_hand(total_on_hand_for(variant))
|
15
13
|
|
16
14
|
json.is_destroyed(variant.destroyed?)
|
17
15
|
json.option_values(variant.option_values) do |option_value|
|
data/config/locales/en.yml
CHANGED
@@ -1,23 +1,26 @@
|
|
1
|
+
---
|
1
2
|
en:
|
2
3
|
spree:
|
3
4
|
api:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
invalid_resource:
|
8
|
-
|
9
|
-
|
10
|
-
delete_restriction_error: "Cannot delete record."
|
11
|
-
key_generated: "Key generated"
|
12
|
-
key_cleared: "Key cleared"
|
5
|
+
delete_restriction_error: Cannot delete record.
|
6
|
+
gateway_error: 'There was a problem with the payment gateway: %{text}'
|
7
|
+
invalid_api_key: Invalid API key (%{key}) specified.
|
8
|
+
invalid_resource: Invalid resource. Please fix errors and try again.
|
9
|
+
invalid_taxonomy_id: Invalid taxonomy id.
|
10
|
+
must_specify_api_key: You must specify an API key.
|
13
11
|
order:
|
14
|
-
could_not_transition:
|
15
|
-
|
16
|
-
expected_total_mismatch:
|
17
|
-
|
12
|
+
could_not_transition: The order could not be transitioned. Please fix the
|
13
|
+
errors and try again.
|
14
|
+
expected_total_mismatch: Expected total does not match actual total.
|
15
|
+
invalid_shipping_method: Invalid shipping method specified.
|
16
|
+
quantity_is_not_available: Quantity is not available for items in your order
|
18
17
|
payment:
|
19
|
-
credit_over_limit:
|
20
|
-
|
18
|
+
credit_over_limit: This payment can only be credited up to %{limit}. Please
|
19
|
+
specify an amount less than or equal to this number.
|
20
|
+
update_forbidden: This payment cannot be updated because it is %{state}.
|
21
|
+
resource_not_found: The resource you were looking for could not be found.
|
21
22
|
shipment:
|
22
|
-
cannot_ready:
|
23
|
-
|
23
|
+
cannot_ready: Cannot ready shipment.
|
24
|
+
transfer_success: Variants successfully transferred
|
25
|
+
stock_not_below_zero: Stock must not be below zero.
|
26
|
+
unauthorized: You are not authorized to perform that action.
|
@@ -54,7 +54,7 @@ module Spree
|
|
54
54
|
|
55
55
|
before {
|
56
56
|
user.clear_spree_api_key!
|
57
|
-
|
57
|
+
stub_spree_preferences roles_for_auto_api_key: ['hobbit']
|
58
58
|
}
|
59
59
|
|
60
60
|
it { expect { subject }.to change { user.reload.spree_api_key }.from(nil) }
|
@@ -69,7 +69,7 @@ module Spree
|
|
69
69
|
before {
|
70
70
|
user.clear_spree_api_key!
|
71
71
|
other_user.clear_spree_api_key!
|
72
|
-
|
72
|
+
stub_spree_preferences(generate_api_key_for_all_roles: true)
|
73
73
|
}
|
74
74
|
|
75
75
|
it { expect { subject }.to change { user.reload.spree_api_key }.from(nil) }
|
@@ -89,7 +89,7 @@ module Spree
|
|
89
89
|
end
|
90
90
|
|
91
91
|
it "grants an api key on create when set to true" do
|
92
|
-
|
92
|
+
stub_spree_preferences(generate_api_key_for_all_roles: true)
|
93
93
|
|
94
94
|
expect(user.spree_api_key).to eq(nil)
|
95
95
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
describe Api::CheckoutsController, type: :request do
|
7
7
|
before(:each) do
|
8
8
|
stub_authentication!
|
9
|
-
|
9
|
+
stub_spree_preferences track_inventory_levels: false
|
10
10
|
country_zone = create(:zone, name: 'CountryZone')
|
11
11
|
@state = create(:state)
|
12
12
|
@country = @state.country
|
@@ -17,10 +17,6 @@ module Spree
|
|
17
17
|
@payment_method = create(:credit_card_payment_method)
|
18
18
|
end
|
19
19
|
|
20
|
-
after do
|
21
|
-
Spree::Config[:track_inventory_levels] = true
|
22
|
-
end
|
23
|
-
|
24
20
|
context "PUT 'update'" do
|
25
21
|
let(:order) do
|
26
22
|
order = create(:order_with_line_items)
|
@@ -176,7 +172,6 @@ module Spree
|
|
176
172
|
end
|
177
173
|
|
178
174
|
describe 'setting the payment amount' do
|
179
|
-
let(:order) { create(:order_with_line_items, state: :payment) }
|
180
175
|
let(:params) do
|
181
176
|
{
|
182
177
|
order_token: order.guest_token,
|
@@ -327,44 +322,17 @@ module Spree
|
|
327
322
|
end
|
328
323
|
end
|
329
324
|
|
330
|
-
it "cannot update attributes of another step" do
|
331
|
-
order.update_column(:state, "payment")
|
332
|
-
|
333
|
-
params = {
|
334
|
-
order_token: order.guest_token,
|
335
|
-
order: {
|
336
|
-
payments_attributes: [
|
337
|
-
{
|
338
|
-
payment_method_id: @payment_method.id.to_s,
|
339
|
-
source_attributes: attributes_for(:credit_card)
|
340
|
-
}
|
341
|
-
],
|
342
|
-
ship_address_attributes: {
|
343
|
-
zipcode: 'MALICIOUS ZIPCODE'
|
344
|
-
}
|
345
|
-
}
|
346
|
-
}
|
347
|
-
expect do
|
348
|
-
put spree.api_checkout_path(order), params: params
|
349
|
-
end.not_to change { order.reload.ship_address.zipcode }
|
350
|
-
expect(response.status).to eq(200)
|
351
|
-
end
|
352
|
-
|
353
325
|
it "returns the order if the order is already complete" do
|
354
326
|
order.update_columns(completed_at: Time.current, state: 'complete')
|
355
327
|
put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token }
|
356
328
|
assert_unauthorized!
|
357
329
|
end
|
358
330
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
instructions = "Don't drop it. (Please)"
|
365
|
-
put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { special_instructions: instructions } }
|
366
|
-
expect(json_response['special_instructions']).to eql(instructions)
|
367
|
-
end
|
331
|
+
# Regression test for https://github.com/spree/spree/issues/3784
|
332
|
+
it "can update the special instructions for an order" do
|
333
|
+
instructions = "Don't drop it. (Please)"
|
334
|
+
put spree.api_checkout_path(order.to_param), params: { order_token: order.guest_token, order: { special_instructions: instructions } }
|
335
|
+
expect(json_response['special_instructions']).to eql(instructions)
|
368
336
|
end
|
369
337
|
|
370
338
|
context "as an admin" do
|
@@ -156,7 +156,6 @@ module Spree
|
|
156
156
|
end
|
157
157
|
|
158
158
|
context 'creating payment' do
|
159
|
-
let!(:order) { create(:order_with_line_items) }
|
160
159
|
let(:order_params) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) }
|
161
160
|
|
162
161
|
context "with allowed payment method" do
|
@@ -167,28 +166,6 @@ module Spree
|
|
167
166
|
subject
|
168
167
|
}.to change { Spree::Payment.count }.by(1)
|
169
168
|
end
|
170
|
-
|
171
|
-
context 'trying to change the address' do
|
172
|
-
let(:order_params) do
|
173
|
-
super().merge(
|
174
|
-
ship_address_attributes: {
|
175
|
-
zipcode: '90100'
|
176
|
-
}
|
177
|
-
)
|
178
|
-
end
|
179
|
-
|
180
|
-
it 'changes the address' do
|
181
|
-
expect {
|
182
|
-
subject
|
183
|
-
}.to change { order.reload.ship_address.zipcode }
|
184
|
-
end
|
185
|
-
|
186
|
-
it 'invalidates the shipments' do
|
187
|
-
expect {
|
188
|
-
subject
|
189
|
-
}.to change { order.reload.shipments }.to([])
|
190
|
-
end
|
191
|
-
end
|
192
169
|
end
|
193
170
|
|
194
171
|
context "with disallowed payment method" do
|
@@ -384,7 +361,7 @@ module Spree
|
|
384
361
|
|
385
362
|
it 'renders the payment source view for store credit' do
|
386
363
|
subject
|
387
|
-
expect(response).to render_template partial: 'spree/api/payments/source_views/
|
364
|
+
expect(response).to render_template partial: 'spree/api/payments/source_views/_store_credit'
|
388
365
|
end
|
389
366
|
end
|
390
367
|
end
|
@@ -838,6 +815,43 @@ module Spree
|
|
838
815
|
expect(response.status).to eq 201
|
839
816
|
expect(json_response["user_id"]).to eq(user.id)
|
840
817
|
end
|
818
|
+
|
819
|
+
context "with payment" do
|
820
|
+
let(:params) do
|
821
|
+
{
|
822
|
+
payments: [{
|
823
|
+
amount: '10.0',
|
824
|
+
payment_method: create(:payment_method).name,
|
825
|
+
source: {
|
826
|
+
month: "01",
|
827
|
+
year: Date.today.year.to_s.last(2),
|
828
|
+
cc_type: "123",
|
829
|
+
last_digits: "1111",
|
830
|
+
name: "Credit Card"
|
831
|
+
}
|
832
|
+
}]
|
833
|
+
}
|
834
|
+
end
|
835
|
+
|
836
|
+
context "with source" do
|
837
|
+
it "creates a payment" do
|
838
|
+
post spree.api_orders_path, params: { order: params }
|
839
|
+
payment = json_response['payments'].first
|
840
|
+
|
841
|
+
expect(response.status).to eq 201
|
842
|
+
expect(payment['amount']).to eql "10.0"
|
843
|
+
expect(payment['source']['last_digits']).to eql "1111"
|
844
|
+
end
|
845
|
+
|
846
|
+
context "when payment_method is missing" do
|
847
|
+
it "returns an error" do
|
848
|
+
params[:payments][0].delete(:payment_method)
|
849
|
+
post spree.api_orders_path, params: { order: params }
|
850
|
+
expect(response.status).to eq 404
|
851
|
+
end
|
852
|
+
end
|
853
|
+
end
|
854
|
+
end
|
841
855
|
end
|
842
856
|
|
843
857
|
context "updating" do
|
@@ -851,7 +865,7 @@ module Spree
|
|
851
865
|
|
852
866
|
context "can cancel an order" do
|
853
867
|
before do
|
854
|
-
|
868
|
+
stub_spree_preferences(mails_from: "spree@example.com")
|
855
869
|
|
856
870
|
order.completed_at = Time.current
|
857
871
|
order.state = 'complete'
|
@@ -158,15 +158,13 @@ module Spree
|
|
158
158
|
end
|
159
159
|
|
160
160
|
context "tracking is disabled" do
|
161
|
-
before {
|
161
|
+
before { stub_spree_preferences(track_inventory_levels: false) }
|
162
162
|
|
163
163
|
it "still displays valid json with total_on_hand Float::INFINITY" do
|
164
164
|
get spree.api_product_path(product)
|
165
165
|
expect(response).to be_ok
|
166
166
|
expect(json_response[:total_on_hand]).to eq nil
|
167
167
|
end
|
168
|
-
|
169
|
-
after { Config.track_inventory_levels = true }
|
170
168
|
end
|
171
169
|
|
172
170
|
context "finds a product by slug first then by id" do
|
@@ -295,6 +293,23 @@ module Spree
|
|
295
293
|
expect(json_response['shipping_category_id']).to eq shipping_id
|
296
294
|
end
|
297
295
|
|
296
|
+
context "when tracking is disabled" do
|
297
|
+
before { stub_spree_preferences(track_inventory_levels: false) }
|
298
|
+
|
299
|
+
it "still displays valid json with total_on_hand Float::INFINITY" do
|
300
|
+
post spree.api_products_path, params: {
|
301
|
+
product: {
|
302
|
+
name: "The Other Product",
|
303
|
+
price: 19.99,
|
304
|
+
shipping_category_id: create(:shipping_category).id
|
305
|
+
}
|
306
|
+
}
|
307
|
+
|
308
|
+
expect(response.status).to eq(201)
|
309
|
+
expect(json_response['total_on_hand']).to eq nil
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
298
313
|
it "puts the created product in the given taxon" do
|
299
314
|
product_data[:taxon_ids] = taxon_1.id.to_s
|
300
315
|
post spree.api_products_path, params: { product: product_data }
|
@@ -17,13 +17,21 @@ module Spree
|
|
17
17
|
it "can create a new return authorization" do
|
18
18
|
stock_location = FactoryBot.create(:stock_location)
|
19
19
|
reason = FactoryBot.create(:return_reason)
|
20
|
+
reimbursement = FactoryBot.create(:reimbursement_type)
|
21
|
+
unit = FactoryBot.create(:inventory_unit)
|
20
22
|
rma_params = { stock_location_id: stock_location.id,
|
21
23
|
return_reason_id: reason.id,
|
24
|
+
return_items_attributes: [{
|
25
|
+
inventory_unit_id: unit.id,
|
26
|
+
preferred_reimbursement_type_id: reimbursement.id,
|
27
|
+
}],
|
22
28
|
memo: "Defective" }
|
23
29
|
post spree.api_order_return_authorizations_path(order), params: { order_id: order.number, return_authorization: rma_params }
|
24
30
|
expect(response.status).to eq(201)
|
25
31
|
expect(json_response).to have_attributes(attributes)
|
26
32
|
expect(json_response["state"]).not_to be_blank
|
33
|
+
return_authorization = Spree::ReturnAuthorization.last
|
34
|
+
expect(return_authorization.return_items.first.preferred_reimbursement_type).to eql reimbursement
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
@@ -170,7 +170,7 @@ module Spree
|
|
170
170
|
it "does not allow negative inventory for the stock item" do
|
171
171
|
subject
|
172
172
|
expect(response.status).to eq 422
|
173
|
-
expect(response.body).to match I18n.t('spree.stock_not_below_zero')
|
173
|
+
expect(response.body).to match I18n.t('spree.api.stock_not_below_zero')
|
174
174
|
expect(assigns(:stock_item).count_on_hand).to eq 0
|
175
175
|
end
|
176
176
|
end
|
@@ -236,7 +236,7 @@ module Spree
|
|
236
236
|
it "does not allow negative inventory for the stock item" do
|
237
237
|
subject
|
238
238
|
expect(response.status).to eq 422
|
239
|
-
expect(response.body).to match I18n.t('spree.stock_not_below_zero')
|
239
|
+
expect(response.body).to match I18n.t('spree.api.stock_not_below_zero')
|
240
240
|
expect(assigns(:stock_item).count_on_hand).to eq 10
|
241
241
|
end
|
242
242
|
end
|
@@ -294,7 +294,7 @@ module Spree
|
|
294
294
|
it "does not allow negative inventory for the stock item" do
|
295
295
|
subject
|
296
296
|
expect(response.status).to eq 422
|
297
|
-
expect(response.body).to match I18n.t('spree.stock_not_below_zero')
|
297
|
+
expect(response.body).to match I18n.t('spree.api.stock_not_below_zero')
|
298
298
|
expect(assigns(:stock_item).count_on_hand).to eq 10
|
299
299
|
end
|
300
300
|
end
|
@@ -248,6 +248,18 @@ module Spree
|
|
248
248
|
expect(json_response["variant_properties"].first).to have_attributes(expected_attrs)
|
249
249
|
end
|
250
250
|
end
|
251
|
+
|
252
|
+
context "when tracking is disabled" do
|
253
|
+
before do
|
254
|
+
stub_spree_preferences(track_inventory_levels: false)
|
255
|
+
subject
|
256
|
+
end
|
257
|
+
|
258
|
+
it "still displays valid json with total_on_hand Float::INFINITY" do
|
259
|
+
expect(response.status).to eq(200)
|
260
|
+
expect(json_response['total_on_hand']).to eq nil
|
261
|
+
end
|
262
|
+
end
|
251
263
|
end
|
252
264
|
|
253
265
|
it "can learn how to create a new variant" do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solidus_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0.rc.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solidus Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jbuilder
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
61
|
+
version: 2.9.0.rc.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.
|
68
|
+
version: 2.9.0.rc.1
|
69
69
|
description: REST API for the Solidus e-commerce framework.
|
70
70
|
email: contact@solidus.io
|
71
71
|
executables: []
|
@@ -159,7 +159,7 @@ files:
|
|
159
159
|
- app/views/spree/api/payments/show.json.jbuilder
|
160
160
|
- app/views/spree/api/payments/source_views/_check.json.jbuilder
|
161
161
|
- app/views/spree/api/payments/source_views/_gateway.json.jbuilder
|
162
|
-
- app/views/spree/api/payments/source_views/
|
162
|
+
- app/views/spree/api/payments/source_views/_store_credit.json.jbuilder
|
163
163
|
- app/views/spree/api/payments/update_forbidden.json.jbuilder
|
164
164
|
- app/views/spree/api/product_properties/index.json.jbuilder
|
165
165
|
- app/views/spree/api/product_properties/new.json.jbuilder
|
@@ -309,7 +309,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
309
309
|
- !ruby/object:Gem::Version
|
310
310
|
version: 1.8.23
|
311
311
|
requirements: []
|
312
|
-
|
312
|
+
rubyforge_project:
|
313
|
+
rubygems_version: 2.7.3
|
313
314
|
signing_key:
|
314
315
|
specification_version: 4
|
315
316
|
summary: REST API for the Solidus e-commerce framework.
|