spree_api 1.2.2 → 1.2.3
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.
- data/app/controllers/spree/api/v1/base_controller.rb +6 -0
- data/app/controllers/spree/api/v1/inventory_units_controller.rb +50 -0
- data/app/controllers/spree/api/v1/product_properties_controller.rb +2 -2
- data/app/controllers/spree/api/v1/shipments_controller.rb +5 -1
- data/app/helpers/spree/api/api_helpers.rb +5 -0
- data/app/views/spree/api/v1/inventory_units/show.rabl +2 -0
- data/app/views/spree/api/v1/shipments/cannot_ready_shipment.rabl +2 -0
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +1 -0
- data/spec/controllers/spree/api/v1/base_controller_spec.rb +7 -0
- data/spec/controllers/spree/api/v1/inventory_units_controller_spec.rb +46 -0
- data/spec/controllers/spree/api/v1/payments_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/v1/return_authorizations_controller_spec.rb +17 -17
- data/spec/controllers/spree/api/v1/shipments_controller_spec.rb +8 -1
- metadata +34 -14
@@ -10,6 +10,7 @@ module Spree
|
|
10
10
|
before_filter :check_for_api_key, :if => :requires_authentication?
|
11
11
|
before_filter :authenticate_user
|
12
12
|
|
13
|
+
rescue_from Exception, :with => :error_during_processing
|
13
14
|
rescue_from CanCan::AccessDenied, :with => :unauthorized
|
14
15
|
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
|
15
16
|
|
@@ -63,6 +64,11 @@ module Spree
|
|
63
64
|
render "spree/api/v1/errors/not_found", :status => 404 and return
|
64
65
|
end
|
65
66
|
|
67
|
+
def error_during_processing(exception)
|
68
|
+
render :text => { :exception => exception.message }.to_json,
|
69
|
+
:status => 422 and return
|
70
|
+
end
|
71
|
+
|
66
72
|
def current_ability
|
67
73
|
Spree::Ability.new(current_api_user)
|
68
74
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V1
|
4
|
+
class InventoryUnitsController < Spree::Api::V1::BaseController
|
5
|
+
before_filter :prepare_event, :only => :update
|
6
|
+
|
7
|
+
def show
|
8
|
+
@inventory_unit = inventory_unit
|
9
|
+
end
|
10
|
+
|
11
|
+
def update
|
12
|
+
authorize! :update, Order
|
13
|
+
|
14
|
+
inventory_unit.transaction do
|
15
|
+
if inventory_unit.update_attributes(params[:inventory_unit])
|
16
|
+
fire
|
17
|
+
render :show, :status => 200
|
18
|
+
else
|
19
|
+
invalid_resource!(inventory_unit)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def inventory_unit
|
27
|
+
@inventory_unit ||= InventoryUnit.find(params[:id])
|
28
|
+
end
|
29
|
+
|
30
|
+
def prepare_event
|
31
|
+
return unless @event = params[:fire]
|
32
|
+
|
33
|
+
can_event = "can_#{@event}?"
|
34
|
+
|
35
|
+
unless inventory_unit.respond_to?(can_event) &&
|
36
|
+
inventory_unit.send(can_event)
|
37
|
+
render :text => { exception: "cannot transition to #{@event}" }.to_json,
|
38
|
+
:status => 200
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def fire
|
44
|
+
inventory_unit.send("#{@event}!") if @event
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -8,7 +8,11 @@ module Spree
|
|
8
8
|
def ready
|
9
9
|
authorize! :read, Shipment
|
10
10
|
unless @shipment.ready?
|
11
|
-
@shipment.
|
11
|
+
if @shipment.can_ready?
|
12
|
+
@shipment.ready!
|
13
|
+
else
|
14
|
+
render "spree/api/v1/shipments/cannot_ready_shipment", :status => 422 and return
|
15
|
+
end
|
12
16
|
end
|
13
17
|
render :show
|
14
18
|
end
|
@@ -64,6 +64,11 @@ module Spree
|
|
64
64
|
[:id, :name, :permalink, :position, :parent_id, :taxonomy_id]
|
65
65
|
end
|
66
66
|
|
67
|
+
def inventory_unit_attributes
|
68
|
+
[:id, :lock_version, :state, :variant_id, :order_id,
|
69
|
+
:shipment_id, :return_authorization_id]
|
70
|
+
end
|
71
|
+
|
67
72
|
def return_authorization_attributes
|
68
73
|
[:id, :number, :state, :amount, :order_id, :reason, :created_at, :updated_at]
|
69
74
|
end
|
data/config/locales/en.yml
CHANGED
data/config/routes.rb
CHANGED
@@ -28,6 +28,13 @@ describe Spree::Api::V1::BaseController do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
it 'handles exceptions' do
|
32
|
+
subject.should_receive(:authenticate_user).and_return(true)
|
33
|
+
subject.should_receive(:index).and_raise(Exception.new("no joy"))
|
34
|
+
get :index, :token => "fake_key"
|
35
|
+
json_response.should == { "exception" => "no joy" }
|
36
|
+
end
|
37
|
+
|
31
38
|
it "maps symantec keys to nested_attributes keys" do
|
32
39
|
klass = stub(:nested_attributes_options => { :line_items => {},
|
33
40
|
:bill_address => {} })
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
describe Api::V1::InventoryUnitsController do
|
5
|
+
render_views
|
6
|
+
|
7
|
+
before do
|
8
|
+
stub_authentication!
|
9
|
+
@inventory_unit = create(:inventory_unit)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "gets an inventory unit" do
|
13
|
+
api_get :show, :id => @inventory_unit.id
|
14
|
+
json_response['inventory_unit']['state'].should eq @inventory_unit.state
|
15
|
+
end
|
16
|
+
|
17
|
+
it "updates an inventory unit (only shipment is accessable by default)" do
|
18
|
+
api_put :update, :id => @inventory_unit.id,
|
19
|
+
:inventory_unit => { :shipment => nil }
|
20
|
+
json_response['inventory_unit']['shipment_id'].should be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'fires state event' do
|
24
|
+
it 'if supplied with :fire param' do
|
25
|
+
api_put :update, :id => @inventory_unit.id,
|
26
|
+
:fire => 'ship',
|
27
|
+
:inventory_unit => { :shipment => nil }
|
28
|
+
|
29
|
+
json_response['inventory_unit']['state'].should eq 'shipped'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'and returns exception if cannot fire' do
|
33
|
+
api_put :update, :id => @inventory_unit.id,
|
34
|
+
:fire => 'return'
|
35
|
+
json_response['exception'].should match /cannot transition to return/
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'and returns exception bad state' do
|
39
|
+
api_put :update, :id => @inventory_unit.id,
|
40
|
+
:fire => 'bad'
|
41
|
+
json_response['exception'].should match /cannot transition to bad/
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -9,8 +9,8 @@ module Spree
|
|
9
9
|
order.line_items << create(:line_item)
|
10
10
|
order.shipments << create(:shipment, :state => 'shipped')
|
11
11
|
order.finalize!
|
12
|
-
order.shipments.
|
13
|
-
order.
|
12
|
+
order.shipments.update_all(:state => 'shipped')
|
13
|
+
order.inventory_units.update_all(:state => 'shipped')
|
14
14
|
order
|
15
15
|
end
|
16
16
|
|
@@ -62,18 +62,18 @@ module Spree
|
|
62
62
|
sign_in_as_admin!
|
63
63
|
|
64
64
|
it "can show return authorization" do
|
65
|
-
|
65
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
66
66
|
return_authorization = order.return_authorizations.first
|
67
|
-
api_get :show, :order_id => order.
|
67
|
+
api_get :show, :order_id => order.number, :id => return_authorization.id
|
68
68
|
response.status.should == 200
|
69
69
|
json_response.should have_attributes(attributes)
|
70
70
|
json_response["return_authorization"]["state"].should_not be_blank
|
71
71
|
end
|
72
72
|
|
73
73
|
it "can get a list of return authorizations" do
|
74
|
-
|
75
|
-
|
76
|
-
api_get :index, { :order_id => order.
|
74
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
75
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
76
|
+
api_get :index, { :order_id => order.number }
|
77
77
|
response.status.should == 200
|
78
78
|
return_authorizations = json_response["return_authorizations"]
|
79
79
|
return_authorizations.first.should have_attributes(attributes)
|
@@ -81,16 +81,16 @@ module Spree
|
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'can control the page size through a parameter' do
|
84
|
-
|
85
|
-
|
86
|
-
api_get :index, :order_id => order.
|
84
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
85
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
86
|
+
api_get :index, :order_id => order.number, :per_page => 1
|
87
87
|
json_response['count'].should == 1
|
88
88
|
json_response['current_page'].should == 1
|
89
89
|
json_response['pages'].should == 2
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'can query the results through a paramter' do
|
93
|
-
|
93
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
94
94
|
expected_result = create(:return_authorization, :reason => 'damaged')
|
95
95
|
order.return_authorizations << expected_result
|
96
96
|
api_get :index, :q => { :reason_cont => 'damage' }
|
@@ -106,7 +106,7 @@ module Spree
|
|
106
106
|
end
|
107
107
|
|
108
108
|
it "can update a return authorization on the order" do
|
109
|
-
|
109
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
110
110
|
return_authorization = order.return_authorizations.first
|
111
111
|
api_put :update, :id => return_authorization.id, :return_authorization => { :amount => 19.99 }
|
112
112
|
response.status.should == 200
|
@@ -114,7 +114,7 @@ module Spree
|
|
114
114
|
end
|
115
115
|
|
116
116
|
it "can delete a return authorization on the order" do
|
117
|
-
|
117
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
118
118
|
return_authorization = order.return_authorizations.first
|
119
119
|
api_delete :destroy, :id => return_authorization.id
|
120
120
|
response.status.should == 204
|
@@ -122,7 +122,7 @@ module Spree
|
|
122
122
|
end
|
123
123
|
|
124
124
|
it "can add a new return authorization to an existing order" do
|
125
|
-
api_post :create, :return_autorization => { :order_id => order.
|
125
|
+
api_post :create, :return_autorization => { :order_id => order.number, :amount => 14.22, :reason => "Defective" }
|
126
126
|
response.status.should == 201
|
127
127
|
json_response.should have_attributes(attributes)
|
128
128
|
json_response["return_authorization"]["state"].should_not be_blank
|
@@ -131,12 +131,12 @@ module Spree
|
|
131
131
|
|
132
132
|
context "as just another user" do
|
133
133
|
it "cannot add a return authorization to the order" do
|
134
|
-
api_post :create, :return_autorization => { :order_id => order.
|
134
|
+
api_post :create, :return_autorization => { :order_id => order.number, :amount => 14.22, :reason => "Defective" }
|
135
135
|
assert_unauthorized!
|
136
136
|
end
|
137
137
|
|
138
138
|
it "cannot update a return authorization on the order" do
|
139
|
-
|
139
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
140
140
|
return_authorization = order.return_authorizations.first
|
141
141
|
api_put :update, :id => return_authorization.id, :return_authorization => { :amount => 19.99 }
|
142
142
|
assert_unauthorized!
|
@@ -144,7 +144,7 @@ module Spree
|
|
144
144
|
end
|
145
145
|
|
146
146
|
it "cannot delete a return authorization on the order" do
|
147
|
-
|
147
|
+
FactoryGirl.create(:return_authorization, :order => order)
|
148
148
|
return_authorization = order.return_authorizations.first
|
149
149
|
api_delete :destroy, :id => return_authorization.id
|
150
150
|
assert_unauthorized!
|
@@ -6,7 +6,6 @@ describe Spree::Api::V1::ShipmentsController do
|
|
6
6
|
let!(:attributes) { [:id, :tracking, :number, :cost, :shipped_at] }
|
7
7
|
|
8
8
|
before do
|
9
|
-
Spree::Order.any_instance.stub(:paid? => true, :complete? => true)
|
10
9
|
stub_authentication!
|
11
10
|
end
|
12
11
|
|
@@ -28,14 +27,22 @@ describe Spree::Api::V1::ShipmentsController do
|
|
28
27
|
sign_in_as_admin!
|
29
28
|
|
30
29
|
it "can make a shipment ready" do
|
30
|
+
Spree::Order.any_instance.stub(:paid? => true, :complete? => true)
|
31
31
|
api_put :ready
|
32
32
|
json_response.should have_attributes(attributes)
|
33
33
|
json_response["shipment"]["state"].should == "ready"
|
34
34
|
shipment.reload.state.should == "ready"
|
35
35
|
end
|
36
36
|
|
37
|
+
it "cannot make a shipment ready if the order is unpaid" do
|
38
|
+
Spree::Order.any_instance.stub(:paid? => false)
|
39
|
+
api_put :ready
|
40
|
+
json_response["error"].should == "Cannot ready shipment."
|
41
|
+
end
|
42
|
+
|
37
43
|
context "can transition a shipment from ready to ship" do
|
38
44
|
before do
|
45
|
+
Spree::Order.any_instance.stub(:paid? => true, :complete? => true)
|
39
46
|
shipment.update!(shipment.order)
|
40
47
|
shipment.state.should == "ready"
|
41
48
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,33 +9,43 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spree_core
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- - =
|
19
|
+
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.2.
|
21
|
+
version: 1.2.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.3
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec-rails
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
|
-
- - =
|
35
|
+
- - '='
|
31
36
|
- !ruby/object:Gem::Version
|
32
37
|
version: 2.9.0
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.9.0
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: database_cleaner
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,12 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
description: Spree's API
|
48
63
|
email:
|
49
64
|
- ryan@spreecommerce.com
|
@@ -59,6 +74,7 @@ files:
|
|
59
74
|
- app/controllers/spree/api/v1/base_controller.rb
|
60
75
|
- app/controllers/spree/api/v1/countries_controller.rb
|
61
76
|
- app/controllers/spree/api/v1/images_controller.rb
|
77
|
+
- app/controllers/spree/api/v1/inventory_units_controller.rb
|
62
78
|
- app/controllers/spree/api/v1/line_items_controller.rb
|
63
79
|
- app/controllers/spree/api/v1/orders_controller.rb
|
64
80
|
- app/controllers/spree/api/v1/payments_controller.rb
|
@@ -88,6 +104,7 @@ files:
|
|
88
104
|
- app/views/spree/api/v1/errors/not_found.rabl
|
89
105
|
- app/views/spree/api/v1/errors/unauthorized.rabl
|
90
106
|
- app/views/spree/api/v1/images/show.rabl
|
107
|
+
- app/views/spree/api/v1/inventory_units/show.rabl
|
91
108
|
- app/views/spree/api/v1/line_items/new.rabl
|
92
109
|
- app/views/spree/api/v1/line_items/show.rabl
|
93
110
|
- app/views/spree/api/v1/orders/address.rabl
|
@@ -114,6 +131,7 @@ files:
|
|
114
131
|
- app/views/spree/api/v1/return_authorizations/index.rabl
|
115
132
|
- app/views/spree/api/v1/return_authorizations/new.rabl
|
116
133
|
- app/views/spree/api/v1/return_authorizations/show.rabl
|
134
|
+
- app/views/spree/api/v1/shipments/cannot_ready_shipment.rabl
|
117
135
|
- app/views/spree/api/v1/shipments/show.rabl
|
118
136
|
- app/views/spree/api/v1/taxonomies/index.rabl
|
119
137
|
- app/views/spree/api/v1/taxonomies/nested.rabl
|
@@ -147,6 +165,7 @@ files:
|
|
147
165
|
- spec/controllers/spree/api/v1/base_controller_spec.rb
|
148
166
|
- spec/controllers/spree/api/v1/countries_controller_spec.rb
|
149
167
|
- spec/controllers/spree/api/v1/images_controller_spec.rb
|
168
|
+
- spec/controllers/spree/api/v1/inventory_units_controller_spec.rb
|
150
169
|
- spec/controllers/spree/api/v1/line_items_controller_spec.rb
|
151
170
|
- spec/controllers/spree/api/v1/orders_controller_spec.rb
|
152
171
|
- spec/controllers/spree/api/v1/payments_controller_spec.rb
|
@@ -182,7 +201,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
201
|
version: '0'
|
183
202
|
segments:
|
184
203
|
- 0
|
185
|
-
hash:
|
204
|
+
hash: 4196845361076740967
|
186
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
206
|
none: false
|
188
207
|
requirements:
|
@@ -191,10 +210,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
210
|
version: '0'
|
192
211
|
segments:
|
193
212
|
- 0
|
194
|
-
hash:
|
213
|
+
hash: 4196845361076740967
|
195
214
|
requirements: []
|
196
215
|
rubyforge_project:
|
197
|
-
rubygems_version: 1.8.
|
216
|
+
rubygems_version: 1.8.23
|
198
217
|
signing_key:
|
199
218
|
specification_version: 3
|
200
219
|
summary: Spree's API
|
@@ -203,6 +222,7 @@ test_files:
|
|
203
222
|
- spec/controllers/spree/api/v1/base_controller_spec.rb
|
204
223
|
- spec/controllers/spree/api/v1/countries_controller_spec.rb
|
205
224
|
- spec/controllers/spree/api/v1/images_controller_spec.rb
|
225
|
+
- spec/controllers/spree/api/v1/inventory_units_controller_spec.rb
|
206
226
|
- spec/controllers/spree/api/v1/line_items_controller_spec.rb
|
207
227
|
- spec/controllers/spree/api/v1/orders_controller_spec.rb
|
208
228
|
- spec/controllers/spree/api/v1/payments_controller_spec.rb
|