spree_api 2.0.3 → 2.0.4
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/CHANGELOG.md +30 -2
- data/app/controllers/spree/api/base_controller.rb +2 -2
- data/app/controllers/spree/api/checkouts_controller.rb +16 -12
- data/app/controllers/spree/api/products_controller.rb +9 -4
- data/app/controllers/spree/api/return_authorizations_controller.rb +28 -0
- data/app/controllers/spree/api/shipments_controller.rb +1 -1
- data/app/controllers/spree/api/variants_controller.rb +1 -1
- data/app/helpers/spree/api/api_helpers.rb +2 -2
- data/app/models/spree/order_decorator.rb +18 -5
- data/app/views/spree/admin/users/_api_fields.html.erb +4 -4
- data/app/views/spree/api/variants/variant.v1.rabl +4 -0
- data/config/routes.rb +8 -5
- data/lib/spree/api/testing_support/setup.rb +1 -14
- data/spec/controllers/spree/api/base_controller_spec.rb +2 -2
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +87 -34
- data/spec/controllers/spree/api/line_items_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/option_types_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/option_values_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/orders_controller_spec.rb +74 -16
- data/spec/controllers/spree/api/payments_controller_spec.rb +5 -5
- data/spec/controllers/spree/api/products_controller_spec.rb +8 -7
- data/spec/controllers/spree/api/return_authorizations_controller_spec.rb +63 -1
- data/spec/controllers/spree/api/states_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/variants_controller_spec.rb +2 -4
- data/spec/spec_helper.rb +23 -2
- 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: 9f5519b716277f189e3ca709d60342a6644f63e6
|
4
|
+
data.tar.gz: 5d8d83310106f05dee2dd8ed5a0f01aa66d1f6f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f850cf66f2e7a8bd57940b7961f1e740be4a0d0aeabe87ffe5e45f0a3641c7a7c81ffa72301517b5ca07ac5761a3071cb09dabbe69652593656ad382a487367
|
7
|
+
data.tar.gz: 03ac9cf7f05c894ebab107a30c6f0d6613835e8c55a2407e4b62f30e2b257fbdcf38cd97842f72a8a10f9032068e252f4c10f8e1b024e852036acdc82621eefa
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
-
## Spree 2.0.
|
1
|
+
## Spree 2.0.5 (unreleased)
|
2
2
|
|
3
|
-
|
3
|
+
## Spree 2.0.4
|
4
|
+
|
5
|
+
* PUT requests to Checkouts API endpoints now require authorization to alter an order.
|
6
|
+
|
7
|
+
*Ryan Bigg*
|
8
|
+
|
9
|
+
* The Products API endpoint now returns an additional key called `shipping_category_id`, and also requires `shipping_category_id` on create.
|
10
|
+
|
11
|
+
*Jeff Dutil*
|
12
|
+
|
13
|
+
* Checkouts API's update action will now correctly process line item attributes (either `line_items` or `line_item_attributes`)
|
14
|
+
|
15
|
+
* Ryan Bigg*
|
16
|
+
|
17
|
+
* Checkouts API now correctly processes incoming payment data during the payment step.
|
18
|
+
|
19
|
+
*Ryan Bigg*
|
20
|
+
|
21
|
+
* Fix issue where `set_current_order` before filter would be called when CheckoutsController actions were run, causing the order object to be deleted. #3306
|
22
|
+
|
23
|
+
*Ryan Bigg*
|
24
|
+
|
25
|
+
* An order can no longer transition past the "cart" state without first having a line item. #3312
|
26
|
+
|
27
|
+
*Ryan Bigg*
|
28
|
+
|
29
|
+
* Attributes other than "quantity" and "variant_id" will be added to a line item when creating along with an order. #3404
|
30
|
+
|
31
|
+
*Alex Marles & Ryan Bigg*
|
@@ -118,8 +118,8 @@ module Spree
|
|
118
118
|
def product_scope
|
119
119
|
if current_api_user.has_spree_role?("admin")
|
120
120
|
scope = Product
|
121
|
-
|
122
|
-
scope = scope.
|
121
|
+
if params[:show_deleted]
|
122
|
+
scope = scope.with_deleted
|
123
123
|
end
|
124
124
|
else
|
125
125
|
scope = Product.active
|
@@ -6,6 +6,8 @@ module Spree
|
|
6
6
|
|
7
7
|
include Spree::Core::ControllerHelpers::Auth
|
8
8
|
include Spree::Core::ControllerHelpers::Order
|
9
|
+
# This before_filter comes from Spree::Core::ControllerHelpers::Order
|
10
|
+
skip_before_filter :set_current_order
|
9
11
|
|
10
12
|
respond_to :json
|
11
13
|
|
@@ -15,8 +17,12 @@ module Spree
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def update
|
18
|
-
|
19
|
-
|
20
|
+
authorize! :update, @order, params[:order_token]
|
21
|
+
order_params = object_params
|
22
|
+
user_id = order_params.delete(:user_id)
|
23
|
+
line_items = order_params.delete("line_items_attributes")
|
24
|
+
if @order.update_attributes(order_params)
|
25
|
+
@order.update_line_items(line_items)
|
20
26
|
# TODO: Replace with better code when we switch to strong_parameters
|
21
27
|
# Also remove above user_id stripping
|
22
28
|
if current_api_user.has_spree_role?("admin") && user_id.present?
|
@@ -32,6 +38,7 @@ module Spree
|
|
32
38
|
|
33
39
|
def next
|
34
40
|
@order.next!
|
41
|
+
authorize! :update, @order, params[:order_token]
|
35
42
|
respond_with(@order, :default_template => 'spree/api/orders/show', :status => 200)
|
36
43
|
rescue StateMachine::InvalidTransition
|
37
44
|
respond_with(@order, :default_template => 'spree/api/orders/could_not_transition', :status => 422)
|
@@ -42,15 +49,16 @@ module Spree
|
|
42
49
|
def object_params
|
43
50
|
# For payment step, filter order parameters to produce the expected nested attributes for a single payment and its source, discarding attributes for payment methods other than the one selected
|
44
51
|
# respond_to check is necessary due to issue described in #2910
|
52
|
+
object_params = nested_params
|
45
53
|
if @order.has_checkout_step?("payment") && @order.payment?
|
46
|
-
if
|
47
|
-
|
54
|
+
if object_params[:payment_source].present? && source_params = object_params.delete(:payment_source)[object_params[:payments_attributes].first[:payment_method_id].underscore]
|
55
|
+
object_params[:payments_attributes].first[:source_attributes] = source_params
|
48
56
|
end
|
49
|
-
if
|
50
|
-
|
57
|
+
if object_params.present? && object_params[:payments_attributes]
|
58
|
+
object_params[:payments_attributes].first[:amount] = @order.total
|
51
59
|
end
|
52
60
|
end
|
53
|
-
|
61
|
+
object_params
|
54
62
|
end
|
55
63
|
|
56
64
|
def nested_params
|
@@ -65,6 +73,7 @@ module Spree
|
|
65
73
|
|
66
74
|
def load_order
|
67
75
|
@order = Spree::Order.find_by_number!(params[:id])
|
76
|
+
authorize! :read, @order, params[:order_token]
|
68
77
|
raise_insufficient_quantity and return if @order.insufficient_stock_lines.present?
|
69
78
|
@order.state = params[:state] if params[:state]
|
70
79
|
state_callback(:before)
|
@@ -92,11 +101,6 @@ module Spree
|
|
92
101
|
@order.ship_address ||= Address.default
|
93
102
|
end
|
94
103
|
|
95
|
-
def before_delivery
|
96
|
-
return if params[:order].present?
|
97
|
-
@order.create_proposed_shipments
|
98
|
-
end
|
99
|
-
|
100
104
|
def before_payment
|
101
105
|
@order.payments.destroy_all if request.put?
|
102
106
|
end
|
@@ -27,10 +27,15 @@ module Spree
|
|
27
27
|
authorize! :create, Product
|
28
28
|
params[:product][:available_on] ||= Time.now
|
29
29
|
@product = Product.new(params[:product])
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
begin
|
31
|
+
if @product.save
|
32
|
+
respond_with(@product, :status => 201, :default_template => :show)
|
33
|
+
else
|
34
|
+
invalid_resource!(@product)
|
35
|
+
end
|
36
|
+
rescue ActiveRecord::RecordNotUnique
|
37
|
+
@product.permalink = nil
|
38
|
+
retry
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
@@ -41,6 +41,34 @@ module Spree
|
|
41
41
|
respond_with(@return_authorization, :status => 204)
|
42
42
|
end
|
43
43
|
|
44
|
+
def add
|
45
|
+
@return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
|
46
|
+
@return_authorization.add_variant params[:variant_id].to_i, params[:quantity].to_i
|
47
|
+
if @return_authorization.valid?
|
48
|
+
respond_with @return_authorization, default_template: :show
|
49
|
+
else
|
50
|
+
invalid_resource!(@return_authorization)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def receive
|
55
|
+
@return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
|
56
|
+
if @return_authorization.receive
|
57
|
+
respond_with @return_authorization, default_template: :show
|
58
|
+
else
|
59
|
+
invalid_resource!(@return_authorization)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def cancel
|
64
|
+
@return_authorization = order.return_authorizations.accessible_by(current_ability, :update).find(params[:id])
|
65
|
+
if @return_authorization.cancel
|
66
|
+
respond_with @return_authorization, default_template: :show
|
67
|
+
else
|
68
|
+
invalid_resource!(@return_authorization)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
44
72
|
private
|
45
73
|
|
46
74
|
def order
|
@@ -56,7 +56,7 @@ module Spree
|
|
56
56
|
unless current_api_user.has_spree_role?("admin") || params[:show_deleted]
|
57
57
|
variants = @product.variants_including_master
|
58
58
|
else
|
59
|
-
variants = @product.
|
59
|
+
variants = @product.variants_including_master.with_deleted
|
60
60
|
end
|
61
61
|
else
|
62
62
|
variants = Variant.scoped
|
@@ -12,7 +12,7 @@ module Spree
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def product_attributes
|
15
|
-
[:id, :name, :description, :price, :available_on, :permalink, :meta_description, :meta_keywords, :taxon_ids]
|
15
|
+
[:id, :name, :description, :price, :available_on, :permalink, :meta_description, :meta_keywords, :shipping_category_id, :taxon_ids]
|
16
16
|
end
|
17
17
|
|
18
18
|
def product_property_attributes
|
@@ -32,7 +32,7 @@ module Spree
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def order_attributes
|
35
|
-
[:id, :number, :item_total, :total, :state, :adjustment_total, :user_id, :created_at, :updated_at, :completed_at, :payment_total, :shipment_state, :payment_state, :email, :special_instructions]
|
35
|
+
[:id, :number, :item_total, :total, :state, :adjustment_total, :user_id, :created_at, :updated_at, :completed_at, :payment_total, :shipment_state, :payment_state, :email, :special_instructions, :token]
|
36
36
|
end
|
37
37
|
|
38
38
|
def line_item_attributes
|
@@ -1,13 +1,26 @@
|
|
1
1
|
Spree::Order.class_eval do
|
2
2
|
def self.build_from_api(user, params)
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
line_items = params.delete(:line_items_attributes) || []
|
4
|
+
|
5
|
+
order = create(params)
|
6
|
+
order.associate_user!(user)
|
7
|
+
|
8
|
+
unless line_items.empty?
|
9
|
+
line_items.each_key do |k|
|
10
|
+
line_item = line_items[k]
|
11
|
+
extra_params = line_item.except(:variant_id, :quantity)
|
12
|
+
line_item = order.contents.add(Spree::Variant.find(line_item[:variant_id]), line_item[:quantity])
|
13
|
+
line_item.update_attributes(extra_params) unless extra_params.empty?
|
8
14
|
end
|
9
15
|
end
|
10
16
|
|
11
17
|
order
|
12
18
|
end
|
19
|
+
|
20
|
+
def update_line_items(line_item_params)
|
21
|
+
return if line_item_params.blank?
|
22
|
+
line_item_params.each do |id, attributes|
|
23
|
+
self.line_items.find(id).update_attributes!(attributes)
|
24
|
+
end
|
25
|
+
end
|
13
26
|
end
|
@@ -12,11 +12,11 @@
|
|
12
12
|
<% end %>
|
13
13
|
|
14
14
|
<span class="or"><%= Spree.t(:or)%></span>
|
15
|
-
|
15
|
+
|
16
16
|
<%= form_tag spree.generate_api_key_admin_user_path(@user), :method => :put do %>
|
17
17
|
<%= button Spree.t('regenerate_key', :scope => 'api'), 'icon-refresh' %>
|
18
|
-
<% end %>
|
19
|
-
</div>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
20
|
|
21
21
|
<% else %>
|
22
22
|
|
@@ -26,6 +26,6 @@
|
|
26
26
|
<%= form_tag spree.generate_api_key_admin_user_path(@user), :method => :put do %>
|
27
27
|
<%= button Spree.t('generate_key', :scope => 'api'), 'icon-key' %>
|
28
28
|
<% end %>
|
29
|
-
</div>
|
29
|
+
</div>
|
30
30
|
<% end %>
|
31
31
|
</fieldset>
|
data/config/routes.rb
CHANGED
@@ -21,18 +21,21 @@ Spree::Core::Engine.routes.draw do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
resources :variants, :only => [:index]
|
25
|
-
end
|
24
|
+
resources :variants, :only => [:index]
|
26
25
|
|
27
26
|
resources :option_types do
|
28
27
|
resources :option_values
|
29
28
|
end
|
30
29
|
|
31
30
|
resources :orders do
|
32
|
-
resources :return_authorizations
|
31
|
+
resources :return_authorizations do
|
32
|
+
member do
|
33
|
+
put :add
|
34
|
+
put :cancel
|
35
|
+
put :receive
|
36
|
+
end
|
37
|
+
end
|
33
38
|
member do
|
34
|
-
put :address
|
35
|
-
put :delivery
|
36
39
|
put :cancel
|
37
40
|
put :empty
|
38
41
|
end
|
@@ -5,23 +5,10 @@ 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.
|
8
|
+
user.stub(:has_spree_role?).with("admin").and_return(true)
|
9
9
|
user
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
13
|
-
# Default kaminari's pagination to a certain range
|
14
|
-
# Means that you don't need to create 25 objects to test pagination
|
15
|
-
def default_per_page(count)
|
16
|
-
before do
|
17
|
-
@current_default_per_page = Kaminari.config.default_per_page
|
18
|
-
Kaminari.config.default_per_page = 1
|
19
|
-
end
|
20
|
-
|
21
|
-
after do
|
22
|
-
Kaminari.config.default_per_page = @current_default_per_page
|
23
|
-
end
|
24
|
-
end
|
25
12
|
end
|
26
13
|
end
|
27
14
|
end
|
@@ -10,7 +10,7 @@ describe Spree::Api::BaseController do
|
|
10
10
|
|
11
11
|
context "signed in as a user using an authentication extension" do
|
12
12
|
before do
|
13
|
-
controller.stub :try_spree_current_user =>
|
13
|
+
controller.stub :try_spree_current_user => double(:email => "spree@example.com")
|
14
14
|
Spree::Api::Config[:requires_authentication] = true
|
15
15
|
end
|
16
16
|
|
@@ -49,7 +49,7 @@ describe Spree::Api::BaseController do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it "maps symantec keys to nested_attributes keys" do
|
52
|
-
klass =
|
52
|
+
klass = double(:nested_attributes_options => { :line_items => {},
|
53
53
|
:bill_address => {} })
|
54
54
|
attributes = { 'line_items' => { :id => 1 },
|
55
55
|
'bill_address' => { :id => 2 },
|
@@ -15,7 +15,7 @@ module Spree
|
|
15
15
|
create(:stock_location)
|
16
16
|
|
17
17
|
@shipping_method = create(:shipping_method, :zones => [country_zone])
|
18
|
-
@payment_method = create(:
|
18
|
+
@payment_method = create(:bogus_payment_method)
|
19
19
|
end
|
20
20
|
|
21
21
|
after do
|
@@ -29,20 +29,6 @@ module Spree
|
|
29
29
|
json_response['number'].should be_present
|
30
30
|
response.status.should == 201
|
31
31
|
end
|
32
|
-
|
33
|
-
it "should not have a user by default" do
|
34
|
-
api_post :create
|
35
|
-
|
36
|
-
json_response['user_id'].should_not be_present
|
37
|
-
response.status.should == 201
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should not have an email by default" do
|
41
|
-
api_post :create
|
42
|
-
|
43
|
-
json_response['email'].should_not be_present
|
44
|
-
response.status.should == 201
|
45
|
-
end
|
46
32
|
end
|
47
33
|
|
48
34
|
context "PUT 'update'" do
|
@@ -53,26 +39,49 @@ module Spree
|
|
53
39
|
Order.any_instance.stub(:payment_required? => true)
|
54
40
|
end
|
55
41
|
|
42
|
+
it "cannot update without a token" do
|
43
|
+
api_put :update, :id => order.to_param
|
44
|
+
assert_unauthorized!
|
45
|
+
end
|
46
|
+
|
56
47
|
it "will return an error if the recently created order cannot transition from cart to address" do
|
57
48
|
order.state.should eq "cart"
|
58
49
|
order.update_column(:email, nil) # email is necessary to transition from cart to address
|
59
50
|
|
60
|
-
api_put :update, :id => order.to_param
|
51
|
+
api_put :update, :id => order.to_param, :order_token => order.token
|
61
52
|
|
62
53
|
# Order has not transitioned
|
63
54
|
json_response['state'].should == 'cart'
|
64
55
|
end
|
65
56
|
|
66
|
-
it "should transition a recently created order from cart
|
57
|
+
it "should transition a recently created order from cart to address" do
|
67
58
|
order.state.should eq "cart"
|
68
59
|
order.email.should_not be_nil
|
69
|
-
api_put :update, :id => order.to_param
|
60
|
+
api_put :update, :id => order.to_param, :order_token => order.token
|
61
|
+
order.reload.state.should eq "address"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "can take line_items_attributes as a parameter" do
|
65
|
+
line_item = order.line_items.first
|
66
|
+
api_put :update, :id => order.to_param, :order_token => order.token,
|
67
|
+
:order => { :line_items_attributes => { line_item.id => { :quantity => 1 } } }
|
68
|
+
response.status.should == 200
|
69
|
+
order.reload.state.should eq "address"
|
70
|
+
end
|
71
|
+
|
72
|
+
it "can take line_items as a parameter" do
|
73
|
+
line_item = order.line_items.first
|
74
|
+
api_put :update, :id => order.to_param, :order_token => order.token,
|
75
|
+
:order => { :line_items => { line_item.id => { :quantity => 1 } } }
|
76
|
+
response.status.should == 200
|
70
77
|
order.reload.state.should eq "address"
|
71
78
|
end
|
72
79
|
|
73
80
|
it "will return an error if the order cannot transition" do
|
81
|
+
order.bill_address = nil
|
82
|
+
order.save
|
74
83
|
order.update_column(:state, "address")
|
75
|
-
api_put :update, :id => order.to_param
|
84
|
+
api_put :update, :id => order.to_param, :order_token => order.token
|
76
85
|
response.status.should == 422
|
77
86
|
end
|
78
87
|
|
@@ -89,7 +98,7 @@ module Spree
|
|
89
98
|
:country_id => @country.id
|
90
99
|
}
|
91
100
|
api_put :update,
|
92
|
-
:id => order.to_param,
|
101
|
+
:id => order.to_param, :order_token => order.token,
|
93
102
|
:order => { :bill_address_attributes => billing_address, :ship_address_attributes => shipping_address }
|
94
103
|
json_response['state'].should == 'delivery'
|
95
104
|
json_response['bill_address']['firstname'].should == 'John'
|
@@ -101,7 +110,7 @@ module Spree
|
|
101
110
|
order.update_column(:state, "delivery")
|
102
111
|
shipment = create(:shipment, :order => order)
|
103
112
|
shipping_rate = shipment.shipping_rates.first
|
104
|
-
api_put :update, :id => order.to_param, :order => { :shipments_attributes => { "0" => { :selected_shipping_rate_id => shipping_rate.id, :id => shipment.id } } }
|
113
|
+
api_put :update, :id => order.to_param, :order_token => order.token, :order => { :shipments_attributes => { "0" => { :selected_shipping_rate_id => shipping_rate.id, :id => shipment.id } } }
|
105
114
|
json_response['shipments'][0]['shipping_method']['name'].should == @shipping_method.name
|
106
115
|
json_response['state'].should == 'payment'
|
107
116
|
response.status.should == 200
|
@@ -109,23 +118,53 @@ module Spree
|
|
109
118
|
|
110
119
|
it "can update payment method and transition from payment to confirm" do
|
111
120
|
order.update_column(:state, "payment")
|
112
|
-
api_put :update, :id => order.to_param, :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id }] }
|
121
|
+
api_put :update, :id => order.to_param, :order_token => order.token, :order => { :payments_attributes => [{ :payment_method_id => @payment_method.id }] }
|
113
122
|
json_response['state'].should == 'confirm'
|
114
123
|
json_response['payments'][0]['payment_method']['name'].should == @payment_method.name
|
115
124
|
response.status.should == 200
|
116
125
|
end
|
117
126
|
|
127
|
+
it "can update payment method with source and transition from payment to confirm" do
|
128
|
+
order.update_column(:state, "payment")
|
129
|
+
source_attributes = {
|
130
|
+
"number" => "4111111111111111",
|
131
|
+
"month" => 1.month.from_now.month,
|
132
|
+
"year" => 1.month.from_now.year,
|
133
|
+
"verification_value" => "123"
|
134
|
+
}
|
135
|
+
|
136
|
+
api_put :update, :id => order.to_param, :order_token => order.token,
|
137
|
+
:order => { :payments_attributes => [{ :payment_method_id => @payment_method.id.to_s }],
|
138
|
+
:payment_source => { @payment_method.id.to_s => source_attributes } }
|
139
|
+
json_response['payments'][0]['payment_method']['name'].should == @payment_method.name
|
140
|
+
json_response['payments'][0]['amount'].should == order.total.to_s
|
141
|
+
response.status.should == 200
|
142
|
+
end
|
143
|
+
|
144
|
+
it "returns errors when source is missing attributes" do
|
145
|
+
order.update_column(:state, "payment")
|
146
|
+
api_put :update, :id => order.to_param, :order_token => order.token,
|
147
|
+
:order => { :payments_attributes => [{ :payment_method_id => @payment_method.id.to_s }],
|
148
|
+
:payment_source => { @payment_method.id.to_s => { } } }
|
149
|
+
response.status.should == 422
|
150
|
+
cc_errors = json_response['errors']['payments.Credit Card']
|
151
|
+
cc_errors.should include("Number can't be blank")
|
152
|
+
cc_errors.should include("Month is not a number")
|
153
|
+
cc_errors.should include("Year is not a number")
|
154
|
+
cc_errors.should include("Verification Value can't be blank")
|
155
|
+
end
|
156
|
+
|
118
157
|
it "can transition from confirm to complete" do
|
119
158
|
order.update_column(:state, "confirm")
|
120
159
|
Spree::Order.any_instance.stub(:payment_required? => false)
|
121
|
-
api_put :update, :id => order.to_param
|
160
|
+
api_put :update, :id => order.to_param, :order_token => order.token
|
122
161
|
json_response['state'].should == 'complete'
|
123
162
|
response.status.should == 200
|
124
163
|
end
|
125
164
|
|
126
165
|
it "returns the order if the order is already complete" do
|
127
166
|
order.update_column(:state, "complete")
|
128
|
-
api_put :update, :id => order.to_param
|
167
|
+
api_put :update, :id => order.to_param, :order_token => order.token
|
129
168
|
json_response['number'].should == order.number
|
130
169
|
response.status.should == 200
|
131
170
|
end
|
@@ -142,7 +181,7 @@ module Spree
|
|
142
181
|
end
|
143
182
|
|
144
183
|
it "can assign an email to the order" do
|
145
|
-
api_put :update, :id => order.to_param, :order => { :email => "guest@spreecommerce.com" }
|
184
|
+
api_put :update, :id => order.to_param, :order => { :email => "guest@spreecommerce.com" }, :order_token => order.token
|
146
185
|
json_response['email'].should == "guest@spreecommerce.com"
|
147
186
|
response.status.should == 200
|
148
187
|
end
|
@@ -151,16 +190,32 @@ module Spree
|
|
151
190
|
order.update_column(:state, "payment")
|
152
191
|
Spree::Promo::CouponApplicator.should_receive(:new).with(order).and_call_original
|
153
192
|
Spree::Promo::CouponApplicator.any_instance.should_receive(:apply).and_return({:coupon_applied? => true})
|
154
|
-
api_put :update, :id => order.to_param, :order => { :coupon_code => "foobar" }
|
193
|
+
api_put :update, :id => order.to_param, :order => { :coupon_code => "foobar" }, :order_token => order.token
|
194
|
+
end
|
195
|
+
|
196
|
+
it "can apply a coupon code to an order" do
|
197
|
+
order.update_column(:state, "payment")
|
198
|
+
Spree::Promo::CouponApplicator.should_receive(:new).with(order).and_call_original
|
199
|
+
coupon_result = { :coupon_applied? => true }
|
200
|
+
Spree::Promo::CouponApplicator.any_instance.should_receive(:apply).and_return(coupon_result)
|
201
|
+
api_put :update, :id => order.to_param, :order_token => order.token, :order => { :coupon_code => "foobar" }
|
155
202
|
end
|
156
203
|
end
|
157
204
|
|
158
205
|
context "PUT 'next'" do
|
159
|
-
let!(:order) { create(:
|
206
|
+
let!(:order) { create(:order_with_line_items) }
|
207
|
+
it "cannot transition to address without a line item" do
|
208
|
+
order.line_items.delete_all
|
209
|
+
order.update_column(:email, "spree@example.com")
|
210
|
+
api_put :next, :id => order.to_param, :order_token => order.token
|
211
|
+
response.status.should == 422
|
212
|
+
json_response["errors"]["base"].should include(Spree.t(:there_are_no_items_for_this_order))
|
213
|
+
end
|
214
|
+
|
160
215
|
it "can transition an order to the next state" do
|
161
216
|
order.update_column(:email, "spree@example.com")
|
162
217
|
|
163
|
-
api_put :next, :id => order.to_param
|
218
|
+
api_put :next, :id => order.to_param, :order_token => order.token
|
164
219
|
response.status.should == 200
|
165
220
|
json_response['state'].should == 'address'
|
166
221
|
end
|
@@ -168,17 +223,15 @@ module Spree
|
|
168
223
|
it "cannot transition if order email is blank" do
|
169
224
|
order.update_column(:email, nil)
|
170
225
|
|
171
|
-
api_put :next, :id => order.to_param
|
226
|
+
api_put :next, :id => order.to_param, :order_token => order.token
|
172
227
|
response.status.should == 422
|
173
228
|
json_response['error'].should =~ /could not be transitioned/
|
174
229
|
end
|
175
230
|
|
176
|
-
it "
|
231
|
+
it "returns a sensible error when no payment method is specified" do
|
177
232
|
order.update_column(:state, "payment")
|
178
|
-
|
179
|
-
|
180
|
-
Spree::Promo::CouponApplicator.any_instance.should_receive(:apply).and_return(coupon_result)
|
181
|
-
api_put :update, :id => order.to_param, :order => { :coupon_code => "foobar" }
|
233
|
+
api_put :next, :id => order.to_param, :order_token => order.token, :order => {}
|
234
|
+
json_response["errors"]["base"].should include(Spree.t(:no_pending_payments))
|
182
235
|
end
|
183
236
|
end
|
184
237
|
end
|
@@ -65,7 +65,7 @@ module Spree
|
|
65
65
|
line_item = order.line_items.first
|
66
66
|
api_delete :destroy, :id => line_item.id
|
67
67
|
assert_unauthorized!
|
68
|
-
lambda { line_item.reload }.should_not raise_error
|
68
|
+
lambda { line_item.reload }.should_not raise_error
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -69,7 +69,7 @@ module Spree
|
|
69
69
|
it "cannot delete an option type" do
|
70
70
|
api_delete :destroy, :id => option_type.id
|
71
71
|
assert_unauthorized!
|
72
|
-
lambda { option_type.reload }.should_not raise_error
|
72
|
+
lambda { option_type.reload }.should_not raise_error
|
73
73
|
end
|
74
74
|
|
75
75
|
context "as an admin" do
|
@@ -80,7 +80,7 @@ module Spree
|
|
80
80
|
it "cannot delete an option value" do
|
81
81
|
api_delete :destroy, :id => option_type.id
|
82
82
|
assert_unauthorized!
|
83
|
-
lambda { option_type.reload }.should_not raise_error
|
83
|
+
lambda { option_type.reload }.should_not raise_error
|
84
84
|
end
|
85
85
|
|
86
86
|
context "as an admin" do
|
@@ -9,7 +9,7 @@ module Spree
|
|
9
9
|
:state, :adjustment_total,
|
10
10
|
:user_id, :created_at, :updated_at,
|
11
11
|
:completed_at, :payment_total, :shipment_state,
|
12
|
-
:payment_state, :email, :special_instructions] }
|
12
|
+
:payment_state, :email, :special_instructions, :token] }
|
13
13
|
|
14
14
|
|
15
15
|
before do
|
@@ -55,30 +55,88 @@ module Spree
|
|
55
55
|
assert_unauthorized!
|
56
56
|
end
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
order
|
66
|
-
|
58
|
+
context "create order" do
|
59
|
+
let(:current_api_user) do
|
60
|
+
user = Spree.user_class.new(:email => "spree@example.com")
|
61
|
+
user.generate_spree_api_key!
|
62
|
+
user
|
63
|
+
end
|
64
|
+
|
65
|
+
it "can create an order" do
|
66
|
+
variant = create(:variant)
|
67
|
+
api_post :create, :order => { :line_items => { "0" => { :variant_id => variant.to_param, :quantity => 5 } } }
|
68
|
+
response.status.should == 201
|
69
|
+
order = Order.last
|
70
|
+
order.line_items.count.should == 1
|
71
|
+
order.line_items.first.variant.should == variant
|
72
|
+
order.line_items.first.quantity.should == 5
|
73
|
+
json_response["state"].should == "cart"
|
74
|
+
order.user.should == current_api_user
|
75
|
+
order.email == current_api_user.email
|
76
|
+
json_response["user_id"].should == current_api_user.id
|
77
|
+
end
|
78
|
+
|
79
|
+
# Regression test for #3404
|
80
|
+
it "can specify additional parameters for a line item" do
|
81
|
+
variant = create(:variant)
|
82
|
+
Order.should_receive(:create).and_return(order = Spree::Order.new)
|
83
|
+
order.stub(:associate_user!)
|
84
|
+
order.stub_chain(:contents, :add).and_return(line_item = double('LineItem'))
|
85
|
+
line_item.should_receive(:update_attributes).with("special" => true)
|
86
|
+
api_post :create, :order => {
|
87
|
+
:line_items => {
|
88
|
+
"0" => {
|
89
|
+
:variant_id => variant.to_param, :quantity => 5, :special => true
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
response.status.should == 201
|
94
|
+
end
|
95
|
+
|
96
|
+
# Regression test for #3404
|
97
|
+
it "does not update line item needlessly" do
|
98
|
+
variant = create(:variant)
|
99
|
+
Order.should_receive(:create).and_return(order = Spree::Order.new)
|
100
|
+
order.stub(:associate_user!)
|
101
|
+
order.stub_chain(:contents, :add).and_return(line_item = double('LineItem'))
|
102
|
+
line_item.should_not_receive(:update_attributes)
|
103
|
+
api_post :create, :order => {
|
104
|
+
:line_items => {
|
105
|
+
"0" => {
|
106
|
+
:variant_id => variant.to_param, :quantity => 5
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
end
|
67
111
|
end
|
68
112
|
|
69
113
|
it "can create an order without any parameters" do
|
70
|
-
lambda { api_post :create }.should_not raise_error
|
114
|
+
lambda { api_post :create }.should_not raise_error
|
71
115
|
response.status.should == 201
|
72
116
|
order = Order.last
|
73
117
|
json_response["state"].should == "cart"
|
74
118
|
end
|
75
119
|
|
76
120
|
context "working with an order" do
|
121
|
+
|
122
|
+
let(:variant) { create(:variant) }
|
123
|
+
let!(:line_item) { order.contents.add(variant, 1) }
|
124
|
+
let!(:payment_method) { create(:payment_method) }
|
125
|
+
|
126
|
+
let(:address_params) { { :country_id => Country.first.id, :state_id => State.first.id } }
|
127
|
+
let(:billing_address) { { :firstname => "Tiago", :lastname => "Motta", :address1 => "Av Paulista",
|
128
|
+
:city => "Sao Paulo", :zipcode => "1234567", :phone => "12345678",
|
129
|
+
:country_id => Country.first.id, :state_id => State.first.id} }
|
130
|
+
let(:shipping_address) { { :firstname => "Tiago", :lastname => "Motta", :address1 => "Av Paulista",
|
131
|
+
:city => "Sao Paulo", :zipcode => "1234567", :phone => "12345678",
|
132
|
+
:country_id => Country.first.id, :state_id => State.first.id} }
|
133
|
+
|
77
134
|
before do
|
78
135
|
Order.any_instance.stub :user => current_api_user
|
79
|
-
create(:payment_method)
|
80
136
|
order.next # Switch from cart to address
|
81
|
-
order.
|
137
|
+
order.bill_address = nil
|
138
|
+
order.ship_address = nil
|
139
|
+
order.save
|
82
140
|
order.state.should == "address"
|
83
141
|
end
|
84
142
|
|
@@ -102,18 +160,18 @@ module Spree
|
|
102
160
|
|
103
161
|
response.status.should == 200
|
104
162
|
json_response['item_total'].to_f.should_not == order.item_total.to_f
|
163
|
+
json_response['line_items'].count.should == 2
|
164
|
+
json_response['line_items'].first['quantity'].should == 1
|
165
|
+
json_response['line_items'].last['quantity'].should == 2
|
105
166
|
end
|
106
167
|
|
107
168
|
it "can add billing address" do
|
108
|
-
order.bill_address.should be_nil
|
109
|
-
|
110
169
|
api_put :update, :id => order.to_param, :order => { :bill_address_attributes => billing_address }
|
111
170
|
|
112
171
|
order.reload.bill_address.should_not be_nil
|
113
172
|
end
|
114
173
|
|
115
174
|
it "receives error message if trying to add billing address with errors" do
|
116
|
-
order.bill_address.should be_nil
|
117
175
|
billing_address[:firstname] = ""
|
118
176
|
|
119
177
|
api_put :update, :id => order.to_param, :order => { :bill_address_attributes => billing_address }
|
@@ -102,7 +102,7 @@ module Spree
|
|
102
102
|
end
|
103
103
|
|
104
104
|
it "returns a 422 status when authorization fails" do
|
105
|
-
fake_response =
|
105
|
+
fake_response = double(:success? => false, :to_s => "Could not authorize card")
|
106
106
|
Spree::Gateway::Bogus.any_instance.should_receive(:authorize).and_return(fake_response)
|
107
107
|
api_put :authorize, :id => payment.to_param
|
108
108
|
response.status.should == 422
|
@@ -119,7 +119,7 @@ module Spree
|
|
119
119
|
end
|
120
120
|
|
121
121
|
it "returns a 422 status when purchasing fails" do
|
122
|
-
fake_response =
|
122
|
+
fake_response = double(:success? => false, :to_s => "Insufficient funds")
|
123
123
|
Spree::Gateway::Bogus.any_instance.should_receive(:capture).and_return(fake_response)
|
124
124
|
api_put :capture, :id => payment.to_param
|
125
125
|
response.status.should == 422
|
@@ -137,7 +137,7 @@ module Spree
|
|
137
137
|
end
|
138
138
|
|
139
139
|
it "returns a 422 status when purchasing fails" do
|
140
|
-
fake_response =
|
140
|
+
fake_response = double(:success? => false, :to_s => "Insufficient funds")
|
141
141
|
Spree::Gateway::Bogus.any_instance.should_receive(:purchase).and_return(fake_response)
|
142
142
|
api_put :purchase, :id => payment.to_param
|
143
143
|
response.status.should == 422
|
@@ -155,7 +155,7 @@ module Spree
|
|
155
155
|
end
|
156
156
|
|
157
157
|
it "returns a 422 status when voiding fails" do
|
158
|
-
fake_response =
|
158
|
+
fake_response = double(:success? => false, :to_s => "NO REFUNDS")
|
159
159
|
Spree::Gateway::Bogus.any_instance.should_receive(:void).and_return(fake_response)
|
160
160
|
api_put :void, :id => payment.to_param
|
161
161
|
response.status.should == 422
|
@@ -182,7 +182,7 @@ module Spree
|
|
182
182
|
end
|
183
183
|
|
184
184
|
it "returns a 422 status when crediting fails" do
|
185
|
-
fake_response =
|
185
|
+
fake_response = double(:success? => false, :to_s => "NO CREDIT FOR YOU")
|
186
186
|
Spree::Gateway::Bogus.any_instance.should_receive(:credit).and_return(fake_response)
|
187
187
|
api_put :credit, :id => payment.to_param
|
188
188
|
response.status.should == 422
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
|
8
8
|
let!(:product) { create(:product) }
|
9
9
|
let!(:inactive_product) { create(:product, :available_on => Time.now.tomorrow, :name => "inactive") }
|
10
|
-
let(:attributes) { [:id, :name, :description, :price, :available_on, :permalink, :meta_description, :meta_keywords, :taxon_ids] }
|
10
|
+
let(:attributes) { [:id, :name, :description, :price, :available_on, :permalink, :meta_description, :meta_keywords, :shipping_category_id, :taxon_ids] }
|
11
11
|
|
12
12
|
before do
|
13
13
|
stub_authentication!
|
@@ -41,11 +41,9 @@ module Spree
|
|
41
41
|
end
|
42
42
|
|
43
43
|
context "pagination" do
|
44
|
-
default_per_page(1)
|
45
|
-
|
46
44
|
it "can select the next page of products" do
|
47
45
|
second_product = create(:product)
|
48
|
-
api_get :index, :page => 2
|
46
|
+
api_get :index, :page => 2, :per_page => 1
|
49
47
|
json_response["products"].first.should have_attributes(attributes)
|
50
48
|
json_response["total_count"].should == 2
|
51
49
|
json_response["current_page"].should == 2
|
@@ -136,6 +134,7 @@ module Spree
|
|
136
134
|
required_attributes = json_response["required_attributes"]
|
137
135
|
required_attributes.should include("name")
|
138
136
|
required_attributes.should include("price")
|
137
|
+
required_attributes.should include("shipping_category_id")
|
139
138
|
end
|
140
139
|
|
141
140
|
it_behaves_like "modifying product actions are restricted"
|
@@ -171,7 +170,8 @@ module Spree
|
|
171
170
|
|
172
171
|
it "can create a new product" do
|
173
172
|
api_post :create, :product => { :name => "The Other Product",
|
174
|
-
:price => 19.99
|
173
|
+
:price => 19.99,
|
174
|
+
:shipping_category_id => create(:shipping_category).id }
|
175
175
|
json_response.should have_attributes(attributes)
|
176
176
|
response.status.should == 201
|
177
177
|
end
|
@@ -188,7 +188,8 @@ module Spree
|
|
188
188
|
|
189
189
|
it "can still create a product" do
|
190
190
|
api_post :create, :product => { :name => "The Other Product",
|
191
|
-
:price => 19.99
|
191
|
+
:price => 19.99,
|
192
|
+
:shipping_category_id => create(:shipping_category).id },
|
192
193
|
:token => "fake"
|
193
194
|
json_response.should have_attributes(attributes)
|
194
195
|
response.status.should == 201
|
@@ -201,7 +202,7 @@ module Spree
|
|
201
202
|
json_response["error"].should == "Invalid resource. Please fix errors and try again."
|
202
203
|
errors = json_response["errors"]
|
203
204
|
errors.delete("permalink") # Don't care about this one.
|
204
|
-
errors.keys.should =~ ["name", "price"]
|
205
|
+
errors.keys.should =~ ["name", "price", "shipping_category_id"]
|
205
206
|
end
|
206
207
|
|
207
208
|
it "can update a product" do
|
@@ -44,6 +44,21 @@ module Spree
|
|
44
44
|
assert_unauthorized!
|
45
45
|
end
|
46
46
|
|
47
|
+
it "cannot add a variant to a return authorization" do
|
48
|
+
api_put :add
|
49
|
+
assert_unauthorized!
|
50
|
+
end
|
51
|
+
|
52
|
+
it "cannot mark a return authorization as received" do
|
53
|
+
api_put :receive
|
54
|
+
assert_unauthorized!
|
55
|
+
end
|
56
|
+
|
57
|
+
it "cannot cancel a return authorization" do
|
58
|
+
api_put :cancel
|
59
|
+
assert_unauthorized!
|
60
|
+
end
|
61
|
+
|
47
62
|
it "cannot delete a return authorization" do
|
48
63
|
api_delete :destroy
|
49
64
|
assert_unauthorized!
|
@@ -105,6 +120,53 @@ module Spree
|
|
105
120
|
json_response.should have_attributes(attributes)
|
106
121
|
end
|
107
122
|
|
123
|
+
it "can add an inventory unit to a return authorization on the order" do
|
124
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
125
|
+
return_authorization = order.return_authorizations.first
|
126
|
+
inventory_unit = return_authorization.returnable_inventory.first
|
127
|
+
inventory_unit.should be
|
128
|
+
return_authorization.inventory_units.should be_empty
|
129
|
+
api_put :add, :id => return_authorization.id, variant_id: inventory_unit.variant.id, quantity: 1
|
130
|
+
response.status.should == 200
|
131
|
+
json_response.should have_attributes(attributes)
|
132
|
+
return_authorization.reload.inventory_units.should_not be_empty
|
133
|
+
end
|
134
|
+
|
135
|
+
it "can mark a return authorization as received on the order with an inventory unit" do
|
136
|
+
FactoryGirl.create(:new_return_authorization, :order => order)
|
137
|
+
return_authorization = order.return_authorizations.first
|
138
|
+
return_authorization.state.should == "authorized"
|
139
|
+
|
140
|
+
# prep (use a rspec context or a factory instead?)
|
141
|
+
inventory_unit = return_authorization.returnable_inventory.first
|
142
|
+
inventory_unit.should be
|
143
|
+
return_authorization.inventory_units.should be_empty
|
144
|
+
api_put :add, :id => return_authorization.id, variant_id: inventory_unit.variant.id, quantity: 1
|
145
|
+
# end prep
|
146
|
+
|
147
|
+
api_delete :receive, :id => return_authorization.id
|
148
|
+
response.status.should == 200
|
149
|
+
return_authorization.reload.state.should == "received"
|
150
|
+
end
|
151
|
+
|
152
|
+
it "cannot mark a return authorization as received on the order with no inventory units" do
|
153
|
+
FactoryGirl.create(:new_return_authorization, :order => order)
|
154
|
+
return_authorization = order.return_authorizations.first
|
155
|
+
return_authorization.state.should == "authorized"
|
156
|
+
api_delete :receive, :id => return_authorization.id
|
157
|
+
response.status.should == 422
|
158
|
+
return_authorization.reload.state.should == "authorized"
|
159
|
+
end
|
160
|
+
|
161
|
+
it "can cancel a return authorization on the order" do
|
162
|
+
FactoryGirl.create(:new_return_authorization, :order => order)
|
163
|
+
return_authorization = order.return_authorizations.first
|
164
|
+
return_authorization.state.should == "authorized"
|
165
|
+
api_delete :cancel, :id => return_authorization.id
|
166
|
+
response.status.should == 200
|
167
|
+
return_authorization.reload.state.should == "canceled"
|
168
|
+
end
|
169
|
+
|
108
170
|
it "can delete a return authorization on the order" do
|
109
171
|
FactoryGirl.create(:return_authorization, :order => order)
|
110
172
|
return_authorization = order.return_authorizations.first
|
@@ -140,7 +202,7 @@ module Spree
|
|
140
202
|
return_authorization = order.return_authorizations.first
|
141
203
|
api_delete :destroy, :id => return_authorization.id
|
142
204
|
assert_unauthorized!
|
143
|
-
lambda { return_authorization.reload }.should_not raise_error
|
205
|
+
lambda { return_authorization.reload }.should_not raise_error
|
144
206
|
end
|
145
207
|
end
|
146
208
|
end
|
@@ -19,7 +19,7 @@ module Spree
|
|
19
19
|
|
20
20
|
context "pagination" do
|
21
21
|
before do
|
22
|
-
State.should_receive(:scoped).and_return(@scope =
|
22
|
+
State.should_receive(:scoped).and_return(@scope = double)
|
23
23
|
@scope.stub_chain(:ransack, :result, :includes, :order).and_return(@scope)
|
24
24
|
end
|
25
25
|
|
@@ -77,11 +77,9 @@ module Spree
|
|
77
77
|
end
|
78
78
|
|
79
79
|
context "pagination" do
|
80
|
-
default_per_page(1)
|
81
|
-
|
82
80
|
it "can select the next page of variants" do
|
83
81
|
second_variant = create(:variant)
|
84
|
-
api_get :index, :page => 2
|
82
|
+
api_get :index, :page => 2, :per_page => 1
|
85
83
|
json_response["variants"].first.should have_attributes(attributes)
|
86
84
|
json_response["total_count"].should == 3
|
87
85
|
json_response["current_page"].should == 2
|
@@ -167,7 +165,7 @@ module Spree
|
|
167
165
|
it "can delete a variant" do
|
168
166
|
api_delete :destroy, :id => variant.to_param
|
169
167
|
response.status.should == 204
|
170
|
-
lambda { variant.
|
168
|
+
lambda { Spree::Variant.find(variant.id) }.should raise_error(ActiveRecord::RecordNotFound)
|
171
169
|
end
|
172
170
|
end
|
173
171
|
|
data/spec/spec_helper.rb
CHANGED
@@ -16,6 +16,8 @@ ENV["RAILS_ENV"] ||= 'test'
|
|
16
16
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
17
17
|
require 'rspec/rails'
|
18
18
|
require 'rspec/autorun'
|
19
|
+
require 'database_cleaner'
|
20
|
+
require 'ffaker'
|
19
21
|
|
20
22
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
21
23
|
# in spec/support/ and its subdirectories.
|
@@ -28,7 +30,7 @@ require 'spree/api/testing_support/helpers'
|
|
28
30
|
require 'spree/api/testing_support/setup'
|
29
31
|
|
30
32
|
RSpec.configure do |config|
|
31
|
-
config.
|
33
|
+
config.backtrace_exclusion_patterns = [/gems\/activesupport/, /gems\/actionpack/, /gems\/rspec/]
|
32
34
|
config.color = true
|
33
35
|
|
34
36
|
config.include FactoryGirl::Syntax::Methods
|
@@ -36,9 +38,28 @@ RSpec.configure do |config|
|
|
36
38
|
config.extend Spree::Api::TestingSupport::Setup, :type => :controller
|
37
39
|
config.include Spree::TestingSupport::Preferences, :type => :controller
|
38
40
|
|
41
|
+
config.fail_fast = ENV['FAIL_FAST'] || false
|
42
|
+
|
39
43
|
config.before do
|
40
44
|
Spree::Api::Config[:requires_authentication] = true
|
41
45
|
end
|
42
46
|
|
43
|
-
|
47
|
+
# Using truncation to prevent Ruby 1.9.3 specific error:
|
48
|
+
# SQLite3::SQLException: cannot start a transaction within a transaction: begin transaction
|
49
|
+
# http://stackoverflow.com/questions/12220901/sqlite3sqlexception-when-using-database-cleaner-with-rails-spork-rspec
|
50
|
+
unless RUBY_VERSION >= '2.0.0'
|
51
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
52
|
+
# examples within a transaction, comment the following line or assign false
|
53
|
+
# instead of true.
|
54
|
+
config.use_transactional_fixtures = false
|
55
|
+
|
56
|
+
config.before do
|
57
|
+
DatabaseCleaner.strategy = :truncation
|
58
|
+
DatabaseCleaner.start
|
59
|
+
end
|
60
|
+
|
61
|
+
config.after do
|
62
|
+
DatabaseCleaner.clean
|
63
|
+
end
|
64
|
+
end
|
44
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Bigg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.0.
|
19
|
+
version: 2.0.4
|
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.0.
|
26
|
+
version: 2.0.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rabl
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|