solidus_api 1.2.3 → 1.3.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -2,23 +2,25 @@ require 'spec_helper'
|
|
|
2
2
|
require 'spree/testing_support/bar_ability'
|
|
3
3
|
|
|
4
4
|
module Spree
|
|
5
|
-
describe Api::OrdersController, :
|
|
5
|
+
describe Api::OrdersController, type: :controller do
|
|
6
6
|
render_views
|
|
7
7
|
let!(:order) { create(:order) }
|
|
8
8
|
let(:variant) { create(:variant) }
|
|
9
9
|
let(:line_item) { create(:line_item) }
|
|
10
10
|
|
|
11
|
-
let(:attributes) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
let(:attributes) {
|
|
12
|
+
[:number, :item_total, :display_total, :total,
|
|
13
|
+
:state, :adjustment_total,
|
|
14
|
+
:user_id, :created_at, :updated_at,
|
|
15
|
+
:completed_at, :payment_total, :shipment_state,
|
|
16
|
+
:payment_state, :email, :special_instructions,
|
|
17
|
+
:total_quantity, :display_item_total, :currency]
|
|
18
|
+
}
|
|
17
19
|
|
|
18
|
-
let(:address_params) { { :
|
|
20
|
+
let(:address_params) { { country_id: Country.first.id, state_id: State.first.id } }
|
|
19
21
|
|
|
20
22
|
let(:current_api_user) do
|
|
21
|
-
user = Spree.user_class.new(:
|
|
23
|
+
user = Spree.user_class.new(email: "spree@example.com")
|
|
22
24
|
user.generate_spree_api_key!
|
|
23
25
|
user
|
|
24
26
|
end
|
|
@@ -29,62 +31,46 @@ module Spree
|
|
|
29
31
|
|
|
30
32
|
describe "POST create" do
|
|
31
33
|
let(:target_user) { create :user }
|
|
32
|
-
let(:date_override) {
|
|
33
|
-
let(:attributes) { { user_id: target_user.id, created_at: date_override, email: target_user.email } }
|
|
34
|
+
let(:date_override) { 3.days.ago }
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
before do
|
|
37
|
+
allow_any_instance_of(Spree::Ability).to receive(:can?).
|
|
38
|
+
and_return(true)
|
|
39
|
+
|
|
40
|
+
allow_any_instance_of(Spree::Ability).to receive(:can?).
|
|
41
|
+
with(:admin, Spree::Order).
|
|
42
|
+
and_return(can_admin)
|
|
43
|
+
|
|
44
|
+
allow(Spree.user_class).to receive(:find).
|
|
45
|
+
with(target_user.id).
|
|
46
|
+
and_return(target_user)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
subject { api_post :create, order: { user_id: target_user.id, created_at: date_override, email: target_user.email } }
|
|
36
50
|
|
|
37
51
|
context "when the current user cannot administrate the order" do
|
|
38
|
-
|
|
39
|
-
can :create, Spree::Order
|
|
40
|
-
end
|
|
52
|
+
let(:can_admin) { false }
|
|
41
53
|
|
|
42
54
|
it "does not include unpermitted params, or allow overriding the user", focus: true do
|
|
55
|
+
expect(Spree::Core::Importer::Order).to receive(:import).
|
|
56
|
+
once.
|
|
57
|
+
with(current_api_user, { "email" => target_user.email }).
|
|
58
|
+
and_call_original
|
|
43
59
|
subject
|
|
44
|
-
expect(response).to be_success
|
|
45
|
-
order = Spree::Order.last
|
|
46
|
-
expect(order.user).to eq current_api_user
|
|
47
|
-
expect(order.email).to eq target_user.email
|
|
48
60
|
end
|
|
49
61
|
|
|
50
62
|
it { is_expected.to be_success }
|
|
51
|
-
|
|
52
|
-
context 'creating payment' do
|
|
53
|
-
let(:attributes) { super().merge(payments_attributes: [{ payment_method_id: payment_method.id }]) }
|
|
54
|
-
|
|
55
|
-
context "with allowed payment method" do
|
|
56
|
-
let!(:payment_method) { create(:check_payment_method, name: "allowed" ) }
|
|
57
|
-
it { is_expected.to be_success }
|
|
58
|
-
it "creates a payment" do
|
|
59
|
-
expect {
|
|
60
|
-
subject
|
|
61
|
-
}.to change { Spree::Payment.count }.by(1)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
context "with disallowed payment method" do
|
|
66
|
-
let!(:payment_method) { create(:check_payment_method, name: "forbidden", display_on: "back_end") }
|
|
67
|
-
it { is_expected.to be_not_found }
|
|
68
|
-
it "creates no payments" do
|
|
69
|
-
expect {
|
|
70
|
-
subject
|
|
71
|
-
}.not_to change { Spree::Payment.count }
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
63
|
end
|
|
76
64
|
|
|
77
65
|
context "when the current user can administrate the order" do
|
|
78
|
-
|
|
79
|
-
can [:admin, :create], Spree::Order
|
|
80
|
-
end
|
|
66
|
+
let(:can_admin) { true }
|
|
81
67
|
|
|
82
68
|
it "it permits all params and allows overriding the user" do
|
|
69
|
+
expect(Spree::Core::Importer::Order).to receive(:import).
|
|
70
|
+
once.
|
|
71
|
+
with(target_user, { "user_id" => target_user.id, "created_at" => date_override, "email" => target_user.email }).
|
|
72
|
+
and_call_original
|
|
83
73
|
subject
|
|
84
|
-
order = Spree::Order.last
|
|
85
|
-
expect(order.user).to eq target_user
|
|
86
|
-
expect(order.email).to eq target_user.email
|
|
87
|
-
expect(order.created_at).to eq date_override
|
|
88
74
|
end
|
|
89
75
|
|
|
90
76
|
it { is_expected.to be_success }
|
|
@@ -97,72 +83,59 @@ module Spree
|
|
|
97
83
|
let(:can_admin) { false }
|
|
98
84
|
subject { api_put :update, id: order.to_param, order: order_params }
|
|
99
85
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "updates the user's email" do
|
|
106
|
-
expect {
|
|
107
|
-
subject
|
|
108
|
-
}.to change { order.reload.email }.to("foo@foobar.com")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it { is_expected.to be_success }
|
|
112
|
-
|
|
113
|
-
it "does not associate users" do
|
|
114
|
-
expect {
|
|
115
|
-
subject
|
|
116
|
-
}.not_to change { order.reload.user }
|
|
117
|
-
end
|
|
86
|
+
before do
|
|
87
|
+
allow_any_instance_of(Spree::Ability).to receive(:can?).
|
|
88
|
+
and_return(true)
|
|
118
89
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}.to_not change{ order.reload.number }
|
|
123
|
-
end
|
|
90
|
+
allow(Spree::Order).to receive(:find_by!).
|
|
91
|
+
with(number: order.number).
|
|
92
|
+
and_return(order)
|
|
124
93
|
|
|
125
|
-
|
|
126
|
-
|
|
94
|
+
allow(Spree.user_class).to receive(:find).
|
|
95
|
+
with(user.id).
|
|
96
|
+
and_return(user)
|
|
127
97
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
expect {
|
|
133
|
-
subject
|
|
134
|
-
}.to change { Spree::Payment.count }.by(1)
|
|
135
|
-
end
|
|
136
|
-
end
|
|
98
|
+
allow_any_instance_of(Spree::Ability).to receive(:can?).
|
|
99
|
+
with(:admin, Spree::Order).
|
|
100
|
+
and_return(can_admin)
|
|
101
|
+
end
|
|
137
102
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
subject
|
|
144
|
-
}.not_to change { Spree::Payment.count }
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
103
|
+
it "updates the cart contents" do
|
|
104
|
+
expect(order.contents).to receive(:update_cart).
|
|
105
|
+
once.
|
|
106
|
+
with({ "email" => "foo@foobar.com" })
|
|
107
|
+
subject
|
|
148
108
|
end
|
|
149
109
|
|
|
110
|
+
it { is_expected.to be_success }
|
|
111
|
+
|
|
150
112
|
context "when the user can administer the order" do
|
|
151
|
-
|
|
152
|
-
can [:admin, :update], Spree::Order
|
|
153
|
-
end
|
|
113
|
+
let(:can_admin) { true }
|
|
154
114
|
|
|
155
115
|
it "will associate users" do
|
|
156
|
-
expect
|
|
157
|
-
|
|
158
|
-
|
|
116
|
+
expect(order).to receive(:associate_user!).
|
|
117
|
+
once.
|
|
118
|
+
with(user)
|
|
119
|
+
|
|
120
|
+
subject
|
|
159
121
|
end
|
|
160
122
|
|
|
161
123
|
it "updates the otherwise forbidden attributes" do
|
|
162
|
-
expect{subject}.to change{order.reload.number}.
|
|
124
|
+
expect{ subject }.to change{ order.reload.number }.
|
|
163
125
|
to("anothernumber")
|
|
164
126
|
end
|
|
165
127
|
end
|
|
128
|
+
|
|
129
|
+
context "when the user cannot administer the order" do
|
|
130
|
+
it "does not associate users" do
|
|
131
|
+
expect(order).to_not receive(:associate_user!)
|
|
132
|
+
subject
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "does not change forbidden attributes" do
|
|
136
|
+
expect{ subject }.to_not change{ order.reload.number }
|
|
137
|
+
end
|
|
138
|
+
end
|
|
166
139
|
end
|
|
167
140
|
|
|
168
141
|
it "cannot view all orders" do
|
|
@@ -207,7 +180,7 @@ module Spree
|
|
|
207
180
|
|
|
208
181
|
it "can filter the returned results" do
|
|
209
182
|
request.env['SERVER_NAME'] = store.url
|
|
210
|
-
api_get :mine, q: {completed_at_not_null: 1}
|
|
183
|
+
api_get :mine, q: { completed_at_not_null: 1 }
|
|
211
184
|
|
|
212
185
|
expect(response.status).to eq(200)
|
|
213
186
|
expect(json_response["orders"].length).to eq(0)
|
|
@@ -246,8 +219,8 @@ module Spree
|
|
|
246
219
|
end
|
|
247
220
|
|
|
248
221
|
it "can view their own order" do
|
|
249
|
-
allow_any_instance_of(Order).to receive_messages :
|
|
250
|
-
api_get :show, :
|
|
222
|
+
allow_any_instance_of(Order).to receive_messages user: current_api_user
|
|
223
|
+
api_get :show, id: order.to_param
|
|
251
224
|
expect(response.status).to eq(200)
|
|
252
225
|
expect(json_response).to have_attributes(attributes)
|
|
253
226
|
expect(json_response["adjustments"]).to be_empty
|
|
@@ -260,7 +233,7 @@ module Spree
|
|
|
260
233
|
subject { api_get :show, id: order.to_param }
|
|
261
234
|
|
|
262
235
|
before do
|
|
263
|
-
allow_any_instance_of(Order).to receive_messages :
|
|
236
|
+
allow_any_instance_of(Order).to receive_messages user: current_api_user
|
|
264
237
|
end
|
|
265
238
|
|
|
266
239
|
context 'when inventory information is present' do
|
|
@@ -307,33 +280,33 @@ module Spree
|
|
|
307
280
|
end
|
|
308
281
|
|
|
309
282
|
it "orders contain the basic checkout steps" do
|
|
310
|
-
allow_any_instance_of(Order).to receive_messages :
|
|
311
|
-
api_get :show, :
|
|
283
|
+
allow_any_instance_of(Order).to receive_messages user: current_api_user
|
|
284
|
+
api_get :show, id: order.to_param
|
|
312
285
|
expect(response.status).to eq(200)
|
|
313
286
|
expect(json_response["checkout_steps"]).to eq(%w[address delivery confirm complete])
|
|
314
287
|
end
|
|
315
288
|
|
|
316
289
|
# Regression test for https://github.com/spree/spree/issues/1992
|
|
317
290
|
it "can view an order not in a standard state" do
|
|
318
|
-
allow_any_instance_of(Order).to receive_messages :
|
|
291
|
+
allow_any_instance_of(Order).to receive_messages user: current_api_user
|
|
319
292
|
order.update_column(:state, 'shipped')
|
|
320
|
-
api_get :show, :
|
|
293
|
+
api_get :show, id: order.to_param
|
|
321
294
|
end
|
|
322
295
|
|
|
323
296
|
it "can not view someone else's order" do
|
|
324
|
-
allow_any_instance_of(Order).to receive_messages :
|
|
325
|
-
api_get :show, :
|
|
297
|
+
allow_any_instance_of(Order).to receive_messages user: stub_model(Spree::LegacyUser)
|
|
298
|
+
api_get :show, id: order.to_param
|
|
326
299
|
assert_unauthorized!
|
|
327
300
|
end
|
|
328
301
|
|
|
329
302
|
it "can view an order if the token is known" do
|
|
330
|
-
api_get :show, :
|
|
303
|
+
api_get :show, id: order.to_param, order_token: order.guest_token
|
|
331
304
|
expect(response.status).to eq(200)
|
|
332
305
|
end
|
|
333
306
|
|
|
334
307
|
it "can view an order if the token is passed in header" do
|
|
335
308
|
request.headers["X-Spree-Order-Token"] = order.guest_token
|
|
336
|
-
api_get :show, :
|
|
309
|
+
api_get :show, id: order.to_param
|
|
337
310
|
expect(response.status).to eq(200)
|
|
338
311
|
end
|
|
339
312
|
|
|
@@ -344,7 +317,7 @@ module Spree
|
|
|
344
317
|
it "can view an order" do
|
|
345
318
|
user = build(:user, spree_roles: [Spree::Role.new(name: 'bar')])
|
|
346
319
|
allow(Spree.user_class).to receive_messages find_by: user
|
|
347
|
-
api_get :show, :
|
|
320
|
+
api_get :show, id: order.to_param
|
|
348
321
|
expect(response.status).to eq(200)
|
|
349
322
|
end
|
|
350
323
|
end
|
|
@@ -352,12 +325,12 @@ module Spree
|
|
|
352
325
|
it "cannot cancel an order that doesn't belong to them" do
|
|
353
326
|
order.update_attribute(:completed_at, Time.current)
|
|
354
327
|
order.update_attribute(:shipment_state, "ready")
|
|
355
|
-
api_put :cancel, :
|
|
328
|
+
api_put :cancel, id: order.to_param
|
|
356
329
|
assert_unauthorized!
|
|
357
330
|
end
|
|
358
331
|
|
|
359
332
|
it "can create an order" do
|
|
360
|
-
api_post :create, :
|
|
333
|
+
api_post :create, order: { line_items: { "0" => { variant_id: variant.to_param, quantity: 5 } } }
|
|
361
334
|
expect(response.status).to eq(201)
|
|
362
335
|
|
|
363
336
|
order = Order.last
|
|
@@ -374,20 +347,23 @@ module Spree
|
|
|
374
347
|
end
|
|
375
348
|
|
|
376
349
|
it "assigns email when creating a new order" do
|
|
377
|
-
api_post :create, :
|
|
350
|
+
api_post :create, order: { email: "guest@spreecommerce.com" }
|
|
378
351
|
expect(json_response['email']).not_to eq controller.current_api_user
|
|
379
352
|
expect(json_response['email']).to eq "guest@spreecommerce.com"
|
|
380
353
|
end
|
|
381
354
|
|
|
382
355
|
# Regression test for https://github.com/spree/spree/issues/3404
|
|
383
356
|
it "can specify additional parameters for a line item" do
|
|
384
|
-
|
|
357
|
+
expect(Order).to receive(:create!).and_return(order = Spree::Order.new)
|
|
358
|
+
allow(order).to receive(:associate_user!)
|
|
359
|
+
allow(order).to receive_message_chain(:contents, :add).and_return(line_item = double('LineItem'))
|
|
360
|
+
expect(line_item).to receive(:update_attributes!).with("special" => true)
|
|
385
361
|
|
|
386
362
|
allow(controller).to receive_messages(permitted_line_item_attributes: [:id, :variant_id, :quantity, :special])
|
|
387
|
-
api_post :create, :
|
|
388
|
-
:
|
|
363
|
+
api_post :create, order: {
|
|
364
|
+
line_items: {
|
|
389
365
|
"0" => {
|
|
390
|
-
variant_id: variant.to_param, quantity: 5, special:
|
|
366
|
+
variant_id: variant.to_param, quantity: 5, special: true
|
|
391
367
|
}
|
|
392
368
|
}
|
|
393
369
|
}
|
|
@@ -395,10 +371,10 @@ module Spree
|
|
|
395
371
|
end
|
|
396
372
|
|
|
397
373
|
it "cannot arbitrarily set the line items price" do
|
|
398
|
-
api_post :create, :
|
|
399
|
-
:
|
|
374
|
+
api_post :create, order: {
|
|
375
|
+
line_items: {
|
|
400
376
|
"0" => {
|
|
401
|
-
:
|
|
377
|
+
price: 33.0, variant_id: variant.to_param, quantity: 5
|
|
402
378
|
}
|
|
403
379
|
}
|
|
404
380
|
}
|
|
@@ -411,7 +387,7 @@ module Spree
|
|
|
411
387
|
let!(:current_api_user) { create :admin_user }
|
|
412
388
|
|
|
413
389
|
it "is able to set any default unpermitted attribute" do
|
|
414
|
-
api_post :create, :
|
|
390
|
+
api_post :create, order: { number: "WOW" }
|
|
415
391
|
expect(response.status).to eq 201
|
|
416
392
|
expect(json_response['number']).to eq "WOW"
|
|
417
393
|
end
|
|
@@ -424,26 +400,29 @@ module Spree
|
|
|
424
400
|
end
|
|
425
401
|
|
|
426
402
|
context "working with an order" do
|
|
427
|
-
|
|
428
403
|
let(:variant) { create(:variant) }
|
|
429
404
|
let!(:line_item) { order.contents.add(variant, 1) }
|
|
430
405
|
let!(:payment_method) { create(:check_payment_method) }
|
|
431
406
|
|
|
432
|
-
let(:address_params) { { :
|
|
433
|
-
let(:billing_address) {
|
|
434
|
-
|
|
435
|
-
:
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
407
|
+
let(:address_params) { { country_id: country.id } }
|
|
408
|
+
let(:billing_address) {
|
|
409
|
+
{ firstname: "Tiago", lastname: "Motta", address1: "Av Paulista",
|
|
410
|
+
city: "Sao Paulo", zipcode: "01310-300", phone: "12345678",
|
|
411
|
+
country_id: country.id }
|
|
412
|
+
}
|
|
413
|
+
let(:shipping_address) {
|
|
414
|
+
{ firstname: "Tiago", lastname: "Motta", address1: "Av Paulista",
|
|
415
|
+
city: "Sao Paulo", zipcode: "01310-300", phone: "12345678",
|
|
416
|
+
country_id: country.id }
|
|
417
|
+
}
|
|
418
|
+
let(:country) { create(:country, { name: "Brazil", iso_name: "BRAZIL", iso: "BR", iso3: "BRA", numcode: 76 }) }
|
|
440
419
|
|
|
441
420
|
before { allow_any_instance_of(Order).to receive_messages user: current_api_user }
|
|
442
421
|
|
|
443
422
|
it "updates quantities of existing line items" do
|
|
444
|
-
api_put :update, :
|
|
445
|
-
:
|
|
446
|
-
"0" => { :
|
|
423
|
+
api_put :update, id: order.to_param, order: {
|
|
424
|
+
line_items: {
|
|
425
|
+
"0" => { id: line_item.id, quantity: 10 }
|
|
447
426
|
}
|
|
448
427
|
}
|
|
449
428
|
|
|
@@ -454,10 +433,10 @@ module Spree
|
|
|
454
433
|
|
|
455
434
|
it "adds an extra line item" do
|
|
456
435
|
variant2 = create(:variant)
|
|
457
|
-
api_put :update, :
|
|
458
|
-
:
|
|
459
|
-
"0" => { :
|
|
460
|
-
"1" => { :
|
|
436
|
+
api_put :update, id: order.to_param, order: {
|
|
437
|
+
line_items: {
|
|
438
|
+
"0" => { id: line_item.id, quantity: 10 },
|
|
439
|
+
"1" => { variant_id: variant2.id, quantity: 1 }
|
|
461
440
|
}
|
|
462
441
|
}
|
|
463
442
|
|
|
@@ -469,9 +448,9 @@ module Spree
|
|
|
469
448
|
end
|
|
470
449
|
|
|
471
450
|
it "cannot change the price of an existing line item" do
|
|
472
|
-
api_put :update, :
|
|
473
|
-
:
|
|
474
|
-
0 => { :
|
|
451
|
+
api_put :update, id: order.to_param, order: {
|
|
452
|
+
line_items: {
|
|
453
|
+
0 => { id: line_item.id, price: 0 }
|
|
475
454
|
}
|
|
476
455
|
}
|
|
477
456
|
|
|
@@ -482,7 +461,7 @@ module Spree
|
|
|
482
461
|
end
|
|
483
462
|
|
|
484
463
|
it "can add billing address" do
|
|
485
|
-
api_put :update, :
|
|
464
|
+
api_put :update, id: order.to_param, order: { bill_address_attributes: billing_address }
|
|
486
465
|
|
|
487
466
|
expect(order.reload.bill_address).to_not be_nil
|
|
488
467
|
end
|
|
@@ -490,7 +469,7 @@ module Spree
|
|
|
490
469
|
it "receives error message if trying to add billing address with errors" do
|
|
491
470
|
billing_address[:firstname] = ""
|
|
492
471
|
|
|
493
|
-
api_put :update, :
|
|
472
|
+
api_put :update, id: order.to_param, order: { bill_address_attributes: billing_address }
|
|
494
473
|
|
|
495
474
|
expect(json_response['error']).not_to be_nil
|
|
496
475
|
expect(json_response['errors']).not_to be_nil
|
|
@@ -501,7 +480,7 @@ module Spree
|
|
|
501
480
|
order.update_attributes!(ship_address_id: nil)
|
|
502
481
|
|
|
503
482
|
expect {
|
|
504
|
-
api_put :update, :
|
|
483
|
+
api_put :update, id: order.to_param, order: { ship_address_attributes: shipping_address }
|
|
505
484
|
}.to change { order.reload.ship_address }.from(nil)
|
|
506
485
|
end
|
|
507
486
|
|
|
@@ -510,7 +489,7 @@ module Spree
|
|
|
510
489
|
|
|
511
490
|
shipping_address[:firstname] = ""
|
|
512
491
|
|
|
513
|
-
api_put :update, :
|
|
492
|
+
api_put :update, id: order.to_param, order: { ship_address_attributes: shipping_address }
|
|
514
493
|
|
|
515
494
|
expect(json_response['error']).not_to be_nil
|
|
516
495
|
expect(json_response['errors']).not_to be_nil
|
|
@@ -520,7 +499,7 @@ module Spree
|
|
|
520
499
|
it "cannot set the user_id for the order" do
|
|
521
500
|
user = Spree.user_class.create
|
|
522
501
|
original_id = order.user_id
|
|
523
|
-
api_post :update, :
|
|
502
|
+
api_post :update, id: order.to_param, order: { user_id: user.id }
|
|
524
503
|
expect(response.status).to eq 200
|
|
525
504
|
expect(json_response["user_id"]).to eq(original_id)
|
|
526
505
|
end
|
|
@@ -529,10 +508,9 @@ module Spree
|
|
|
529
508
|
before { order.create_proposed_shipments }
|
|
530
509
|
|
|
531
510
|
it "clears out all existing shipments on line item udpate" do
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
0 => { :id => line_item.id, :quantity => 10 }
|
|
511
|
+
api_put :update, id: order.to_param, order: {
|
|
512
|
+
line_items: {
|
|
513
|
+
0 => { id: line_item.id, quantity: 10 }
|
|
536
514
|
}
|
|
537
515
|
}
|
|
538
516
|
expect(order.reload.shipments).to be_empty
|
|
@@ -544,7 +522,7 @@ module Spree
|
|
|
544
522
|
|
|
545
523
|
it "can empty an order" do
|
|
546
524
|
create(:adjustment, order: order, adjustable: order)
|
|
547
|
-
api_put :empty, :
|
|
525
|
+
api_put :empty, id: order.to_param
|
|
548
526
|
expect(response.status).to eq(204)
|
|
549
527
|
order.reload
|
|
550
528
|
expect(order.line_items).to be_empty
|
|
@@ -552,21 +530,21 @@ module Spree
|
|
|
552
530
|
end
|
|
553
531
|
|
|
554
532
|
it "can list its line items with images" do
|
|
555
|
-
order.line_items.first.variant.images.create!(:
|
|
533
|
+
order.line_items.first.variant.images.create!(attachment: image("thinking-cat.jpg"))
|
|
556
534
|
|
|
557
|
-
api_get :show, :
|
|
535
|
+
api_get :show, id: order.to_param
|
|
558
536
|
|
|
559
537
|
expect(json_response['line_items'].first['variant']).to have_attributes([:images])
|
|
560
538
|
end
|
|
561
539
|
|
|
562
540
|
it "lists variants product id" do
|
|
563
|
-
api_get :show, :
|
|
541
|
+
api_get :show, id: order.to_param
|
|
564
542
|
|
|
565
543
|
expect(json_response['line_items'].first['variant']).to have_attributes([:product_id])
|
|
566
544
|
end
|
|
567
545
|
|
|
568
546
|
it "includes the tax_total in the response" do
|
|
569
|
-
api_get :show, :
|
|
547
|
+
api_get :show, id: order.to_param
|
|
570
548
|
|
|
571
549
|
expect(json_response['included_tax_total']).to eq('0.0')
|
|
572
550
|
expect(json_response['additional_tax_total']).to eq('0.0')
|
|
@@ -576,11 +554,11 @@ module Spree
|
|
|
576
554
|
|
|
577
555
|
it "lists line item adjustments" do
|
|
578
556
|
adjustment = create(:adjustment,
|
|
579
|
-
:
|
|
580
|
-
:
|
|
581
|
-
:
|
|
557
|
+
label: "10% off!",
|
|
558
|
+
order: order,
|
|
559
|
+
adjustable: order.line_items.first)
|
|
582
560
|
adjustment.update_column(:amount, 5)
|
|
583
|
-
api_get :show, :
|
|
561
|
+
api_get :show, id: order.to_param
|
|
584
562
|
|
|
585
563
|
adjustment = json_response['line_items'].first['adjustments'].first
|
|
586
564
|
expect(adjustment['label']).to eq("10% off!")
|
|
@@ -589,7 +567,7 @@ module Spree
|
|
|
589
567
|
|
|
590
568
|
it "lists payments source without gateway info" do
|
|
591
569
|
order.payments.push payment = create(:payment)
|
|
592
|
-
api_get :show, :
|
|
570
|
+
api_get :show, id: order.to_param
|
|
593
571
|
|
|
594
572
|
source = json_response[:payments].first[:source]
|
|
595
573
|
expect(source[:name]).to eq payment.source.name
|
|
@@ -597,8 +575,8 @@ module Spree
|
|
|
597
575
|
expect(source[:last_digits]).to eq payment.source.last_digits
|
|
598
576
|
expect(source[:month]).to eq payment.source.month
|
|
599
577
|
expect(source[:year]).to eq payment.source.year
|
|
600
|
-
expect(source.
|
|
601
|
-
expect(source.
|
|
578
|
+
expect(source.key?(:gateway_customer_profile_id)).to be false
|
|
579
|
+
expect(source.key?(:gateway_payment_profile_id)).to be false
|
|
602
580
|
end
|
|
603
581
|
|
|
604
582
|
context "when in delivery" do
|
|
@@ -623,7 +601,7 @@ module Spree
|
|
|
623
601
|
end
|
|
624
602
|
|
|
625
603
|
it "returns available shipments for an order" do
|
|
626
|
-
api_get :show, :
|
|
604
|
+
api_get :show, id: order.to_param
|
|
627
605
|
expect(response.status).to eq(200)
|
|
628
606
|
expect(json_response["shipments"]).not_to be_empty
|
|
629
607
|
shipment = json_response["shipments"][0]
|
|
@@ -686,7 +664,7 @@ module Spree
|
|
|
686
664
|
|
|
687
665
|
it "lists payments source with gateway info" do
|
|
688
666
|
order.payments.push payment = create(:payment)
|
|
689
|
-
api_get :show, :
|
|
667
|
+
api_get :show, id: order.to_param
|
|
690
668
|
|
|
691
669
|
source = json_response[:payments].first[:source]
|
|
692
670
|
expect(source[:name]).to eq payment.source.name
|
|
@@ -711,7 +689,7 @@ module Spree
|
|
|
711
689
|
|
|
712
690
|
# Test for https://github.com/spree/spree/issues/1763
|
|
713
691
|
it "can control the page size through a parameter" do
|
|
714
|
-
api_get :index, :
|
|
692
|
+
api_get :index, per_page: 1
|
|
715
693
|
expect(json_response["orders"].count).to eq(1)
|
|
716
694
|
expect(json_response["orders"].first).to have_attributes(attributes)
|
|
717
695
|
expect(json_response["count"]).to eq(1)
|
|
@@ -729,7 +707,7 @@ module Spree
|
|
|
729
707
|
let(:expected_result) { Spree::Order.last }
|
|
730
708
|
|
|
731
709
|
it "can query the results through a parameter" do
|
|
732
|
-
api_get :index, :
|
|
710
|
+
api_get :index, q: { email_cont: 'spree' }
|
|
733
711
|
expect(json_response["orders"].count).to eq(1)
|
|
734
712
|
expect(json_response["orders"].first).to have_attributes(attributes)
|
|
735
713
|
expect(json_response["orders"].first["email"]).to eq(expected_result.email)
|
|
@@ -743,15 +721,14 @@ module Spree
|
|
|
743
721
|
it "can create an order without any parameters" do
|
|
744
722
|
api_post :create
|
|
745
723
|
expect(response.status).to eq(201)
|
|
746
|
-
order = Order.last
|
|
747
724
|
expect(json_response["state"]).to eq("cart")
|
|
748
725
|
end
|
|
749
726
|
|
|
750
727
|
it "can arbitrarily set the line items price" do
|
|
751
|
-
api_post :create, :
|
|
752
|
-
:
|
|
728
|
+
api_post :create, order: {
|
|
729
|
+
line_items: {
|
|
753
730
|
"0" => {
|
|
754
|
-
:
|
|
731
|
+
price: 33.0, variant_id: variant.to_param, quantity: 5
|
|
755
732
|
}
|
|
756
733
|
}
|
|
757
734
|
}
|
|
@@ -761,7 +738,7 @@ module Spree
|
|
|
761
738
|
|
|
762
739
|
it "can set the user_id for the order" do
|
|
763
740
|
user = Spree.user_class.create
|
|
764
|
-
api_post :create, :
|
|
741
|
+
api_post :create, order: { user_id: user.id }
|
|
765
742
|
expect(response.status).to eq 201
|
|
766
743
|
expect(json_response["user_id"]).to eq(user.id)
|
|
767
744
|
end
|
|
@@ -770,7 +747,7 @@ module Spree
|
|
|
770
747
|
context "updating" do
|
|
771
748
|
it "can set the user_id for the order" do
|
|
772
749
|
user = Spree.user_class.create
|
|
773
|
-
api_post :update, :
|
|
750
|
+
api_post :update, id: order.number, order: { user_id: user.id }
|
|
774
751
|
expect(response.status).to eq 200
|
|
775
752
|
expect(json_response["user_id"]).to eq(user.id)
|
|
776
753
|
end
|
|
@@ -787,8 +764,9 @@ module Spree
|
|
|
787
764
|
end
|
|
788
765
|
|
|
789
766
|
specify do
|
|
790
|
-
api_put :cancel, :
|
|
767
|
+
api_put :cancel, id: order.to_param
|
|
791
768
|
expect(json_response["state"]).to eq("canceled")
|
|
769
|
+
expect(json_response["canceler_id"]).to eq(current_api_user.id)
|
|
792
770
|
end
|
|
793
771
|
end
|
|
794
772
|
end
|
|
@@ -798,7 +776,7 @@ module Spree
|
|
|
798
776
|
let(:promo_code) { promo.codes.first }
|
|
799
777
|
|
|
800
778
|
before do
|
|
801
|
-
allow_any_instance_of(Order).to receive_messages :
|
|
779
|
+
allow_any_instance_of(Order).to receive_messages user: current_api_user
|
|
802
780
|
end
|
|
803
781
|
|
|
804
782
|
context 'when successful' do
|
|
@@ -813,7 +791,7 @@ module Spree
|
|
|
813
791
|
"success" => Spree.t(:coupon_code_applied),
|
|
814
792
|
"error" => nil,
|
|
815
793
|
"successful" => true,
|
|
816
|
-
"status_code" => "coupon_code_applied"
|
|
794
|
+
"status_code" => "coupon_code_applied"
|
|
817
795
|
})
|
|
818
796
|
end
|
|
819
797
|
end
|
|
@@ -830,7 +808,7 @@ module Spree
|
|
|
830
808
|
"success" => nil,
|
|
831
809
|
"error" => Spree.t(:coupon_code_unknown_error),
|
|
832
810
|
"successful" => false,
|
|
833
|
-
"status_code" => "coupon_code_unknown_error"
|
|
811
|
+
"status_code" => "coupon_code_unknown_error"
|
|
834
812
|
})
|
|
835
813
|
end
|
|
836
814
|
end
|