solidus_api 1.2.3 → 1.3.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_api might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Rakefile +1 -1
- data/app/controllers/spree/api/addresses_controller.rb +3 -2
- data/app/controllers/spree/api/base_controller.rb +10 -15
- data/app/controllers/spree/api/checkouts_controller.rb +56 -55
- data/app/controllers/spree/api/classifications_controller.rb +4 -4
- data/app/controllers/spree/api/config_controller.rb +6 -1
- data/app/controllers/spree/api/credit_cards_controller.rb +11 -11
- data/app/controllers/spree/api/images_controller.rb +13 -13
- data/app/controllers/spree/api/inventory_units_controller.rb +4 -4
- data/app/controllers/spree/api/line_items_controller.rb +27 -23
- data/app/controllers/spree/api/option_types_controller.rb +6 -5
- data/app/controllers/spree/api/option_values_controller.rb +12 -12
- data/app/controllers/spree/api/orders_controller.rb +6 -17
- data/app/controllers/spree/api/payments_controller.rb +15 -17
- data/app/controllers/spree/api/product_properties_controller.rb +13 -14
- data/app/controllers/spree/api/products_controller.rb +31 -28
- data/app/controllers/spree/api/promotions_controller.rb +9 -8
- data/app/controllers/spree/api/properties_controller.rb +9 -10
- data/app/controllers/spree/api/resource_controller.rb +9 -1
- data/app/controllers/spree/api/shipments_controller.rb +18 -18
- data/app/controllers/spree/api/states_controller.rb +8 -7
- data/app/controllers/spree/api/stock_items_controller.rb +2 -1
- data/app/controllers/spree/api/stock_locations_controller.rb +1 -1
- data/app/controllers/spree/api/stores_controller.rb +0 -1
- data/app/controllers/spree/api/taxonomies_controller.rb +7 -5
- data/app/controllers/spree/api/taxons_controller.rb +20 -19
- data/app/controllers/spree/api/users_controller.rb +1 -4
- data/app/controllers/spree/api/variants_controller.rb +19 -18
- data/app/controllers/spree/api/zones_controller.rb +3 -4
- data/app/helpers/spree/api/api_helpers.rb +7 -6
- data/app/models/spree/api_configuration.rb +1 -1
- data/app/views/spree/api/config/show.v1.rabl +2 -1
- data/app/views/spree/api/products/show.v1.rabl +1 -1
- data/db/migrate/20100107141738_add_api_key_to_spree_users.rb +1 -1
- data/db/migrate/20120411123334_resize_api_key_field.rb +1 -1
- data/lib/spree/api/engine.rb +8 -8
- data/lib/spree/api/responders/rabl_template.rb +1 -1
- data/lib/spree/api/testing_support/caching.rb +4 -4
- data/script/rails +0 -1
- data/solidus_api.gemspec +3 -3
- data/spec/controllers/spree/api/addresses_controller_spec.rb +12 -13
- data/spec/controllers/spree/api/base_controller_spec.rb +10 -11
- data/spec/controllers/spree/api/checkouts_controller_spec.rb +38 -59
- data/spec/controllers/spree/api/config_controller_spec.rb +4 -2
- data/spec/controllers/spree/api/countries_controller_spec.rb +5 -5
- data/spec/controllers/spree/api/credit_cards_controller_spec.rb +5 -5
- data/spec/controllers/spree/api/images_controller_spec.rb +20 -18
- data/spec/controllers/spree/api/inventory_units_controller_spec.rb +11 -11
- data/spec/controllers/spree/api/line_items_controller_spec.rb +20 -19
- data/spec/controllers/spree/api/option_types_controller_spec.rb +23 -24
- data/spec/controllers/spree/api/option_values_controller_spec.rb +28 -29
- data/spec/controllers/spree/api/orders_controller_spec.rb +157 -179
- data/spec/controllers/spree/api/payments_controller_spec.rb +35 -45
- data/spec/controllers/spree/api/product_properties_controller_spec.rb +14 -15
- data/spec/controllers/spree/api/products_controller_spec.rb +64 -70
- data/spec/controllers/spree/api/promotion_application_spec.rb +4 -4
- data/spec/controllers/spree/api/promotions_controller_spec.rb +1 -1
- data/spec/controllers/spree/api/properties_controller_spec.rb +15 -15
- data/spec/controllers/spree/api/resource_controller_spec.rb +31 -2
- data/spec/controllers/spree/api/return_authorizations_controller_spec.rb +31 -31
- data/spec/controllers/spree/api/shipments_controller_spec.rb +6 -8
- data/spec/controllers/spree/api/states_controller_spec.rb +11 -12
- data/spec/controllers/spree/api/stock_items_controller_spec.rb +10 -7
- data/spec/controllers/spree/api/stock_locations_controller_spec.rb +3 -4
- data/spec/controllers/spree/api/stock_movements_controller_spec.rb +2 -3
- data/spec/controllers/spree/api/store_credit_events_controller_spec.rb +0 -2
- data/spec/controllers/spree/api/stores_controller_spec.rb +1 -2
- data/spec/controllers/spree/api/taxonomies_controller_spec.rb +17 -18
- data/spec/controllers/spree/api/taxons_controller_spec.rb +22 -24
- data/spec/controllers/spree/api/unauthenticated_products_controller_spec.rb +1 -2
- data/spec/controllers/spree/api/users_controller_spec.rb +13 -15
- data/spec/controllers/spree/api/variants_controller_spec.rb +42 -37
- data/spec/controllers/spree/api/zones_controller_spec.rb +18 -18
- data/spec/features/checkout_spec.rb +2 -2
- data/spec/models/spree/legacy_user_spec.rb +5 -5
- data/spec/requests/api/address_books_spec.rb +10 -11
- data/spec/requests/rabl_cache_spec.rb +7 -7
- data/spec/requests/ransackable_attributes_spec.rb +5 -7
- data/spec/shared_examples/protect_product_actions.rb +3 -4
- data/spec/spec_helper.rb +8 -4
- data/spec/support/controller_hacks.rb +5 -5
- data/spec/support/have_attributes_matcher.rb +0 -4
- data/spec/test_views/spree/api/widgets/show.v1.rabl +1 -1
- metadata +9 -10
- data/app/models/spree/option_value_decorator.rb +0 -9
@@ -1,15 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Spree
|
4
|
-
describe Spree::Api::PaymentsController, :
|
4
|
+
describe Spree::Api::PaymentsController, type: :controller do
|
5
5
|
render_views
|
6
6
|
let!(:order) { create(:order) }
|
7
|
-
let!(:payment) { create(:payment, :
|
8
|
-
let!(:attributes) {
|
9
|
-
|
10
|
-
|
7
|
+
let!(:payment) { create(:payment, order: order) }
|
8
|
+
let!(:attributes) {
|
9
|
+
[:id, :source_type, :source_id, :amount, :display_amount,
|
10
|
+
:payment_method_id, :state, :avs_response,
|
11
|
+
:created_at, :updated_at]
|
12
|
+
}
|
11
13
|
|
12
|
-
let(:resource_scoping) { { :
|
14
|
+
let(:resource_scoping) { { order_id: order.to_param } }
|
13
15
|
|
14
16
|
before do
|
15
17
|
stub_authentication!
|
@@ -18,7 +20,7 @@ module Spree
|
|
18
20
|
context "as a user" do
|
19
21
|
context "when the order belongs to the user" do
|
20
22
|
before do
|
21
|
-
allow_any_instance_of(Order).to receive_messages :
|
23
|
+
allow_any_instance_of(Order).to receive_messages user: current_api_user
|
22
24
|
end
|
23
25
|
|
24
26
|
it "can view the payments for their order" do
|
@@ -39,27 +41,16 @@ module Spree
|
|
39
41
|
end
|
40
42
|
|
41
43
|
it "can create a new payment" do
|
42
|
-
api_post :create, :
|
44
|
+
api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50 }
|
43
45
|
expect(response.status).to eq(201)
|
44
46
|
expect(json_response).to have_attributes(attributes)
|
45
47
|
end
|
46
|
-
|
47
|
-
context "disallowed payment method" do
|
48
|
-
it "does not create a new payment" do
|
49
|
-
PaymentMethod.first.update!(display_on: "back_end")
|
50
|
-
|
51
|
-
expect {
|
52
|
-
api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50 }
|
53
|
-
}.not_to change { Spree::Payment.count }
|
54
|
-
expect(response.status).to eq(404)
|
55
|
-
end
|
56
|
-
end
|
57
48
|
end
|
58
49
|
|
59
50
|
context "payment source is required" do
|
60
51
|
context "no source is provided" do
|
61
52
|
it "returns errors" do
|
62
|
-
api_post :create, :
|
53
|
+
api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50 }
|
63
54
|
expect(response.status).to eq(422)
|
64
55
|
expect(json_response['error']).to eq("Invalid resource. Please fix errors and try again.")
|
65
56
|
expect(json_response['errors']['source']).to eq(["can't be blank"])
|
@@ -68,7 +59,7 @@ module Spree
|
|
68
59
|
|
69
60
|
context "source is provided" do
|
70
61
|
it "can create a new payment" do
|
71
|
-
api_post :create, :
|
62
|
+
api_post :create, payment: { payment_method_id: PaymentMethod.first.id, amount: 50, source_attributes: { gateway_payment_profile_id: 1 } }
|
72
63
|
expect(response.status).to eq(201)
|
73
64
|
expect(json_response).to have_attributes(attributes)
|
74
65
|
end
|
@@ -76,33 +67,33 @@ module Spree
|
|
76
67
|
end
|
77
68
|
|
78
69
|
it "can view a pre-existing payment's details" do
|
79
|
-
api_get :show, :
|
70
|
+
api_get :show, id: payment.to_param
|
80
71
|
expect(json_response).to have_attributes(attributes)
|
81
72
|
end
|
82
73
|
|
83
74
|
it "cannot update a payment" do
|
84
|
-
api_put :update, :
|
75
|
+
api_put :update, id: payment.to_param, payment: { amount: 2.01 }
|
85
76
|
assert_unauthorized!
|
86
77
|
end
|
87
78
|
|
88
79
|
it "cannot authorize a payment" do
|
89
|
-
api_put :authorize, :
|
80
|
+
api_put :authorize, id: payment.to_param
|
90
81
|
assert_unauthorized!
|
91
82
|
end
|
92
83
|
end
|
93
84
|
|
94
85
|
context "when the order does not belong to the user" do
|
95
86
|
before do
|
96
|
-
allow_any_instance_of(Order).to receive_messages :
|
87
|
+
allow_any_instance_of(Order).to receive_messages user: stub_model(LegacyUser)
|
97
88
|
end
|
98
89
|
|
99
90
|
it "cannot view payments for somebody else's order" do
|
100
|
-
api_get :index, :
|
91
|
+
api_get :index, order_id: order.to_param
|
101
92
|
assert_unauthorized!
|
102
93
|
end
|
103
94
|
|
104
95
|
it "can view the payments for an order given the order token" do
|
105
|
-
api_get :index, :
|
96
|
+
api_get :index, order_id: order.to_param, order_token: order.guest_token
|
106
97
|
expect(json_response["payments"].first).to have_attributes(attributes)
|
107
98
|
end
|
108
99
|
end
|
@@ -118,7 +109,7 @@ module Spree
|
|
118
109
|
end
|
119
110
|
|
120
111
|
context "multiple payments" do
|
121
|
-
before { @payment = create(:payment, :
|
112
|
+
before { @payment = create(:payment, order: order) }
|
122
113
|
|
123
114
|
it "can view all payments on an order" do
|
124
115
|
api_get :index
|
@@ -126,7 +117,7 @@ module Spree
|
|
126
117
|
end
|
127
118
|
|
128
119
|
it 'can control the page size through a parameter' do
|
129
|
-
api_get :index, :
|
120
|
+
api_get :index, per_page: 1
|
130
121
|
expect(json_response['count']).to eq(1)
|
131
122
|
expect(json_response['current_page']).to eq(1)
|
132
123
|
expect(json_response['pages']).to eq(2)
|
@@ -136,23 +127,23 @@ module Spree
|
|
136
127
|
context "for a given payment" do
|
137
128
|
context "updating" do
|
138
129
|
it "can update" do
|
139
|
-
payment.update_attributes(:
|
140
|
-
api_put :update, :
|
130
|
+
payment.update_attributes(state: 'pending')
|
131
|
+
api_put :update, id: payment.to_param, payment: { amount: 2.01 }
|
141
132
|
expect(response.status).to eq(200)
|
142
133
|
expect(payment.reload.amount).to eq(2.01)
|
143
134
|
end
|
144
135
|
|
145
136
|
context "update fails" do
|
146
137
|
it "returns a 422 status when the amount is invalid" do
|
147
|
-
payment.update_attributes(:
|
148
|
-
api_put :update, :
|
138
|
+
payment.update_attributes(state: 'pending')
|
139
|
+
api_put :update, id: payment.to_param, payment: { amount: 'invalid' }
|
149
140
|
expect(response.status).to eq(422)
|
150
141
|
expect(json_response["error"]).to eq("Invalid resource. Please fix errors and try again.")
|
151
142
|
end
|
152
143
|
|
153
144
|
it "returns a 403 status when the payment is not pending" do
|
154
|
-
payment.update_attributes(:
|
155
|
-
api_put :update, :
|
145
|
+
payment.update_attributes(state: 'completed')
|
146
|
+
api_put :update, id: payment.to_param, payment: { amount: 2.01 }
|
156
147
|
expect(response.status).to eq(403)
|
157
148
|
expect(json_response["error"]).to eq("This payment cannot be updated because it is completed.")
|
158
149
|
end
|
@@ -161,16 +152,16 @@ module Spree
|
|
161
152
|
|
162
153
|
context "authorizing" do
|
163
154
|
it "can authorize" do
|
164
|
-
api_put :authorize, :
|
155
|
+
api_put :authorize, id: payment.to_param
|
165
156
|
expect(response.status).to eq(200)
|
166
157
|
expect(payment.reload.state).to eq("pending")
|
167
158
|
end
|
168
159
|
|
169
160
|
context "authorization fails" do
|
170
161
|
before do
|
171
|
-
fake_response = double(
|
162
|
+
fake_response = double(success?: false, to_s: "Could not authorize card")
|
172
163
|
expect_any_instance_of(Spree::Gateway::Bogus).to receive(:authorize).and_return(fake_response)
|
173
|
-
api_put :authorize, :
|
164
|
+
api_put :authorize, id: payment.to_param
|
174
165
|
end
|
175
166
|
|
176
167
|
it "returns a 422 status" do
|
@@ -188,19 +179,19 @@ module Spree
|
|
188
179
|
|
189
180
|
context "capturing" do
|
190
181
|
it "can capture" do
|
191
|
-
api_put :capture, :
|
182
|
+
api_put :capture, id: payment.to_param
|
192
183
|
expect(response.status).to eq(200)
|
193
184
|
expect(payment.reload.state).to eq("completed")
|
194
185
|
end
|
195
186
|
|
196
187
|
context "capturing fails" do
|
197
188
|
before do
|
198
|
-
fake_response = double(
|
189
|
+
fake_response = double(success?: false, to_s: "Insufficient funds")
|
199
190
|
expect_any_instance_of(Spree::Gateway::Bogus).to receive(:capture).and_return(fake_response)
|
200
191
|
end
|
201
192
|
|
202
193
|
it "returns a 422 status" do
|
203
|
-
api_put :capture, :
|
194
|
+
api_put :capture, id: payment.to_param
|
204
195
|
expect(response.status).to eq(422)
|
205
196
|
expect(json_response["error"]).to eq "Invalid resource. Please fix errors and try again."
|
206
197
|
expect(json_response["errors"]["base"][0]).to eq "Insufficient funds"
|
@@ -210,19 +201,19 @@ module Spree
|
|
210
201
|
|
211
202
|
context "purchasing" do
|
212
203
|
it "can purchase" do
|
213
|
-
api_put :purchase, :
|
204
|
+
api_put :purchase, id: payment.to_param
|
214
205
|
expect(response.status).to eq(200)
|
215
206
|
expect(payment.reload.state).to eq("completed")
|
216
207
|
end
|
217
208
|
|
218
209
|
context "purchasing fails" do
|
219
210
|
before do
|
220
|
-
fake_response = double(
|
211
|
+
fake_response = double(success?: false, to_s: "Insufficient funds")
|
221
212
|
expect_any_instance_of(Spree::Gateway::Bogus).to receive(:purchase).and_return(fake_response)
|
222
213
|
end
|
223
214
|
|
224
215
|
it "returns a 422 status" do
|
225
|
-
api_put :purchase, :
|
216
|
+
api_put :purchase, id: payment.to_param
|
226
217
|
expect(response.status).to eq(422)
|
227
218
|
expect(json_response["error"]).to eq "Invalid resource. Please fix errors and try again."
|
228
219
|
expect(json_response["errors"]["base"][0]).to eq "Insufficient funds"
|
@@ -252,7 +243,6 @@ module Spree
|
|
252
243
|
end
|
253
244
|
end
|
254
245
|
end
|
255
|
-
|
256
246
|
end
|
257
247
|
end
|
258
248
|
end
|
@@ -2,15 +2,15 @@ require 'spec_helper'
|
|
2
2
|
require 'shared_examples/protect_product_actions'
|
3
3
|
|
4
4
|
module Spree
|
5
|
-
describe Spree::Api::ProductPropertiesController, :
|
5
|
+
describe Spree::Api::ProductPropertiesController, type: :controller do
|
6
6
|
render_views
|
7
7
|
|
8
8
|
let!(:product) { create(:product) }
|
9
|
-
let!(:property_1) {product.product_properties.create(:
|
10
|
-
let!(:property_2) {product.product_properties.create(:
|
9
|
+
let!(:property_1) { product.product_properties.create(property_name: "My Property 1", value: "my value 1", position: 0) }
|
10
|
+
let!(:property_2) { product.product_properties.create(property_name: "My Property 2", value: "my value 2", position: 1) }
|
11
11
|
|
12
12
|
let(:attributes) { [:id, :product_id, :property_id, :value, :property_name] }
|
13
|
-
let(:resource_scoping) { { :
|
13
|
+
let(:resource_scoping) { { product_id: product.to_param } }
|
14
14
|
|
15
15
|
before do
|
16
16
|
stub_authentication!
|
@@ -34,7 +34,7 @@ module Spree
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "can control the page size through a parameter" do
|
37
|
-
api_get :index, :
|
37
|
+
api_get :index, per_page: 1
|
38
38
|
expect(json_response['product_properties'].count).to eq(1)
|
39
39
|
expect(json_response['current_page']).to eq(1)
|
40
40
|
expect(json_response['pages']).to eq(2)
|
@@ -43,13 +43,13 @@ module Spree
|
|
43
43
|
it 'can query the results through a parameter' do
|
44
44
|
Spree::ProductProperty.last.update_attribute(:value, 'loose')
|
45
45
|
property = Spree::ProductProperty.last
|
46
|
-
api_get :index, :
|
46
|
+
api_get :index, q: { value_cont: 'loose' }
|
47
47
|
expect(json_response['count']).to eq(1)
|
48
48
|
expect(json_response['product_properties'].first['value']).to eq property.value
|
49
49
|
end
|
50
50
|
|
51
51
|
it "can see a single product_property" do
|
52
|
-
api_get :show, :
|
52
|
+
api_get :show, id: property_1.property_name
|
53
53
|
expect(json_response).to have_attributes(attributes)
|
54
54
|
end
|
55
55
|
|
@@ -60,12 +60,12 @@ module Spree
|
|
60
60
|
end
|
61
61
|
|
62
62
|
it "cannot create a new product property if not an admin" do
|
63
|
-
api_post :create, :
|
63
|
+
api_post :create, product_property: { property_name: "My Property 3" }
|
64
64
|
assert_unauthorized!
|
65
65
|
end
|
66
66
|
|
67
67
|
it "cannot update a product property" do
|
68
|
-
api_put :update, :
|
68
|
+
api_put :update, id: property_1.property_name, product_property: { value: "my value 456" }
|
69
69
|
assert_unauthorized!
|
70
70
|
end
|
71
71
|
|
@@ -80,26 +80,26 @@ module Spree
|
|
80
80
|
|
81
81
|
it "can create a new product property" do
|
82
82
|
expect do
|
83
|
-
api_post :create, :
|
83
|
+
api_post :create, product_property: { property_name: "My Property 3", value: "my value 3" }
|
84
84
|
end.to change(product.product_properties, :count).by(1)
|
85
85
|
expect(json_response).to have_attributes(attributes)
|
86
86
|
expect(response.status).to eq(201)
|
87
87
|
end
|
88
88
|
|
89
89
|
it "can update a product property" do
|
90
|
-
api_put :update, :
|
90
|
+
api_put :update, id: property_1.property_name, product_property: { value: "my value 456" }
|
91
91
|
expect(response.status).to eq(200)
|
92
92
|
end
|
93
93
|
|
94
94
|
it "can delete a product property" do
|
95
|
-
api_delete :destroy, :
|
95
|
+
api_delete :destroy, id: property_1.property_name
|
96
96
|
expect(response.status).to eq(204)
|
97
97
|
expect { property_1.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
101
|
context "with product identified by id" do
|
102
|
-
let(:resource_scoping) { { :
|
102
|
+
let(:resource_scoping) { { product_id: product.id } }
|
103
103
|
it "can see a list of all product properties" do
|
104
104
|
api_get :index
|
105
105
|
expect(json_response["product_properties"].count).to eq 2
|
@@ -107,10 +107,9 @@ module Spree
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it "can see a single product_property by id" do
|
110
|
-
api_get :show, :
|
110
|
+
api_get :show, id: property_1.id
|
111
111
|
expect(json_response).to have_attributes(attributes)
|
112
112
|
end
|
113
113
|
end
|
114
|
-
|
115
114
|
end
|
116
115
|
end
|