spree_api 2.4.0.rc2 → 2.4.0.rc3
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.
- checksums.yaml +4 -4
- data/app/controllers/spree/api/base_controller.rb +4 -6
- data/app/controllers/spree/api/option_types_controller.rb +2 -2
- data/app/controllers/spree/api/orders_controller.rb +9 -1
- data/app/controllers/spree/api/return_authorizations_controller.rb +0 -9
- data/app/controllers/spree/api/taxons_controller.rb +3 -3
- data/app/helpers/spree/api/api_helpers.rb +0 -2
- data/app/views/spree/api/orders/show.v1.rabl +4 -0
- data/app/views/spree/api/products/show.v1.rabl +4 -0
- data/app/views/spree/api/shipments/small.v1.rabl +4 -0
- data/lib/spree/api/testing_support/helpers.rb +6 -6
- data/lib/spree/api/testing_support/setup.rb +2 -2
- data/spec/controllers/spree/api/addresses_controller_spec.rb +8 -8
- data/spec/controllers/spree/api/base_controller_spec.rb +22 -22
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +53 -53
- data/spec/controllers/spree/api/classifications_controller_spec.rb +5 -5
- data/spec/controllers/spree/api/config_controller_spec.rb +9 -9
- data/spec/controllers/spree/api/countries_controller_spec.rb +11 -11
- data/spec/controllers/spree/api/credit_cards_controller_spec.rb +16 -16
- data/spec/controllers/spree/api/images_controller_spec.rb +21 -21
- data/spec/controllers/spree/api/inventory_units_controller_spec.rb +6 -6
- data/spec/controllers/spree/api/line_items_controller_spec.rb +33 -33
- data/spec/controllers/spree/api/option_types_controller_spec.rb +19 -19
- data/spec/controllers/spree/api/option_values_controller_spec.rb +23 -23
- data/spec/controllers/spree/api/orders_controller_spec.rb +186 -143
- data/spec/controllers/spree/api/payments_controller_spec.rb +39 -39
- data/spec/controllers/spree/api/product_properties_controller_spec.rb +21 -21
- data/spec/controllers/spree/api/products_controller_spec.rb +71 -66
- data/spec/controllers/spree/api/promotion_application_spec.rb +13 -13
- data/spec/controllers/spree/api/promotions_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/properties_controller_spec.rb +25 -25
- data/spec/controllers/spree/api/return_authorizations_controller_spec.rb +27 -36
- data/spec/controllers/spree/api/shipments_controller_spec.rb +22 -22
- data/spec/controllers/spree/api/states_controller_spec.rb +18 -18
- data/spec/controllers/spree/api/stock_items_controller_spec.rb +26 -26
- data/spec/controllers/spree/api/stock_locations_controller_spec.rb +22 -22
- data/spec/controllers/spree/api/stock_movements_controller_spec.rb +16 -16
- data/spec/controllers/spree/api/taxonomies_controller_spec.rb +24 -24
- data/spec/controllers/spree/api/taxons_controller_spec.rb +39 -39
- data/spec/controllers/spree/api/unauthenticated_products_controller_spec.rb +6 -6
- data/spec/controllers/spree/api/users_controller_spec.rb +25 -25
- data/spec/controllers/spree/api/variants_controller_spec.rb +36 -36
- data/spec/controllers/spree/api/zones_controller_spec.rb +20 -20
- data/spec/models/spree/legacy_user_spec.rb +5 -5
- data/spec/requests/rabl_cache_spec.rb +9 -9
- data/spec/spec_helper.rb +0 -1
- data/spec/support/controller_hacks.rb +4 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b712d43706678d3c8d2bdc20f8d43fff8c97bd2e
|
4
|
+
data.tar.gz: cd84829e4d96b32d0da411588a7531b6855668a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba4fb81a81896f4851cc69fd23a3816b77ef4b8ec7f484cb08dcfbc78a39a9ce136d3b64bcce8610a97b34a497e259b8a2e8724af4fad664d73bbf426acb1218
|
7
|
+
data.tar.gz: 8be64b301511026a1b6c22f938a1dc7d42b8ea651c65c70ba180a07437ae7be511decfdac3c5327d1480b0e8fe14bb2e081162fc59e10d027c79defd19bc432c
|
@@ -142,11 +142,9 @@ module Spree
|
|
142
142
|
end
|
143
143
|
|
144
144
|
def find_product(id)
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
product_scope.find(id)
|
149
|
-
end
|
145
|
+
product_scope.friendly.find(id.to_s)
|
146
|
+
rescue ActiveRecord::RecordNotFound
|
147
|
+
product_scope.find(id)
|
150
148
|
end
|
151
149
|
|
152
150
|
def product_scope
|
@@ -168,7 +166,7 @@ module Spree
|
|
168
166
|
end
|
169
167
|
|
170
168
|
def product_includes
|
171
|
-
[ :option_types, variants: variants_associations, master: variants_associations ]
|
169
|
+
[ :option_types, :taxons, product_properties: :property, variants: variants_associations, master: variants_associations ]
|
172
170
|
end
|
173
171
|
|
174
172
|
def order_id
|
@@ -3,9 +3,9 @@ module Spree
|
|
3
3
|
class OptionTypesController < Spree::Api::BaseController
|
4
4
|
def index
|
5
5
|
if params[:ids]
|
6
|
-
@option_types = Spree::OptionType.accessible_by(current_ability, :read).where(:
|
6
|
+
@option_types = Spree::OptionType.includes(:option_values).accessible_by(current_ability, :read).where(id: params[:ids].split(','))
|
7
7
|
else
|
8
|
-
@option_types = Spree::OptionType.accessible_by(current_ability, :read).load.ransack(params[:q]).result
|
8
|
+
@option_types = Spree::OptionType.includes(:option_values).accessible_by(current_ability, :read).load.ransack(params[:q]).result
|
9
9
|
end
|
10
10
|
respond_with(@option_types)
|
11
11
|
end
|
@@ -59,7 +59,15 @@ module Spree
|
|
59
59
|
find_order(true)
|
60
60
|
authorize! :update, @order, order_token
|
61
61
|
|
62
|
-
if
|
62
|
+
result = if request.patch?
|
63
|
+
# This will update the order without a checkout reset.
|
64
|
+
@order.update_attributes(order_params)
|
65
|
+
else
|
66
|
+
# This will reset checkout back to address and delete all shipments.
|
67
|
+
@order.contents.update_cart(order_params)
|
68
|
+
end
|
69
|
+
|
70
|
+
if result
|
63
71
|
user_id = params[:order][:user_id]
|
64
72
|
if current_api_user.has_spree_role?('admin') && user_id
|
65
73
|
@order.associate_user!(Spree.user_class.find(user_id))
|
@@ -45,15 +45,6 @@ module Spree
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
def receive
|
49
|
-
@return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
|
50
|
-
if @return_authorization.receive
|
51
|
-
respond_with @return_authorization, default_template: :show
|
52
|
-
else
|
53
|
-
invalid_resource!(@return_authorization)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
48
|
def cancel
|
58
49
|
@return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
|
59
50
|
if @return_authorization.cancel
|
@@ -6,9 +6,9 @@ module Spree
|
|
6
6
|
@taxons = taxonomy.root.children
|
7
7
|
else
|
8
8
|
if params[:ids]
|
9
|
-
@taxons = Spree::Taxon.accessible_by(current_ability, :read).where(id: params[:ids].split(','))
|
9
|
+
@taxons = Spree::Taxon.includes(:children).accessible_by(current_ability, :read).where(id: params[:ids].split(','))
|
10
10
|
else
|
11
|
-
@taxons = Spree::Taxon.accessible_by(current_ability, :read).order(:taxonomy_id, :lft).ransack(params[:q]).result
|
11
|
+
@taxons = Spree::Taxon.includes(:children).accessible_by(current_ability, :read).order(:taxonomy_id, :lft).ransack(params[:q]).result
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -65,7 +65,7 @@ module Spree
|
|
65
65
|
# Products#index does not do the sorting.
|
66
66
|
taxon = Spree::Taxon.find(params[:id])
|
67
67
|
@products = taxon.products.ransack(params[:q]).result
|
68
|
-
@products = @products.page(params[:page]).per(
|
68
|
+
@products = @products.page(params[:page]).per(params[:per_page] || 500)
|
69
69
|
render "spree/api/products/index"
|
70
70
|
end
|
71
71
|
|
@@ -12,23 +12,23 @@ module Spree
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def assert_not_found!
|
15
|
-
json_response.
|
16
|
-
response.status.
|
15
|
+
expect(json_response).to eq({ "error" => "The resource you were looking for could not be found." })
|
16
|
+
expect(response.status).to eq 404
|
17
17
|
end
|
18
18
|
|
19
19
|
def assert_unauthorized!
|
20
|
-
json_response.
|
21
|
-
response.status.
|
20
|
+
expect(json_response).to eq({ "error" => "You are not authorized to perform that action." })
|
21
|
+
expect(response.status).to eq 401
|
22
22
|
end
|
23
23
|
|
24
24
|
def stub_authentication!
|
25
|
-
Spree::LegacyUser.
|
25
|
+
allow(Spree::LegacyUser).to receive(:find_by).with(hash_including(:spree_api_key)) { current_api_user }
|
26
26
|
end
|
27
27
|
|
28
28
|
# This method can be overriden (with a let block) inside a context
|
29
29
|
# For instance, if you wanted to have an admin user instead.
|
30
30
|
def current_api_user
|
31
|
-
@current_api_user ||= stub_model(Spree::LegacyUser, :
|
31
|
+
@current_api_user ||= stub_model(Spree::LegacyUser, email: "spree@example.com")
|
32
32
|
end
|
33
33
|
|
34
34
|
def image(filename)
|
@@ -5,8 +5,8 @@ module Spree
|
|
5
5
|
def sign_in_as_admin!
|
6
6
|
let!(:current_api_user) do
|
7
7
|
user = stub_model(Spree::LegacyUser)
|
8
|
-
user.
|
9
|
-
user.
|
8
|
+
allow(user).to receive_message_chain(:spree_roles, :pluck).and_return(["admin"])
|
9
|
+
allow(user).to receive(:has_spree_role?).with("admin").and_return(true)
|
10
10
|
user
|
11
11
|
end
|
12
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Spree
|
4
|
-
describe Api::AddressesController do
|
4
|
+
describe Api::AddressesController, :type => :controller do
|
5
5
|
render_views
|
6
6
|
|
7
7
|
before do
|
@@ -12,27 +12,27 @@ module Spree
|
|
12
12
|
|
13
13
|
context "with their own address" do
|
14
14
|
before do
|
15
|
-
Order.
|
15
|
+
allow_any_instance_of(Order).to receive_messages :user => current_api_user
|
16
16
|
end
|
17
17
|
|
18
18
|
it "gets an address" do
|
19
19
|
api_get :show, :id => @address.id, :order_id => @order.number
|
20
|
-
json_response['address1'].
|
20
|
+
expect(json_response['address1']).to eq @address.address1
|
21
21
|
end
|
22
22
|
|
23
23
|
it "updates an address" do
|
24
24
|
api_put :update, :id => @address.id, :order_id => @order.number,
|
25
25
|
:address => { :address1 => "123 Test Lane" }
|
26
|
-
json_response['address1'].
|
26
|
+
expect(json_response['address1']).to eq '123 Test Lane'
|
27
27
|
end
|
28
28
|
|
29
29
|
it "receives the errors object if address is invalid" do
|
30
30
|
api_put :update, :id => @address.id, :order_id => @order.number,
|
31
31
|
:address => { :address1 => "" }
|
32
32
|
|
33
|
-
json_response['error'].
|
34
|
-
json_response['errors'].
|
35
|
-
json_response['errors']['address1'].first.
|
33
|
+
expect(json_response['error']).not_to be_nil
|
34
|
+
expect(json_response['errors']).not_to be_nil
|
35
|
+
expect(json_response['errors']['address1'].first).to eq "can't be blank"
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -42,7 +42,7 @@ module Spree
|
|
42
42
|
@order.ship_address = nil
|
43
43
|
end
|
44
44
|
|
45
|
-
it "cannot
|
45
|
+
it "cannot retrieve address information" do
|
46
46
|
api_get :show, :id => @address.id, :order_id => @order.number
|
47
47
|
assert_unauthorized!
|
48
48
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
class FakesController < Spree::Api::BaseController
|
4
4
|
end
|
5
5
|
|
6
|
-
describe Spree::Api::BaseController do
|
6
|
+
describe Spree::Api::BaseController, :type => :controller do
|
7
7
|
render_views
|
8
8
|
controller(Spree::Api::BaseController) do
|
9
9
|
def index
|
@@ -14,14 +14,14 @@ describe Spree::Api::BaseController do
|
|
14
14
|
context "signed in as a user using an authentication extension" do
|
15
15
|
before do
|
16
16
|
user = double(:email => "spree@example.com")
|
17
|
-
user.
|
18
|
-
controller.
|
17
|
+
allow(user).to receive_message_chain :spree_roles, pluck: []
|
18
|
+
allow(controller).to receive_messages :try_spree_current_user => user
|
19
19
|
end
|
20
20
|
|
21
21
|
it "can make a request" do
|
22
22
|
api_get :index
|
23
|
-
json_response.
|
24
|
-
response.status.
|
23
|
+
expect(json_response).to eq({ "products" => [] })
|
24
|
+
expect(response.status).to eq(200)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -31,19 +31,19 @@ describe Spree::Api::BaseController do
|
|
31
31
|
context "with a correct order token" do
|
32
32
|
it "succeeds" do
|
33
33
|
api_get :index, order_token: order.guest_token, order_id: order.number
|
34
|
-
response.status.
|
34
|
+
expect(response.status).to eq(200)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "succeeds with an order_number parameter" do
|
38
38
|
api_get :index, order_token: order.guest_token, order_number: order.number
|
39
|
-
response.status.
|
39
|
+
expect(response.status).to eq(200)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
context "with an incorrect order token" do
|
44
44
|
it "returns unauthorized" do
|
45
45
|
api_get :index, order_token: "NOT_A_TOKEN", order_id: order.number
|
46
|
-
response.status.
|
46
|
+
expect(response.status).to eq(401)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -51,29 +51,29 @@ describe Spree::Api::BaseController do
|
|
51
51
|
context "cannot make a request to the API" do
|
52
52
|
it "without an API key" do
|
53
53
|
api_get :index
|
54
|
-
json_response.
|
55
|
-
response.status.
|
54
|
+
expect(json_response).to eq({ "error" => "You must specify an API key." })
|
55
|
+
expect(response.status).to eq(401)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "with an invalid API key" do
|
59
59
|
request.headers["X-Spree-Token"] = "fake_key"
|
60
60
|
get :index, {}
|
61
|
-
json_response.
|
62
|
-
response.status.
|
61
|
+
expect(json_response).to eq({ "error" => "Invalid API key (fake_key) specified." })
|
62
|
+
expect(response.status).to eq(401)
|
63
63
|
end
|
64
64
|
|
65
65
|
it "using an invalid token param" do
|
66
66
|
get :index, :token => "fake_key"
|
67
|
-
json_response.
|
67
|
+
expect(json_response).to eq({ "error" => "Invalid API key (fake_key) specified." })
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'handles exceptions' do
|
72
|
-
subject.
|
73
|
-
subject.
|
74
|
-
subject.
|
72
|
+
expect(subject).to receive(:authenticate_user).and_return(true)
|
73
|
+
expect(subject).to receive(:load_user_roles).and_return(true)
|
74
|
+
expect(subject).to receive(:index).and_raise(Exception.new("no joy"))
|
75
75
|
get :index, :token => "fake_key"
|
76
|
-
json_response.
|
76
|
+
expect(json_response).to eq({ "exception" => "no joy" })
|
77
77
|
end
|
78
78
|
|
79
79
|
it "maps semantic keys to nested_attributes keys" do
|
@@ -84,12 +84,12 @@ describe Spree::Api::BaseController do
|
|
84
84
|
'name' => 'test order' }
|
85
85
|
|
86
86
|
mapped = subject.map_nested_attributes_keys(klass, attributes)
|
87
|
-
mapped.has_key?('line_items_attributes').
|
88
|
-
mapped.has_key?('name').
|
87
|
+
expect(mapped.has_key?('line_items_attributes')).to be true
|
88
|
+
expect(mapped.has_key?('name')).to be true
|
89
89
|
end
|
90
90
|
|
91
91
|
it "lets a subclass override the product associations that are eager-loaded" do
|
92
|
-
controller.respond_to?(:product_includes, true).
|
92
|
+
expect(controller.respond_to?(:product_includes, true)).to be
|
93
93
|
end
|
94
94
|
|
95
95
|
describe '#error_during_processing' do
|
@@ -116,8 +116,8 @@ describe Spree::Api::BaseController do
|
|
116
116
|
|
117
117
|
before do
|
118
118
|
user = double(email: "spree@example.com")
|
119
|
-
user.
|
120
|
-
controller.
|
119
|
+
allow(user).to receive_message_chain :spree_roles, pluck: []
|
120
|
+
allow(controller).to receive_messages try_spree_current_user: user
|
121
121
|
routes.draw { get 'foo' => 'fakes#foo' }
|
122
122
|
end
|
123
123
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Spree
|
4
|
-
describe Api::CheckoutsController do
|
4
|
+
describe Api::CheckoutsController, :type => :controller do
|
5
5
|
render_views
|
6
6
|
|
7
7
|
before(:each) do
|
@@ -31,39 +31,39 @@ module Spree
|
|
31
31
|
end
|
32
32
|
|
33
33
|
before(:each) do
|
34
|
-
Order.
|
35
|
-
Order.
|
34
|
+
allow_any_instance_of(Order).to receive_messages(:confirmation_required? => true)
|
35
|
+
allow_any_instance_of(Order).to receive_messages(:payment_required? => true)
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should transition a recently created order from cart to address" do
|
39
|
-
order.state.
|
40
|
-
order.email.
|
39
|
+
expect(order.state).to eq "cart"
|
40
|
+
expect(order.email).not_to be_nil
|
41
41
|
api_put :update, :id => order.to_param, :order_token => order.guest_token
|
42
|
-
order.reload.state.
|
42
|
+
expect(order.reload.state).to eq "address"
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should transition a recently created order from cart to address with order token in header" do
|
46
|
-
order.state.
|
47
|
-
order.email.
|
46
|
+
expect(order.state).to eq "cart"
|
47
|
+
expect(order.email).not_to be_nil
|
48
48
|
request.headers["X-Spree-Order-Token"] = order.guest_token
|
49
49
|
api_put :update, :id => order.to_param
|
50
|
-
order.reload.state.
|
50
|
+
expect(order.reload.state).to eq "address"
|
51
51
|
end
|
52
52
|
|
53
53
|
it "can take line_items_attributes as a parameter" do
|
54
54
|
line_item = order.line_items.first
|
55
55
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
56
56
|
:order => { :line_items_attributes => { 0 => { :id => line_item.id, :quantity => 1 } } }
|
57
|
-
response.status.
|
58
|
-
order.reload.state.
|
57
|
+
expect(response.status).to eq(200)
|
58
|
+
expect(order.reload.state).to eq "address"
|
59
59
|
end
|
60
60
|
|
61
61
|
it "can take line_items as a parameter" do
|
62
62
|
line_item = order.line_items.first
|
63
63
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
64
64
|
:order => { :line_items => { 0 => { :id => line_item.id, :quantity => 1 } } }
|
65
|
-
response.status.
|
66
|
-
order.reload.state.
|
65
|
+
expect(response.status).to eq(200)
|
66
|
+
expect(order.reload.state).to eq "address"
|
67
67
|
end
|
68
68
|
|
69
69
|
it "will return an error if the order cannot transition" do
|
@@ -73,7 +73,7 @@ module Spree
|
|
73
73
|
order.update_column(:state, "address")
|
74
74
|
api_put :update, :id => order.to_param, :order_token => order.guest_token
|
75
75
|
# Order has not transitioned
|
76
|
-
response.status.
|
76
|
+
expect(response.status).to eq(422)
|
77
77
|
end
|
78
78
|
|
79
79
|
context "transitioning to delivery" do
|
@@ -101,10 +101,10 @@ module Spree
|
|
101
101
|
:bill_address_attributes => address,
|
102
102
|
:ship_address_attributes => address
|
103
103
|
}
|
104
|
-
json_response['state'].
|
105
|
-
json_response['bill_address']['firstname'].
|
106
|
-
json_response['ship_address']['firstname'].
|
107
|
-
response.status.
|
104
|
+
expect(json_response['state']).to eq('delivery')
|
105
|
+
expect(json_response['bill_address']['firstname']).to eq('John')
|
106
|
+
expect(json_response['ship_address']['firstname']).to eq('John')
|
107
|
+
expect(response.status).to eq(200)
|
108
108
|
end
|
109
109
|
|
110
110
|
# Regression test for #4498
|
@@ -129,25 +129,25 @@ module Spree
|
|
129
129
|
shipping_rate = shipment.shipping_rates.where(:selected => false).first
|
130
130
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
131
131
|
:order => { :shipments_attributes => { "0" => { :selected_shipping_rate_id => shipping_rate.id, :id => shipment.id } } }
|
132
|
-
response.status.
|
132
|
+
expect(response.status).to eq(200)
|
133
133
|
# Find the correct shipment...
|
134
134
|
json_shipment = json_response['shipments'].detect { |s| s["id"] == shipment.id }
|
135
135
|
# Find the correct shipping rate for that shipment...
|
136
136
|
json_shipping_rate = json_shipment['shipping_rates'].detect { |sr| sr["id"] == shipping_rate.id }
|
137
137
|
# ... And finally ensure that it's selected
|
138
|
-
json_shipping_rate['selected'].
|
138
|
+
expect(json_shipping_rate['selected']).to be true
|
139
139
|
# Order should automatically transfer to payment because all criteria are met
|
140
|
-
json_response['state'].
|
140
|
+
expect(json_response['state']).to eq('payment')
|
141
141
|
end
|
142
142
|
|
143
143
|
it "can update payment method and transition from payment to confirm" do
|
144
144
|
order.update_column(:state, "payment")
|
145
145
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
146
146
|
:order => { :payments_attributes => [{ :payment_method_id => @payment_method.id }] }
|
147
|
-
json_response['state'].
|
148
|
-
json_response['payments'][0]['payment_method']['name'].
|
149
|
-
json_response['payments'][0]['amount'].
|
150
|
-
response.status.
|
147
|
+
expect(json_response['state']).to eq('confirm')
|
148
|
+
expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
|
149
|
+
expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
|
150
|
+
expect(response.status).to eq(200)
|
151
151
|
end
|
152
152
|
|
153
153
|
it "can update payment method with source and transition from payment to confirm" do
|
@@ -163,9 +163,9 @@ module Spree
|
|
163
163
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
164
164
|
:order => { :payments_attributes => [{ :payment_method_id => @payment_method.id.to_s }],
|
165
165
|
:payment_source => { @payment_method.id.to_s => source_attributes } }
|
166
|
-
json_response['payments'][0]['payment_method']['name'].
|
167
|
-
json_response['payments'][0]['amount'].
|
168
|
-
response.status.
|
166
|
+
expect(json_response['payments'][0]['payment_method']['name']).to eq(@payment_method.name)
|
167
|
+
expect(json_response['payments'][0]['amount']).to eq(order.total.to_s)
|
168
|
+
expect(response.status).to eq(200)
|
169
169
|
end
|
170
170
|
|
171
171
|
it "returns errors when source is missing attributes" do
|
@@ -178,12 +178,12 @@ module Spree
|
|
178
178
|
@payment_method.id.to_s => { name: "Spree" }
|
179
179
|
}
|
180
180
|
|
181
|
-
response.status.
|
181
|
+
expect(response.status).to eq(422)
|
182
182
|
cc_errors = json_response['errors']['payments.Credit Card']
|
183
|
-
cc_errors.
|
184
|
-
cc_errors.
|
185
|
-
cc_errors.
|
186
|
-
cc_errors.
|
183
|
+
expect(cc_errors).to include("Number can't be blank")
|
184
|
+
expect(cc_errors).to include("Month is not a number")
|
185
|
+
expect(cc_errors).to include("Year is not a number")
|
186
|
+
expect(cc_errors).to include("Verification Value can't be blank")
|
187
187
|
end
|
188
188
|
|
189
189
|
it "allow users to reuse a credit card" do
|
@@ -199,17 +199,17 @@ module Spree
|
|
199
199
|
|
200
200
|
it "can transition from confirm to complete" do
|
201
201
|
order.update_column(:state, "confirm")
|
202
|
-
Spree::Order.
|
202
|
+
allow_any_instance_of(Spree::Order).to receive_messages(:payment_required? => false)
|
203
203
|
api_put :update, :id => order.to_param, :order_token => order.guest_token
|
204
|
-
json_response['state'].
|
205
|
-
response.status.
|
204
|
+
expect(json_response['state']).to eq('complete')
|
205
|
+
expect(response.status).to eq(200)
|
206
206
|
end
|
207
207
|
|
208
208
|
it "returns the order if the order is already complete" do
|
209
209
|
order.update_column(:state, "complete")
|
210
210
|
api_put :update, :id => order.to_param, :order_token => order.guest_token
|
211
|
-
json_response['number'].
|
212
|
-
response.status.
|
211
|
+
expect(json_response['number']).to eq(order.number)
|
212
|
+
expect(response.status).to eq(200)
|
213
213
|
end
|
214
214
|
|
215
215
|
# Regression test for #3784
|
@@ -227,24 +227,24 @@ module Spree
|
|
227
227
|
# Need to pass email as well so that validations succeed
|
228
228
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
229
229
|
:order => { :user_id => user.id, :email => "guest@spreecommerce.com" }
|
230
|
-
response.status.
|
231
|
-
json_response['user_id'].
|
230
|
+
expect(response.status).to eq(200)
|
231
|
+
expect(json_response['user_id']).to eq(user.id)
|
232
232
|
end
|
233
233
|
end
|
234
234
|
|
235
235
|
it "can assign an email to the order" do
|
236
236
|
api_put :update, :id => order.to_param, :order_token => order.guest_token,
|
237
237
|
:order => { :email => "guest@spreecommerce.com" }
|
238
|
-
json_response['email'].
|
239
|
-
response.status.
|
238
|
+
expect(json_response['email']).to eq("guest@spreecommerce.com")
|
239
|
+
expect(response.status).to eq(200)
|
240
240
|
end
|
241
241
|
|
242
242
|
it "can apply a coupon code to an order" do
|
243
243
|
skip "ensure that the order totals are properly updated, see frontend orders_controller or checkout_controller as example"
|
244
244
|
|
245
245
|
order.update_column(:state, "payment")
|
246
|
-
PromotionHandler::Coupon.
|
247
|
-
PromotionHandler::Coupon.
|
246
|
+
expect(PromotionHandler::Coupon).to receive(:new).with(order).and_call_original
|
247
|
+
expect_any_instance_of(PromotionHandler::Coupon).to receive(:apply).and_return({:coupon_applied? => true})
|
248
248
|
api_put :update, :id => order.to_param, :order_token => order.guest_token, :order => { :coupon_code => "foobar" }
|
249
249
|
end
|
250
250
|
end
|
@@ -255,16 +255,16 @@ module Spree
|
|
255
255
|
order.line_items.delete_all
|
256
256
|
order.update_column(:email, "spree@example.com")
|
257
257
|
api_put :next, :id => order.to_param, :order_token => order.guest_token
|
258
|
-
response.status.
|
259
|
-
json_response["errors"]["base"].
|
258
|
+
expect(response.status).to eq(422)
|
259
|
+
expect(json_response["errors"]["base"]).to include(Spree.t(:there_are_no_items_for_this_order))
|
260
260
|
end
|
261
261
|
|
262
262
|
it "can transition an order to the next state" do
|
263
263
|
order.update_column(:email, "spree@example.com")
|
264
264
|
|
265
265
|
api_put :next, :id => order.to_param, :order_token => order.guest_token
|
266
|
-
response.status.
|
267
|
-
json_response['state'].
|
266
|
+
expect(response.status).to eq(200)
|
267
|
+
expect(json_response['state']).to eq('address')
|
268
268
|
end
|
269
269
|
|
270
270
|
it "cannot transition if order email is blank" do
|
@@ -274,14 +274,14 @@ module Spree
|
|
274
274
|
)
|
275
275
|
|
276
276
|
api_put :next, :id => order.to_param, :order_token => order.guest_token
|
277
|
-
response.status.
|
278
|
-
json_response['error'].
|
277
|
+
expect(response.status).to eq(422)
|
278
|
+
expect(json_response['error']).to match(/could not be transitioned/)
|
279
279
|
end
|
280
280
|
|
281
281
|
it "doesnt advance payment state if order has no payment" do
|
282
282
|
order.update_column(:state, "payment")
|
283
283
|
api_put :next, :id => order.to_param, :order_token => order.guest_token, :order => {}
|
284
|
-
json_response["errors"]["base"].
|
284
|
+
expect(json_response["errors"]["base"]).to include(Spree.t(:no_payment_found))
|
285
285
|
end
|
286
286
|
end
|
287
287
|
|
@@ -289,13 +289,13 @@ module Spree
|
|
289
289
|
let!(:order) { create(:order_with_line_items) }
|
290
290
|
|
291
291
|
it 'continues to advance advances an order while it can move forward' do
|
292
|
-
Spree::Order.
|
292
|
+
expect_any_instance_of(Spree::Order).to receive(:next).exactly(3).times.and_return(true, true, false)
|
293
293
|
api_put :advance, :id => order.to_param, :order_token => order.guest_token
|
294
294
|
end
|
295
295
|
|
296
296
|
it 'returns the order' do
|
297
297
|
api_put :advance, :id => order.to_param, :order_token => order.guest_token
|
298
|
-
json_response['id'].
|
298
|
+
expect(json_response['id']).to eq(order.id)
|
299
299
|
end
|
300
300
|
end
|
301
301
|
end
|