solidus_backend 1.0.2 → 1.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -0
- data/Gemfile +6 -0
- data/Rakefile +15 -0
- data/script/rails +9 -0
- data/solidus_backend.gemspec +28 -0
- data/spec/controllers/spree/admin/base_controller_spec.rb +24 -0
- data/spec/controllers/spree/admin/cancellations_controller_spec.rb +77 -0
- data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +234 -0
- data/spec/controllers/spree/admin/general_settings_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/missing_products_controller_spec.rb +18 -0
- data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +80 -0
- data/spec/controllers/spree/admin/orders_controller_spec.rb +472 -0
- data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +49 -0
- data/spec/controllers/spree/admin/payments_controller_spec.rb +175 -0
- data/spec/controllers/spree/admin/products_controller_spec.rb +45 -0
- data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +21 -0
- data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +18 -0
- data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +21 -0
- data/spec/controllers/spree/admin/promotions_controller_spec.rb +122 -0
- data/spec/controllers/spree/admin/refunds_controller_spec.rb +32 -0
- data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +75 -0
- data/spec/controllers/spree/admin/reports_controller_spec.rb +134 -0
- data/spec/controllers/spree/admin/resource_controller_spec.rb +166 -0
- data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +226 -0
- data/spec/controllers/spree/admin/return_items_controller_spec.rb +27 -0
- data/spec/controllers/spree/admin/root_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/search_controller_spec.rb +104 -0
- data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +14 -0
- data/spec/controllers/spree/admin/stock_items_controller_spec.rb +50 -0
- data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/stock_transfers_controller_spec.rb +331 -0
- data/spec/controllers/spree/admin/store_credits_controller_spec.rb +309 -0
- data/spec/controllers/spree/admin/users_controller_spec.rb +236 -0
- data/spec/controllers/spree/admin/variants_controller_spec.rb +32 -0
- data/spec/features/admin/configuration/analytics_tracker_spec.rb +54 -0
- data/spec/features/admin/configuration/countries_spec.rb +22 -0
- data/spec/features/admin/configuration/general_settings_spec.rb +45 -0
- data/spec/features/admin/configuration/payment_methods_spec.rb +125 -0
- data/spec/features/admin/configuration/shipping_methods_spec.rb +64 -0
- data/spec/features/admin/configuration/states_spec.rb +64 -0
- data/spec/features/admin/configuration/stock_locations_spec.rb +50 -0
- data/spec/features/admin/configuration/tax_categories_spec.rb +56 -0
- data/spec/features/admin/configuration/tax_rates_spec.rb +30 -0
- data/spec/features/admin/configuration/taxonomies_spec.rb +52 -0
- data/spec/features/admin/configuration/zones_spec.rb +39 -0
- data/spec/features/admin/homepage_spec.rb +78 -0
- data/spec/features/admin/locale_spec.rb +30 -0
- data/spec/features/admin/orders/adjustments_promotions_spec.rb +53 -0
- data/spec/features/admin/orders/adjustments_spec.rb +126 -0
- data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +48 -0
- data/spec/features/admin/orders/cancelling_inventory_spec.rb +48 -0
- data/spec/features/admin/orders/customer_details_spec.rb +163 -0
- data/spec/features/admin/orders/line_items_spec.rb +50 -0
- data/spec/features/admin/orders/listing_spec.rb +130 -0
- data/spec/features/admin/orders/log_entries_spec.rb +55 -0
- data/spec/features/admin/orders/new_order_spec.rb +185 -0
- data/spec/features/admin/orders/order_details_spec.rb +533 -0
- data/spec/features/admin/orders/payments_spec.rb +228 -0
- data/spec/features/admin/orders/risk_analysis_spec.rb +47 -0
- data/spec/features/admin/orders/shipments_spec.rb +65 -0
- data/spec/features/admin/payments/store_credits_spec.rb +21 -0
- data/spec/features/admin/products/edit/images_spec.rb +87 -0
- data/spec/features/admin/products/edit/products_spec.rb +66 -0
- data/spec/features/admin/products/edit/taxons_spec.rb +43 -0
- data/spec/features/admin/products/edit/variants_spec.rb +61 -0
- data/spec/features/admin/products/option_types_spec.rb +114 -0
- data/spec/features/admin/products/products_spec.rb +392 -0
- data/spec/features/admin/products/properties_spec.rb +139 -0
- data/spec/features/admin/products/prototypes_spec.rb +110 -0
- data/spec/features/admin/products/stock_management_spec.rb +82 -0
- data/spec/features/admin/products/variant_spec.rb +51 -0
- data/spec/features/admin/promotion_adjustments_spec.rb +220 -0
- data/spec/features/admin/promotions/tiered_calculator_spec.rb +69 -0
- data/spec/features/admin/reports_spec.rb +61 -0
- data/spec/features/admin/stock_transfer_spec.rb +86 -0
- data/spec/features/admin/store_credits_spec.rb +82 -0
- data/spec/features/admin/taxons_spec.rb +31 -0
- data/spec/features/admin/users_spec.rb +270 -0
- data/spec/helpers/admin/base_helper_spec.rb +24 -0
- data/spec/helpers/admin/navigation_helper_spec.rb +73 -0
- data/spec/helpers/admin/reimbursements_helper_spec.rb +34 -0
- data/spec/helpers/admin/stock_movements_helper_spec.rb +29 -0
- data/spec/helpers/admin/store_credit_events_helper_spec.rb +95 -0
- data/spec/helpers/promotion_rules_helper_spec.rb +12 -0
- data/spec/spec_helper.rb +108 -0
- data/spec/support/appear_before_matcher.rb +8 -0
- data/spec/support/ror_ringer.jpeg +0 -0
- data/spec/test_views/spree/admin/widgets/edit.html.erb +1 -0
- data/spec/test_views/spree/admin/widgets/new.html.erb +1 -0
- metadata +95 -6
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
shared_examples "update reason loader" do
|
|
4
|
+
it "sets the update_reasons variable to a list of categories sorted by category name " do
|
|
5
|
+
expect(assigns(:update_reasons)).to eq [update_reason]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe Spree::Admin::StoreCreditsController do
|
|
10
|
+
stub_authorization!
|
|
11
|
+
|
|
12
|
+
let(:user) { create(:user) }
|
|
13
|
+
let(:admin_user) { create(:admin_user) }
|
|
14
|
+
|
|
15
|
+
let!(:b_credit_category) { create(:store_credit_category, name: "B category") }
|
|
16
|
+
let!(:a_credit_category) { create(:store_credit_category, name: "A category") }
|
|
17
|
+
let!(:update_reason) { create(:store_credit_update_reason) }
|
|
18
|
+
|
|
19
|
+
describe "#show" do
|
|
20
|
+
let!(:store_credit) { create(:store_credit, user: user, category: a_credit_category) }
|
|
21
|
+
let!(:event) { create(:store_credit_auth_event, store_credit: store_credit, created_at: 5.days.ago) }
|
|
22
|
+
|
|
23
|
+
before { spree_get :show, user_id: user.id, id: store_credit.id }
|
|
24
|
+
|
|
25
|
+
it "sets the store_credit variable to a new store credit model" do
|
|
26
|
+
expect(assigns(:store_credit)).to eq store_credit
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "sets the store_credit_events variable to the store credit's events in chronological order" do
|
|
30
|
+
allocation_event = store_credit.store_credit_events.find_by(action: Spree::StoreCredit::ALLOCATION_ACTION)
|
|
31
|
+
expect(assigns(:store_credit_events)).to eq [event, allocation_event]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe "#new" do
|
|
36
|
+
before { spree_get :new, user_id: create(:user).id }
|
|
37
|
+
it { expect(assigns(:credit_categories)).to eq [a_credit_category, b_credit_category] }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "#create" do
|
|
41
|
+
|
|
42
|
+
subject { spree_post :create, parameters }
|
|
43
|
+
|
|
44
|
+
before {
|
|
45
|
+
allow(controller).to receive_messages(try_spree_current_user: admin_user)
|
|
46
|
+
create(:primary_credit_type)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
context "the passed parameters are valid" do
|
|
50
|
+
let(:parameters) do
|
|
51
|
+
{
|
|
52
|
+
user_id: user.id,
|
|
53
|
+
store_credit: {
|
|
54
|
+
amount: 1.00,
|
|
55
|
+
category_id: a_credit_category.id
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "creates a new store credit" do
|
|
61
|
+
expect { subject }.to change(Spree::StoreCredit, :count).by(1)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "associates the store credit with the user" do
|
|
65
|
+
subject
|
|
66
|
+
expect(user.reload.store_credits.count).to eq 1
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "assigns the store credit's created by to the current user" do
|
|
70
|
+
subject
|
|
71
|
+
expect(user.reload.store_credits.first.created_by).to eq admin_user
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'sets the admin as the store credit event originator' do
|
|
75
|
+
expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
|
|
76
|
+
expect(Spree::StoreCreditEvent.last.originator).to eq admin_user
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context "the passed parameters are invalid" do
|
|
81
|
+
let(:parameters) do
|
|
82
|
+
{
|
|
83
|
+
user_id: user.id,
|
|
84
|
+
store_credit: {
|
|
85
|
+
amount: -1.00,
|
|
86
|
+
category_id: a_credit_category.id
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it { expect { subject }.not_to change(Spree::StoreCredit, :count) }
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe "#edit_amount" do
|
|
96
|
+
let!(:store_credit) { create(:store_credit, user: user, category: a_credit_category) }
|
|
97
|
+
|
|
98
|
+
before { spree_get :edit_amount, user_id: user.id, id: store_credit.id }
|
|
99
|
+
|
|
100
|
+
it_behaves_like "update reason loader"
|
|
101
|
+
|
|
102
|
+
it "sets the store_credit variable to the persisted store credit" do
|
|
103
|
+
expect(assigns(:store_credit)).to eq store_credit
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
describe "#edit_validity" do
|
|
108
|
+
let!(:store_credit) { create(:store_credit, user: user, category: a_credit_category) }
|
|
109
|
+
|
|
110
|
+
before { spree_get :edit_validity, user_id: user.id, id: store_credit.id }
|
|
111
|
+
|
|
112
|
+
it_behaves_like "update reason loader"
|
|
113
|
+
|
|
114
|
+
it "sets the store_credit variable to the persisted store credit" do
|
|
115
|
+
expect(assigns(:store_credit)).to eq store_credit
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe "#update" do
|
|
120
|
+
let(:memo) { "New memo" }
|
|
121
|
+
let!(:store_credit) { create(:store_credit, user: user) }
|
|
122
|
+
|
|
123
|
+
subject { spree_put :update, parameters.merge(format: :json) }
|
|
124
|
+
|
|
125
|
+
before { allow(controller).to receive_messages(try_spree_current_user: admin_user) }
|
|
126
|
+
|
|
127
|
+
context "the passed parameters are valid" do
|
|
128
|
+
let(:parameters) do
|
|
129
|
+
{
|
|
130
|
+
user_id: user.id,
|
|
131
|
+
id: store_credit.id,
|
|
132
|
+
store_credit: {
|
|
133
|
+
memo: memo
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "updates the memo to be the passed in value" do
|
|
139
|
+
expect { subject }.to change { store_credit.reload.memo }.to(memo)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "returns a success message" do
|
|
143
|
+
subject
|
|
144
|
+
expect(response).to have_http_status(:ok)
|
|
145
|
+
expect(JSON.parse(response.body)['message']).to match("Store credit has been successfully updated!")
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
context "the passed parameters are invalid" do
|
|
150
|
+
let(:parameters) do
|
|
151
|
+
{
|
|
152
|
+
user_id: user.id,
|
|
153
|
+
id: store_credit.id,
|
|
154
|
+
store_credit: {
|
|
155
|
+
category_id: b_credit_category.id
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
end
|
|
159
|
+
it "doesn't update the store credit's category" do
|
|
160
|
+
expect { subject }.to_not change { store_credit.reload.category }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "returns an error message" do
|
|
164
|
+
subject
|
|
165
|
+
expect(response).to have_http_status(:bad_request)
|
|
166
|
+
expect(JSON.parse(response.body)['message']).to match("Unable to update store credit")
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
describe "#update_amount" do
|
|
172
|
+
let(:original_amount) { 100.0 }
|
|
173
|
+
let!(:store_credit) { create(:store_credit, user: user, amount: original_amount) }
|
|
174
|
+
let!(:update_reason) { create(:store_credit_update_reason) }
|
|
175
|
+
let(:parameters) do
|
|
176
|
+
{
|
|
177
|
+
user_id: user.id,
|
|
178
|
+
id: store_credit.id,
|
|
179
|
+
update_reason_id: update_reason.id,
|
|
180
|
+
store_credit: {
|
|
181
|
+
amount: updated_amount
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
subject { spree_put :update_amount, parameters }
|
|
187
|
+
|
|
188
|
+
before { allow(controller).to receive_messages(try_spree_current_user: admin_user) }
|
|
189
|
+
|
|
190
|
+
context "the passed parameters are valid" do
|
|
191
|
+
let(:updated_amount) { 300.0 }
|
|
192
|
+
|
|
193
|
+
context "the store credit has been partially used" do
|
|
194
|
+
before { store_credit.update_attributes(amount_used: 10.0) }
|
|
195
|
+
|
|
196
|
+
context "the new amount is greater than the used amount" do
|
|
197
|
+
let(:updated_amount) { 11.0 }
|
|
198
|
+
|
|
199
|
+
before { subject }
|
|
200
|
+
|
|
201
|
+
it "updates the amount to be the passed in amount" do
|
|
202
|
+
expect(store_credit.reload.amount).to eq updated_amount
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
context "the new amount is less than the used amount" do
|
|
207
|
+
let(:updated_amount) { 9.0 }
|
|
208
|
+
|
|
209
|
+
before { subject }
|
|
210
|
+
|
|
211
|
+
it "does not update the amount" do
|
|
212
|
+
expect(store_credit.reload.amount).to eq original_amount
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it "renders the edit_amount template" do
|
|
216
|
+
expect(response).to render_template :edit_amount
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "adds an error message to the flash" do
|
|
220
|
+
expect(flash.now[:error]).to match "Unable to update"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it_behaves_like "update reason loader"
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
context "the store credit has not been used" do
|
|
228
|
+
it "sets a success message in the flash" do
|
|
229
|
+
subject
|
|
230
|
+
expect(flash.now[:success]).to match "Store credit has been successfully updated!"
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
it "does not create a new store credit" do
|
|
234
|
+
expect { subject }.to_not change(Spree::StoreCredit, :count)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "updates passed amount" do
|
|
238
|
+
subject
|
|
239
|
+
expect(store_credit.reload.amount).to eq updated_amount
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
context "the passed parameters are invalid" do
|
|
245
|
+
let(:updated_amount) { -1.00 }
|
|
246
|
+
|
|
247
|
+
before { subject }
|
|
248
|
+
|
|
249
|
+
it "does not update the amount" do
|
|
250
|
+
expect(store_credit.reload.amount).to eq original_amount
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
it "renders the edit_amount template" do
|
|
254
|
+
expect(response).to render_template :edit_amount
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
it "adds an error message to the flash" do
|
|
258
|
+
expect(flash.now[:error]).to match "Unable to update"
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
it_behaves_like "update reason loader"
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
describe "#invalidate" do
|
|
266
|
+
let!(:store_credit) { create(:store_credit, user: user, category: b_credit_category) }
|
|
267
|
+
|
|
268
|
+
let(:parameters) do
|
|
269
|
+
{
|
|
270
|
+
user_id: user.id,
|
|
271
|
+
id: store_credit.id,
|
|
272
|
+
update_reason_id: update_reason.id
|
|
273
|
+
}
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
subject { spree_put :invalidate, parameters }
|
|
277
|
+
|
|
278
|
+
it "attempts to invalidate the store credit" do
|
|
279
|
+
expect { subject }.to change { store_credit.reload.invalidated_at }.from(nil)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
context "the invalidation is unsuccessful" do
|
|
283
|
+
before do
|
|
284
|
+
store_credit.authorize(5.0, "USD")
|
|
285
|
+
subject
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
it "doesn't invalidate the store credit" do
|
|
289
|
+
expect(store_credit.reload.invalidated_at).to be_nil
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
it "renders the edit_validity template" do
|
|
293
|
+
expect(response).to render_template :edit_validity
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
it "sets an error message in the flash" do
|
|
297
|
+
expect(flash.now[:error]).to match "Unable to invalidate store credit"
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
it_behaves_like "update reason loader"
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
context "the invalidation is successful" do
|
|
304
|
+
it "redirects to index" do
|
|
305
|
+
expect(subject).to redirect_to spree.admin_user_store_credit_path(user, store_credit)
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
end
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'spree/testing_support/bar_ability'
|
|
3
|
+
|
|
4
|
+
describe Spree::Admin::UsersController, :type => :controller do
|
|
5
|
+
let(:user) { create(:user) }
|
|
6
|
+
let(:mock_user) { mock_model Spree.user_class }
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
allow(controller).to receive_messages :spree_current_user => user
|
|
10
|
+
user.spree_roles.clear
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context "#show" do
|
|
14
|
+
before do
|
|
15
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "redirects to edit" do
|
|
19
|
+
spree_get :show, id: user.id
|
|
20
|
+
expect(response).to redirect_to spree.edit_admin_user_path(user)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context '#authorize_admin' do
|
|
25
|
+
before { use_mock_user }
|
|
26
|
+
|
|
27
|
+
it 'grant access to users with an admin role' do
|
|
28
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
29
|
+
spree_post :index
|
|
30
|
+
expect(response).to render_template :index
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "allows admins to update a user's API key" do
|
|
34
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
35
|
+
expect(mock_user).to receive(:generate_spree_api_key!).and_return(true)
|
|
36
|
+
spree_put :generate_api_key, id: mock_user.id
|
|
37
|
+
expect(response).to redirect_to(spree.edit_admin_user_path(mock_user))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "allows admins to clear a user's API key" do
|
|
41
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
42
|
+
expect(mock_user).to receive(:clear_spree_api_key!).and_return(true)
|
|
43
|
+
spree_put :clear_api_key, id: mock_user.id
|
|
44
|
+
expect(response).to redirect_to(spree.edit_admin_user_path(mock_user))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'deny access to users with an bar role' do
|
|
48
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'bar')
|
|
49
|
+
Spree::Ability.register_ability(BarAbility)
|
|
50
|
+
spree_post :index
|
|
51
|
+
expect(response).to redirect_to '/unauthorized'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'deny access to users with an bar role' do
|
|
55
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'bar')
|
|
56
|
+
Spree::Ability.register_ability(BarAbility)
|
|
57
|
+
spree_post :update, { id: '9' }
|
|
58
|
+
expect(response).to redirect_to '/unauthorized'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'deny access to users without an admin role' do
|
|
62
|
+
allow(user).to receive_messages :has_spree_role? => false
|
|
63
|
+
spree_post :index
|
|
64
|
+
expect(response).to redirect_to '/unauthorized'
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe "#create" do
|
|
69
|
+
let(:dummy_role) { Spree::Role.create(name: "dummyrole") }
|
|
70
|
+
|
|
71
|
+
before do
|
|
72
|
+
use_mock_user
|
|
73
|
+
allow(mock_user).to receive_messages(:spree_roles= => true, :stock_locations= => true)
|
|
74
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context "when the user can manage roles" do
|
|
78
|
+
it "can set roles" do
|
|
79
|
+
expect(mock_user).to receive(:spree_roles=).with([dummy_role])
|
|
80
|
+
spree_post :create, { id: mock_user.id, user: { first_name: "Bob", spree_role_ids: [dummy_role.id] } }
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "can clear roles" do
|
|
84
|
+
expect(mock_user).to receive(:spree_roles=).with([])
|
|
85
|
+
spree_post :create, { id: mock_user.id, user: { first_name: "Bob"} }
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
context "when the user cannot manage roles" do
|
|
90
|
+
before do
|
|
91
|
+
user.spree_roles = [Spree::Role.find_or_create_by(name: "user_management")]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "cannot set roles" do
|
|
95
|
+
expect(mock_user).to_not receive(:spree_roles=)
|
|
96
|
+
spree_post :create, { user: { spree_role_ids: [dummy_role.id] } }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "cannot set roles" do
|
|
100
|
+
expect(mock_user).to_not receive(:spree_roles=)
|
|
101
|
+
spree_post :create, { id: mock_user.id, user: { first_name: "Bob", spree_role_ids: [dummy_role.id] } }
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "cannot clear roles" do
|
|
105
|
+
expect(mock_user).to_not receive(:spree_roles=)
|
|
106
|
+
spree_post :create, { id: mock_user.id, user: { first_name: "Bob"} }
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it "can create a shipping_address" do
|
|
111
|
+
expect(Spree.user_class).to receive(:new).with(hash_including(
|
|
112
|
+
"ship_address_attributes" => { "city" => "New York" }
|
|
113
|
+
))
|
|
114
|
+
spree_post :create, { :user => { :ship_address_attributes => { :city => "New York" } } }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "can create a billing_address" do
|
|
118
|
+
expect(Spree.user_class).to receive(:new).with(hash_including(
|
|
119
|
+
"bill_address_attributes" => { "city" => "New York" }
|
|
120
|
+
))
|
|
121
|
+
spree_post :create, { :user => { :bill_address_attributes => { :city => "New York" } } }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "can set stock locations" do
|
|
125
|
+
location = Spree::StockLocation.create(name: "my_location")
|
|
126
|
+
location_2 = Spree::StockLocation.create(name: "my_location_2")
|
|
127
|
+
expect(mock_user).to receive(:stock_locations=).with([location, location_2])
|
|
128
|
+
spree_post :create, { user: { stock_location_ids: [location.id, location_2.id] } }
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe "#update" do
|
|
133
|
+
let(:dummy_role) { Spree::Role.create(name: "dummyrole") }
|
|
134
|
+
before do
|
|
135
|
+
use_mock_user
|
|
136
|
+
allow(mock_user).to receive_messages(:spree_roles= => true, :stock_locations= => true)
|
|
137
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
context "when the user can manage roles" do
|
|
141
|
+
it "can set roles" do
|
|
142
|
+
expect(mock_user).to receive(:spree_roles=).with([dummy_role])
|
|
143
|
+
spree_put :update, { id: mock_user.id, user: { first_name: "Bob", spree_role_ids: [dummy_role.id] } }
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "can clear roles" do
|
|
147
|
+
expect(mock_user).to receive(:spree_roles=).with([])
|
|
148
|
+
spree_put :update, { id: mock_user.id, user: { first_name: "Bob"} }
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
context "when the user cannot manage roles" do
|
|
153
|
+
before do
|
|
154
|
+
user.spree_roles = [Spree::Role.find_or_create_by(name: "user_management")]
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "cannot set roles" do
|
|
158
|
+
expect(mock_user).to_not receive(:spree_roles=)
|
|
159
|
+
spree_put :update, { id: mock_user.id, user: { first_name: "Bob", spree_role_ids: [dummy_role.id] } }
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "cannot clear roles" do
|
|
163
|
+
expect(mock_user).to_not receive(:spree_roles=)
|
|
164
|
+
spree_put :update, { id: mock_user.id, user: { first_name: "Bob" } }
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "allows shipping address attributes through" do
|
|
169
|
+
expect(mock_user).to receive(:update_attributes).with(hash_including(
|
|
170
|
+
"ship_address_attributes" => { "city" => "New York" }
|
|
171
|
+
))
|
|
172
|
+
spree_put :update, { :id => mock_user.id, :user => { :ship_address_attributes => { :city => "New York" } } }
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it "allows billing address attributes through" do
|
|
176
|
+
expect(mock_user).to receive(:update_attributes).with(hash_including(
|
|
177
|
+
"bill_address_attributes" => { "city" => "New York" }
|
|
178
|
+
))
|
|
179
|
+
spree_put :update, { :id => mock_user.id, :user => { :bill_address_attributes => { :city => "New York" } } }
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "can set stock locations" do
|
|
183
|
+
location = Spree::StockLocation.create(name: "my_location")
|
|
184
|
+
location_2 = Spree::StockLocation.create(name: "my_location_2")
|
|
185
|
+
expect(mock_user).to receive(:stock_locations=).with([location, location_2])
|
|
186
|
+
spree_put :update, { id: mock_user.id, user: { stock_location_ids: [location.id, location_2.id] } }
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
describe "#orders" do
|
|
191
|
+
let(:order) { create(:order) }
|
|
192
|
+
before do
|
|
193
|
+
user.orders << order
|
|
194
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "assigns a list of the users orders" do
|
|
198
|
+
spree_get :orders, { :id => user.id }
|
|
199
|
+
expect(assigns[:orders].count).to eq 1
|
|
200
|
+
expect(assigns[:orders].first).to eq order
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
it "assigns a ransack search for Spree::Order" do
|
|
204
|
+
spree_get :orders, { :id => user.id }
|
|
205
|
+
expect(assigns[:search]).to be_a Ransack::Search
|
|
206
|
+
expect(assigns[:search].klass).to eq Spree::Order
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
describe "#items" do
|
|
211
|
+
let(:order) { create(:order) }
|
|
212
|
+
before do
|
|
213
|
+
user.orders << order
|
|
214
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "assigns a list of the users orders" do
|
|
218
|
+
spree_get :items, { :id => user.id }
|
|
219
|
+
expect(assigns[:orders].count).to eq 1
|
|
220
|
+
expect(assigns[:orders].first).to eq order
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "assigns a ransack search for Spree::Order" do
|
|
224
|
+
spree_get :items, { :id => user.id }
|
|
225
|
+
expect(assigns[:search]).to be_a Ransack::Search
|
|
226
|
+
expect(assigns[:search].klass).to eq Spree::Order
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def use_mock_user
|
|
232
|
+
allow(mock_user).to receive(:save).and_return(true)
|
|
233
|
+
allow(mock_user).to receive(:update_attributes).and_return(true)
|
|
234
|
+
allow(Spree.user_class).to receive(:find).with(mock_user.id.to_s).and_return(mock_user)
|
|
235
|
+
allow(Spree.user_class).to receive(:new).and_return(mock_user)
|
|
236
|
+
end
|