solidus_api 2.1.1 → 2.2.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.
- checksums.yaml +4 -4
- data/app/controllers/spree/api/base_controller.rb +2 -2
- data/app/controllers/spree/api/countries_controller.rb +3 -3
- data/app/controllers/spree/api/images_controller.rb +1 -1
- data/app/controllers/spree/api/inventory_units_controller.rb +1 -1
- data/app/controllers/spree/api/orders_controller.rb +4 -14
- data/app/controllers/spree/api/payments_controller.rb +0 -1
- data/app/controllers/spree/api/products_controller.rb +1 -1
- data/app/controllers/spree/api/shipments_controller.rb +2 -2
- data/app/controllers/spree/api/states_controller.rb +2 -2
- data/app/controllers/spree/api/stock_items_controller.rb +3 -3
- data/app/controllers/spree/api/stock_locations_controller.rb +2 -2
- data/app/controllers/spree/api/stock_movements_controller.rb +1 -1
- data/app/controllers/spree/api/stores_controller.rb +3 -3
- data/app/controllers/spree/api/taxonomies_controller.rb +2 -2
- data/app/controllers/spree/api/transfer_items_controller.rb +3 -3
- data/app/controllers/spree/api/variants_controller.rb +1 -1
- data/app/controllers/spree/api/zones_controller.rb +2 -2
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +36 -17
- data/spec/controllers/spree/api/orders_controller_spec.rb +5 -52
- data/spec/controllers/spree/api/payments_controller_spec.rb +0 -11
- data/spec/requests/spree/api/shipments_controller_spec.rb +136 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b950a6d9f7c428116e5210e27a72d5fb07df830a
|
4
|
+
data.tar.gz: 2ce2d4e97ae5f016c16adc9769a70f1cd52e5317
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2685ca4dcbc794549d239d4c3129f76d9b1acf56903a5d4cf2ecab8d64e2778deac7dee07bbd923b42f405778db49c7164f4a32f22747100dddb6c6409e8ada6
|
7
|
+
data.tar.gz: 74a05940e48b28abd813beaa2fc56902b1f59657128dd312fe77016c22e2abf79887311dca22e7417d21b9064d039728dae9776254a96c8c4677bb62220335d9
|
@@ -116,13 +116,13 @@ module Spree
|
|
116
116
|
|
117
117
|
def product_scope
|
118
118
|
if can?(:admin, Spree::Product)
|
119
|
-
scope = Product.with_deleted.accessible_by(current_ability, :read).includes(*product_includes)
|
119
|
+
scope = Spree::Product.with_deleted.accessible_by(current_ability, :read).includes(*product_includes)
|
120
120
|
|
121
121
|
unless params[:show_deleted]
|
122
122
|
scope = scope.not_deleted
|
123
123
|
end
|
124
124
|
else
|
125
|
-
scope = Product.accessible_by(current_ability, :read).available.includes(*product_includes)
|
125
|
+
scope = Spree::Product.accessible_by(current_ability, :read).available.includes(*product_includes)
|
126
126
|
end
|
127
127
|
|
128
128
|
scope
|
@@ -4,13 +4,13 @@ module Spree
|
|
4
4
|
skip_before_action :authenticate_user
|
5
5
|
|
6
6
|
def index
|
7
|
-
@countries = Country.
|
7
|
+
@countries = Spree::Country.
|
8
8
|
accessible_by(current_ability, :read).
|
9
9
|
ransack(params[:q]).
|
10
10
|
result.
|
11
11
|
order('name ASC')
|
12
12
|
|
13
|
-
country = Country.order("updated_at ASC").last
|
13
|
+
country = Spree::Country.order("updated_at ASC").last
|
14
14
|
|
15
15
|
if stale?(country)
|
16
16
|
@countries = paginate(@countries)
|
@@ -19,7 +19,7 @@ module Spree
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def show
|
22
|
-
@country = Country.accessible_by(current_ability, :read).find(params[:id])
|
22
|
+
@country = Spree::Country.accessible_by(current_ability, :read).find(params[:id])
|
23
23
|
respond_with(@country)
|
24
24
|
end
|
25
25
|
end
|
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def inventory_unit
|
27
|
-
@inventory_unit ||= InventoryUnit.accessible_by(current_ability, :read).find(params[:id])
|
27
|
+
@inventory_unit ||= Spree::InventoryUnit.accessible_by(current_ability, :read).find(params[:id])
|
28
28
|
end
|
29
29
|
|
30
30
|
def prepare_event
|
@@ -13,7 +13,7 @@ module Spree
|
|
13
13
|
around_action :lock_order, except: [:create, :mine, :current, :index]
|
14
14
|
|
15
15
|
# Dynamically defines our stores checkout steps to ensure we check authorization on each step.
|
16
|
-
Order.checkout_steps.keys.each do |step|
|
16
|
+
Spree::Order.checkout_steps.keys.each do |step|
|
17
17
|
define_method step do
|
18
18
|
authorize! :update, @order, params[:token]
|
19
19
|
end
|
@@ -27,18 +27,8 @@ module Spree
|
|
27
27
|
|
28
28
|
def create
|
29
29
|
authorize! :create, Order
|
30
|
-
|
31
|
-
|
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
|
@@ -49,7 +39,7 @@ module Spree
|
|
49
39
|
|
50
40
|
def index
|
51
41
|
authorize! :index, Order
|
52
|
-
@orders = paginate(Order.ransack(params[:q]).result)
|
42
|
+
@orders = paginate(Spree::Order.ransack(params[:q]).result)
|
53
43
|
respond_with(@orders)
|
54
44
|
end
|
55
45
|
|
@@ -123,7 +123,7 @@ module Spree
|
|
123
123
|
|
124
124
|
def set_up_shipping_category
|
125
125
|
if shipping_category = params[:product].delete(:shipping_category)
|
126
|
-
id = ShippingCategory.find_or_create_by(name: shipping_category).id
|
126
|
+
id = Spree::ShippingCategory.find_or_create_by(name: shipping_category).id
|
127
127
|
params[:product][:shipping_category_id] = id
|
128
128
|
end
|
129
129
|
end
|
@@ -95,11 +95,11 @@ module Spree
|
|
95
95
|
private
|
96
96
|
|
97
97
|
def load_transfer_params
|
98
|
-
@original_shipment = Spree::Shipment.
|
98
|
+
@original_shipment = Spree::Shipment.find_by!(number: params[:original_shipment_number])
|
99
99
|
@order = @original_shipment.order
|
100
100
|
@variant = Spree::Variant.find(params[:variant_id])
|
101
101
|
@quantity = params[:quantity].to_i
|
102
|
-
authorize! :
|
102
|
+
authorize! [:update, :destroy], @original_shipment
|
103
103
|
authorize! :create, Shipment
|
104
104
|
end
|
105
105
|
|
@@ -23,10 +23,10 @@ module Spree
|
|
23
23
|
|
24
24
|
def scope
|
25
25
|
if params[:country_id]
|
26
|
-
@country = Country.accessible_by(current_ability, :read).find(params[:country_id])
|
26
|
+
@country = Spree::Country.accessible_by(current_ability, :read).find(params[:country_id])
|
27
27
|
return @country.states.accessible_by(current_ability, :read)
|
28
28
|
else
|
29
|
-
return State.accessible_by(current_ability, :read)
|
29
|
+
return Spree::State.accessible_by(current_ability, :read)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -28,7 +28,7 @@ module Spree
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def update
|
31
|
-
@stock_item = StockItem.accessible_by(current_ability, :update).find(params[:id])
|
31
|
+
@stock_item = Spree::StockItem.accessible_by(current_ability, :update).find(params[:id])
|
32
32
|
@stock_location = @stock_item.stock_location
|
33
33
|
|
34
34
|
adjustment = count_on_hand_adjustment
|
@@ -46,7 +46,7 @@ module Spree
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def destroy
|
49
|
-
@stock_item = StockItem.accessible_by(current_ability, :destroy).find(params[:id])
|
49
|
+
@stock_item = Spree::StockItem.accessible_by(current_ability, :destroy).find(params[:id])
|
50
50
|
@stock_item.destroy
|
51
51
|
respond_with(@stock_item, status: 204)
|
52
52
|
end
|
@@ -54,7 +54,7 @@ module Spree
|
|
54
54
|
private
|
55
55
|
|
56
56
|
def load_stock_location
|
57
|
-
@stock_location ||= StockLocation.accessible_by(current_ability).find(params.fetch(:stock_location_id))
|
57
|
+
@stock_location ||= Spree::StockLocation.accessible_by(current_ability).find(params.fetch(:stock_location_id))
|
58
58
|
end
|
59
59
|
|
60
60
|
def scope
|
@@ -21,7 +21,7 @@ module Spree
|
|
21
21
|
|
22
22
|
def create
|
23
23
|
authorize! :create, StockLocation
|
24
|
-
@stock_location = StockLocation.new(stock_location_params)
|
24
|
+
@stock_location = Spree::StockLocation.new(stock_location_params)
|
25
25
|
if @stock_location.save
|
26
26
|
respond_with(@stock_location, status: 201, default_template: :show)
|
27
27
|
else
|
@@ -47,7 +47,7 @@ module Spree
|
|
47
47
|
private
|
48
48
|
|
49
49
|
def stock_location
|
50
|
-
@stock_location ||= StockLocation.accessible_by(current_ability, :read).find(params[:id])
|
50
|
+
@stock_location ||= Spree::StockLocation.accessible_by(current_ability, :read).find(params[:id])
|
51
51
|
end
|
52
52
|
|
53
53
|
def stock_location_params
|
@@ -27,7 +27,7 @@ module Spree
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def stock_location
|
30
|
-
@stock_location ||= StockLocation.accessible_by(current_ability, :read).find(params[:stock_location_id])
|
30
|
+
@stock_location ||= Spree::StockLocation.accessible_by(current_ability, :read).find(params[:stock_location_id])
|
31
31
|
end
|
32
32
|
|
33
33
|
def scope
|
@@ -5,13 +5,13 @@ module Spree
|
|
5
5
|
|
6
6
|
def index
|
7
7
|
authorize! :read, Store
|
8
|
-
@stores = Store.accessible_by(current_ability, :read).all
|
8
|
+
@stores = Spree::Store.accessible_by(current_ability, :read).all
|
9
9
|
respond_with(@stores)
|
10
10
|
end
|
11
11
|
|
12
12
|
def create
|
13
13
|
authorize! :create, Store
|
14
|
-
@store = Store.new(store_params)
|
14
|
+
@store = Spree::Store.new(store_params)
|
15
15
|
@store.code = params[:store][:code]
|
16
16
|
if @store.save
|
17
17
|
respond_with(@store, status: 201, default_template: :show)
|
@@ -43,7 +43,7 @@ module Spree
|
|
43
43
|
private
|
44
44
|
|
45
45
|
def get_store
|
46
|
-
@store = Store.find(params[:id])
|
46
|
+
@store = Spree::Store.find(params[:id])
|
47
47
|
end
|
48
48
|
|
49
49
|
def store_params
|
@@ -20,7 +20,7 @@ module Spree
|
|
20
20
|
|
21
21
|
def create
|
22
22
|
authorize! :create, Taxonomy
|
23
|
-
@taxonomy = Taxonomy.new(taxonomy_params)
|
23
|
+
@taxonomy = Spree::Taxonomy.new(taxonomy_params)
|
24
24
|
if @taxonomy.save
|
25
25
|
respond_with(@taxonomy, status: 201, default_template: :show)
|
26
26
|
else
|
@@ -55,7 +55,7 @@ module Spree
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def taxonomy
|
58
|
-
@taxonomy ||= Taxonomy.accessible_by(current_ability, :read).find(params[:id])
|
58
|
+
@taxonomy ||= Spree::Taxonomy.accessible_by(current_ability, :read).find(params[:id])
|
59
59
|
end
|
60
60
|
|
61
61
|
def taxonomy_params
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
class TransferItemsController < Spree::Api::BaseController
|
4
4
|
def create
|
5
5
|
authorize! :create, TransferItem
|
6
|
-
stock_transfer = StockTransfer.accessible_by(current_ability, :update).find_by(number: params[:stock_transfer_id])
|
6
|
+
stock_transfer = Spree::StockTransfer.accessible_by(current_ability, :update).find_by(number: params[:stock_transfer_id])
|
7
7
|
@transfer_item = stock_transfer.transfer_items.build(transfer_item_params)
|
8
8
|
if @transfer_item.save
|
9
9
|
respond_with(@transfer_item, status: 201, default_template: :show)
|
@@ -14,7 +14,7 @@ module Spree
|
|
14
14
|
|
15
15
|
def update
|
16
16
|
authorize! :update, TransferItem
|
17
|
-
@transfer_item = TransferItem.accessible_by(current_ability, :update).find(params[:id])
|
17
|
+
@transfer_item = Spree::TransferItem.accessible_by(current_ability, :update).find(params[:id])
|
18
18
|
if @transfer_item.update_attributes(transfer_item_params)
|
19
19
|
respond_with(@transfer_item, status: 200, default_template: :show)
|
20
20
|
else
|
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
|
25
25
|
def destroy
|
26
26
|
authorize! :destroy, TransferItem
|
27
|
-
@transfer_item = TransferItem.accessible_by(current_ability, :destroy).find(params[:id])
|
27
|
+
@transfer_item = Spree::TransferItem.accessible_by(current_ability, :destroy).find(params[:id])
|
28
28
|
if @transfer_item.destroy
|
29
29
|
respond_with(@transfer_item, status: 200, default_template: :show)
|
30
30
|
else
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
class ZonesController < Spree::Api::BaseController
|
4
4
|
def create
|
5
5
|
authorize! :create, Zone
|
6
|
-
@zone = Zone.new(zone_params)
|
6
|
+
@zone = Spree::Zone.new(zone_params)
|
7
7
|
if @zone.save
|
8
8
|
respond_with(@zone, status: 201, default_template: :show)
|
9
9
|
else
|
@@ -18,7 +18,7 @@ module Spree
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def index
|
21
|
-
@zones = Zone.
|
21
|
+
@zones = Spree::Zone.
|
22
22
|
accessible_by(current_ability, :read).
|
23
23
|
order('name ASC').
|
24
24
|
ransack(params[:q]).
|
@@ -163,19 +163,6 @@ module Spree
|
|
163
163
|
expect(response.status).to eq(200)
|
164
164
|
end
|
165
165
|
|
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
166
|
it "returns errors when source is required and missing" do
|
180
167
|
order.update_column(:state, "payment")
|
181
168
|
api_put :update, id: order.to_param, order_token: order.guest_token,
|
@@ -281,7 +268,7 @@ module Spree
|
|
281
268
|
payments_attributes: [
|
282
269
|
{
|
283
270
|
source_attributes: {
|
284
|
-
|
271
|
+
wallet_payment_source_id: wallet_payment_source.id.to_param,
|
285
272
|
verification_value: '456'
|
286
273
|
}
|
287
274
|
}
|
@@ -290,7 +277,11 @@ module Spree
|
|
290
277
|
}
|
291
278
|
end
|
292
279
|
|
293
|
-
let!(:
|
280
|
+
let!(:wallet_payment_source) do
|
281
|
+
order.user.wallet.add(credit_card)
|
282
|
+
end
|
283
|
+
|
284
|
+
let(:credit_card) do
|
294
285
|
create(:credit_card, user_id: order.user_id, payment_method_id: @payment_method.id)
|
295
286
|
end
|
296
287
|
|
@@ -307,6 +298,34 @@ module Spree
|
|
307
298
|
expect(response.status).to eq 200
|
308
299
|
expect(order.credit_cards).to match_array [credit_card]
|
309
300
|
end
|
301
|
+
|
302
|
+
context 'with deprecated existing_card_id param' do
|
303
|
+
let(:params) do
|
304
|
+
{
|
305
|
+
id: order.to_param,
|
306
|
+
order_token: order.guest_token,
|
307
|
+
order: {
|
308
|
+
payments_attributes: [
|
309
|
+
{
|
310
|
+
source_attributes: {
|
311
|
+
existing_card_id: credit_card.id.to_param,
|
312
|
+
verification_value: '456'
|
313
|
+
}
|
314
|
+
}
|
315
|
+
]
|
316
|
+
}
|
317
|
+
}
|
318
|
+
end
|
319
|
+
|
320
|
+
it 'succeeds' do
|
321
|
+
Spree::Deprecation.silence do
|
322
|
+
api_put(:update, params)
|
323
|
+
end
|
324
|
+
|
325
|
+
expect(response.status).to eq 200
|
326
|
+
expect(order.credit_cards).to match_array [credit_card]
|
327
|
+
end
|
328
|
+
end
|
310
329
|
end
|
311
330
|
|
312
331
|
it "returns the order if the order is already complete" do
|
@@ -402,7 +421,7 @@ module Spree
|
|
402
421
|
end
|
403
422
|
|
404
423
|
it "returns a sensible error when no payment method is specified" do
|
405
|
-
# api_put :complete, :
|
424
|
+
# api_put :complete, id: order.to_param, order_token: order.token, order: {}
|
406
425
|
subject
|
407
426
|
expect(json_response["errors"]["base"]).to include(Spree.t(:no_payment_found))
|
408
427
|
end
|
@@ -411,7 +430,7 @@ module Spree
|
|
411
430
|
let(:params) { super().merge(expected_total: order.total + 1) }
|
412
431
|
|
413
432
|
it "returns an error if expected_total is present and does not match actual total" do
|
414
|
-
# api_put :complete, :
|
433
|
+
# api_put :complete, id: order.to_param, order_token: order.token, expected_total: order.total + 1
|
415
434
|
subject
|
416
435
|
expect(response.status).to eq(400)
|
417
436
|
expect(json_response['errors']['expected_total']).to include(Spree.t(:expected_total_mismatch, scope: 'api.order'))
|
@@ -32,9 +32,8 @@ module Spree
|
|
32
32
|
describe "POST create" do
|
33
33
|
let(:target_user) { create :user }
|
34
34
|
let(:date_override) { Time.parse('2015-01-01') }
|
35
|
-
let(:attributes) { { user_id: target_user.id, created_at: date_override, email: target_user.email } }
|
36
35
|
|
37
|
-
subject { api_post :create, order:
|
36
|
+
subject { api_post :create, order: { user_id: target_user.id, created_at: date_override, email: target_user.email } }
|
38
37
|
|
39
38
|
context "when the current user cannot administrate the order" do
|
40
39
|
stub_authorization! do |_|
|
@@ -43,37 +42,12 @@ module Spree
|
|
43
42
|
|
44
43
|
it "does not include unpermitted params, or allow overriding the user", focus: true do
|
45
44
|
subject
|
46
|
-
expect(response).to be_success
|
47
45
|
order = Spree::Order.last
|
48
46
|
expect(order.user).to eq current_api_user
|
49
47
|
expect(order.email).to eq target_user.email
|
50
48
|
end
|
51
49
|
|
52
50
|
it { is_expected.to be_success }
|
53
|
-
|
54
|
-
context 'creating payment' do
|
55
|
-
let(:attributes) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) }
|
56
|
-
|
57
|
-
context "with allowed payment method" do
|
58
|
-
let!(:payment_method) { create(:check_payment_method, name: "allowed" ) }
|
59
|
-
it { is_expected.to be_success }
|
60
|
-
it "creates a payment" do
|
61
|
-
expect {
|
62
|
-
subject
|
63
|
-
}.to change { Spree::Payment.count }.by(1)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
context "with disallowed payment method" do
|
68
|
-
let!(:payment_method) { create(:check_payment_method, name: "forbidden", available_to_users: false) }
|
69
|
-
it { is_expected.to be_not_found }
|
70
|
-
it "creates no payments" do
|
71
|
-
expect {
|
72
|
-
subject
|
73
|
-
}.not_to change { Spree::Payment.count }
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
51
|
end
|
78
52
|
|
79
53
|
context "when the current user can administrate the order" do
|
@@ -123,30 +97,6 @@ module Spree
|
|
123
97
|
subject
|
124
98
|
}.to_not change{ order.reload.number }
|
125
99
|
end
|
126
|
-
|
127
|
-
context 'creating payment' do
|
128
|
-
let(:order_params) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) }
|
129
|
-
|
130
|
-
context "with allowed payment method" do
|
131
|
-
let!(:payment_method) { create(:check_payment_method, name: "allowed" ) }
|
132
|
-
it { is_expected.to be_success }
|
133
|
-
it "creates a payment" do
|
134
|
-
expect {
|
135
|
-
subject
|
136
|
-
}.to change { Spree::Payment.count }.by(1)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context "with disallowed payment method" do
|
141
|
-
let!(:payment_method) { create(:check_payment_method, name: "forbidden", available_to_users: false) }
|
142
|
-
it { is_expected.to be_not_found }
|
143
|
-
it "creates no payments" do
|
144
|
-
expect {
|
145
|
-
subject
|
146
|
-
}.not_to change { Spree::Payment.count }
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
100
|
end
|
151
101
|
|
152
102
|
context "when the user can administer the order" do
|
@@ -383,7 +333,10 @@ module Spree
|
|
383
333
|
|
384
334
|
# Regression test for https://github.com/spree/spree/issues/3404
|
385
335
|
it "can specify additional parameters for a line item" do
|
386
|
-
|
336
|
+
expect(Order).to receive(:create!).and_return(order = Spree::Order.new)
|
337
|
+
allow(order).to receive(:associate_user!)
|
338
|
+
allow(order).to receive_message_chain(:contents, :add).and_return(line_item = double('LineItem'))
|
339
|
+
expect(line_item).to receive(:update_attributes!).with(hash_including("special" => "foo"))
|
387
340
|
|
388
341
|
allow(controller).to receive_messages(permitted_line_item_attributes: [:id, :variant_id, :quantity, :special])
|
389
342
|
api_post :create, order: {
|
@@ -45,17 +45,6 @@ module Spree
|
|
45
45
|
expect(response.status).to eq(201)
|
46
46
|
expect(json_response).to have_attributes(attributes)
|
47
47
|
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
48
|
end
|
60
49
|
|
61
50
|
context "payment source is required" do
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Spree::Api::ShipmentsController, type: :request do
|
4
|
+
let(:user) { create(:admin_user, spree_api_key: 'abc123') }
|
5
|
+
let(:stock_item) { create(:stock_item, backorderable: false) }
|
6
|
+
let(:variant) { stock_item.variant }
|
7
|
+
|
8
|
+
let(:order) do
|
9
|
+
create(
|
10
|
+
:completed_order_with_totals,
|
11
|
+
user: user,
|
12
|
+
line_items_attributes: [
|
13
|
+
{
|
14
|
+
variant: variant
|
15
|
+
}
|
16
|
+
]
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:shipment) { order.shipments.first }
|
21
|
+
|
22
|
+
describe "POST /api/shipments/transfer_to_location" do
|
23
|
+
let(:stock_location) { create(:stock_location) }
|
24
|
+
let(:source_shipment) { order.shipments.first }
|
25
|
+
let(:parsed_response) { JSON.parse(response.body) }
|
26
|
+
let(:stock_location_id) { stock_location.id }
|
27
|
+
|
28
|
+
subject do
|
29
|
+
post "/api/shipments/transfer_to_location.json",
|
30
|
+
params: {
|
31
|
+
original_shipment_number: source_shipment.number,
|
32
|
+
stock_location_id: stock_location_id,
|
33
|
+
quantity: 1,
|
34
|
+
variant_id: variant.id,
|
35
|
+
token: user.spree_api_key
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
context "for a successful transfer" do
|
40
|
+
before do
|
41
|
+
stock_location.restock(variant, 1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns the correct message" do
|
45
|
+
subject
|
46
|
+
expect(response).to be_success
|
47
|
+
expect(parsed_response["success"]).to be true
|
48
|
+
expect(parsed_response["message"]).to eq("Variants successfully transferred")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "if the source shipment can not be found" do
|
53
|
+
let(:stock_location_id) { 9999 }
|
54
|
+
|
55
|
+
it "returns a 404" do
|
56
|
+
subject
|
57
|
+
expect(response).to be_not_found
|
58
|
+
expect(parsed_response["error"]).to eq("The resource you were looking for could not be found.")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "if the user can not update shipments" do
|
63
|
+
let(:user) { create(:user, spree_api_key: 'abc123') }
|
64
|
+
|
65
|
+
custom_authorization! do |_|
|
66
|
+
can :read, Spree::Shipment
|
67
|
+
cannot :update, Spree::Shipment
|
68
|
+
can :create, Spree::Shipment
|
69
|
+
can :destroy, Spree::Shipment
|
70
|
+
end
|
71
|
+
|
72
|
+
it "is not authorized" do
|
73
|
+
subject
|
74
|
+
expect(response).to be_unauthorized
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "if the user can not destroy shipments" do
|
79
|
+
let(:user) { create(:user, spree_api_key: 'abc123') }
|
80
|
+
|
81
|
+
custom_authorization! do |_|
|
82
|
+
can :read, Spree::Shipment
|
83
|
+
can :update, Spree::Shipment
|
84
|
+
cannot :destroy, Spree::Shipment
|
85
|
+
can :create, Spree::Shipment
|
86
|
+
end
|
87
|
+
|
88
|
+
it "is not authorized" do
|
89
|
+
subject
|
90
|
+
expect(response).to be_unauthorized
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "POST /api/shipments/transfer_to_shipment" do
|
96
|
+
let(:stock_location) { create(:stock_location) }
|
97
|
+
let(:source_shipment) { order.shipments.first }
|
98
|
+
let(:target_shipment) { order.shipments.create(stock_location: stock_location) }
|
99
|
+
let(:parsed_response) { JSON.parse(response.body) }
|
100
|
+
let(:source_shipment_number) { source_shipment.number }
|
101
|
+
|
102
|
+
subject do
|
103
|
+
post "/api/shipments/transfer_to_shipment.json",
|
104
|
+
params: {
|
105
|
+
original_shipment_number: source_shipment_number,
|
106
|
+
target_shipment_number: target_shipment.number,
|
107
|
+
quantity: 1,
|
108
|
+
variant_id: variant.id,
|
109
|
+
token: user.spree_api_key
|
110
|
+
}
|
111
|
+
end
|
112
|
+
|
113
|
+
context "for a successful transfer" do
|
114
|
+
before do
|
115
|
+
stock_location.restock(variant, 1)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "returns the correct message" do
|
119
|
+
subject
|
120
|
+
expect(response).to be_success
|
121
|
+
expect(parsed_response["success"]).to be true
|
122
|
+
expect(parsed_response["message"]).to eq("Variants successfully transferred")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "if the source shipment can not be found" do
|
127
|
+
let(:source_shipment_number) { 9999 }
|
128
|
+
|
129
|
+
it "returns a 404" do
|
130
|
+
subject
|
131
|
+
expect(response).to be_not_found
|
132
|
+
expect(parsed_response["error"]).to eq("The resource you were looking for could not be found.")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
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.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solidus Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: solidus_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.
|
19
|
+
version: 2.2.0.beta1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.
|
26
|
+
version: 2.2.0.beta1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rabl
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,6 +252,7 @@ files:
|
|
252
252
|
- spec/requests/api/address_books_spec.rb
|
253
253
|
- spec/requests/rabl_cache_spec.rb
|
254
254
|
- spec/requests/ransackable_attributes_spec.rb
|
255
|
+
- spec/requests/spree/api/shipments_controller_spec.rb
|
255
256
|
- spec/shared_examples/protect_product_actions.rb
|
256
257
|
- spec/spec_helper.rb
|
257
258
|
- spec/support/controller_hacks.rb
|
@@ -280,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
281
|
version: 1.8.23
|
281
282
|
requirements: []
|
282
283
|
rubyforge_project:
|
283
|
-
rubygems_version: 2.6.
|
284
|
+
rubygems_version: 2.6.10
|
284
285
|
signing_key:
|
285
286
|
specification_version: 4
|
286
287
|
summary: REST API for the Solidus e-commerce framework.
|
@@ -327,6 +328,7 @@ test_files:
|
|
327
328
|
- spec/requests/api/address_books_spec.rb
|
328
329
|
- spec/requests/rabl_cache_spec.rb
|
329
330
|
- spec/requests/ransackable_attributes_spec.rb
|
331
|
+
- spec/requests/spree/api/shipments_controller_spec.rb
|
330
332
|
- spec/shared_examples/protect_product_actions.rb
|
331
333
|
- spec/spec_helper.rb
|
332
334
|
- spec/support/controller_hacks.rb
|