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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +6 -0
  4. data/Rakefile +15 -0
  5. data/script/rails +9 -0
  6. data/solidus_backend.gemspec +28 -0
  7. data/spec/controllers/spree/admin/base_controller_spec.rb +24 -0
  8. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +77 -0
  9. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +234 -0
  10. data/spec/controllers/spree/admin/general_settings_controller_spec.rb +41 -0
  11. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +18 -0
  12. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +80 -0
  13. data/spec/controllers/spree/admin/orders_controller_spec.rb +472 -0
  14. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +49 -0
  15. data/spec/controllers/spree/admin/payments_controller_spec.rb +175 -0
  16. data/spec/controllers/spree/admin/products_controller_spec.rb +45 -0
  17. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +21 -0
  18. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +18 -0
  19. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +21 -0
  20. data/spec/controllers/spree/admin/promotions_controller_spec.rb +122 -0
  21. data/spec/controllers/spree/admin/refunds_controller_spec.rb +32 -0
  22. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +75 -0
  23. data/spec/controllers/spree/admin/reports_controller_spec.rb +134 -0
  24. data/spec/controllers/spree/admin/resource_controller_spec.rb +166 -0
  25. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +226 -0
  26. data/spec/controllers/spree/admin/return_items_controller_spec.rb +27 -0
  27. data/spec/controllers/spree/admin/root_controller_spec.rb +41 -0
  28. data/spec/controllers/spree/admin/search_controller_spec.rb +104 -0
  29. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +14 -0
  30. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +50 -0
  31. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +41 -0
  32. data/spec/controllers/spree/admin/stock_transfers_controller_spec.rb +331 -0
  33. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +309 -0
  34. data/spec/controllers/spree/admin/users_controller_spec.rb +236 -0
  35. data/spec/controllers/spree/admin/variants_controller_spec.rb +32 -0
  36. data/spec/features/admin/configuration/analytics_tracker_spec.rb +54 -0
  37. data/spec/features/admin/configuration/countries_spec.rb +22 -0
  38. data/spec/features/admin/configuration/general_settings_spec.rb +45 -0
  39. data/spec/features/admin/configuration/payment_methods_spec.rb +125 -0
  40. data/spec/features/admin/configuration/shipping_methods_spec.rb +64 -0
  41. data/spec/features/admin/configuration/states_spec.rb +64 -0
  42. data/spec/features/admin/configuration/stock_locations_spec.rb +50 -0
  43. data/spec/features/admin/configuration/tax_categories_spec.rb +56 -0
  44. data/spec/features/admin/configuration/tax_rates_spec.rb +30 -0
  45. data/spec/features/admin/configuration/taxonomies_spec.rb +52 -0
  46. data/spec/features/admin/configuration/zones_spec.rb +39 -0
  47. data/spec/features/admin/homepage_spec.rb +78 -0
  48. data/spec/features/admin/locale_spec.rb +30 -0
  49. data/spec/features/admin/orders/adjustments_promotions_spec.rb +53 -0
  50. data/spec/features/admin/orders/adjustments_spec.rb +126 -0
  51. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +48 -0
  52. data/spec/features/admin/orders/cancelling_inventory_spec.rb +48 -0
  53. data/spec/features/admin/orders/customer_details_spec.rb +163 -0
  54. data/spec/features/admin/orders/line_items_spec.rb +50 -0
  55. data/spec/features/admin/orders/listing_spec.rb +130 -0
  56. data/spec/features/admin/orders/log_entries_spec.rb +55 -0
  57. data/spec/features/admin/orders/new_order_spec.rb +185 -0
  58. data/spec/features/admin/orders/order_details_spec.rb +533 -0
  59. data/spec/features/admin/orders/payments_spec.rb +228 -0
  60. data/spec/features/admin/orders/risk_analysis_spec.rb +47 -0
  61. data/spec/features/admin/orders/shipments_spec.rb +65 -0
  62. data/spec/features/admin/payments/store_credits_spec.rb +21 -0
  63. data/spec/features/admin/products/edit/images_spec.rb +87 -0
  64. data/spec/features/admin/products/edit/products_spec.rb +66 -0
  65. data/spec/features/admin/products/edit/taxons_spec.rb +43 -0
  66. data/spec/features/admin/products/edit/variants_spec.rb +61 -0
  67. data/spec/features/admin/products/option_types_spec.rb +114 -0
  68. data/spec/features/admin/products/products_spec.rb +392 -0
  69. data/spec/features/admin/products/properties_spec.rb +139 -0
  70. data/spec/features/admin/products/prototypes_spec.rb +110 -0
  71. data/spec/features/admin/products/stock_management_spec.rb +82 -0
  72. data/spec/features/admin/products/variant_spec.rb +51 -0
  73. data/spec/features/admin/promotion_adjustments_spec.rb +220 -0
  74. data/spec/features/admin/promotions/tiered_calculator_spec.rb +69 -0
  75. data/spec/features/admin/reports_spec.rb +61 -0
  76. data/spec/features/admin/stock_transfer_spec.rb +86 -0
  77. data/spec/features/admin/store_credits_spec.rb +82 -0
  78. data/spec/features/admin/taxons_spec.rb +31 -0
  79. data/spec/features/admin/users_spec.rb +270 -0
  80. data/spec/helpers/admin/base_helper_spec.rb +24 -0
  81. data/spec/helpers/admin/navigation_helper_spec.rb +73 -0
  82. data/spec/helpers/admin/reimbursements_helper_spec.rb +34 -0
  83. data/spec/helpers/admin/stock_movements_helper_spec.rb +29 -0
  84. data/spec/helpers/admin/store_credit_events_helper_spec.rb +95 -0
  85. data/spec/helpers/promotion_rules_helper_spec.rb +12 -0
  86. data/spec/spec_helper.rb +108 -0
  87. data/spec/support/appear_before_matcher.rb +8 -0
  88. data/spec/support/ror_ringer.jpeg +0 -0
  89. data/spec/test_views/spree/admin/widgets/edit.html.erb +1 -0
  90. data/spec/test_views/spree/admin/widgets/new.html.erb +1 -0
  91. 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