spree_backend 3.0.5 → 3.0.6

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +6 -0
  4. data/Rakefile +29 -0
  5. data/app/assets/javascripts/spree/backend/admin.js +26 -0
  6. data/app/controllers/spree/admin/resource_controller.rb +4 -2
  7. data/app/helpers/spree/admin/navigation_helper.rb +10 -1
  8. data/app/views/spree/admin/images/new.html.erb +1 -1
  9. data/app/views/spree/admin/payments/_list.html.erb +1 -1
  10. data/app/views/spree/admin/products/_form.html.erb +1 -1
  11. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -11
  12. data/app/views/spree/admin/shared/sub_menu/_product.html.erb +1 -1
  13. data/script/rails +9 -0
  14. data/spec/controllers/spree/admin/base_controller_spec.rb +46 -0
  15. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +185 -0
  16. data/spec/controllers/spree/admin/general_settings_controller_spec.rb +41 -0
  17. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +18 -0
  18. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +42 -0
  19. data/spec/controllers/spree/admin/orders_controller_spec.rb +247 -0
  20. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +49 -0
  21. data/spec/controllers/spree/admin/payments_controller_spec.rb +97 -0
  22. data/spec/controllers/spree/admin/products_controller_spec.rb +53 -0
  23. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +21 -0
  24. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +21 -0
  25. data/spec/controllers/spree/admin/promotions_controller_spec.rb +44 -0
  26. data/spec/controllers/spree/admin/refunds_controller_spec.rb +32 -0
  27. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +74 -0
  28. data/spec/controllers/spree/admin/reports_controller_spec.rb +42 -0
  29. data/spec/controllers/spree/admin/resource_controller_spec.rb +276 -0
  30. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +225 -0
  31. data/spec/controllers/spree/admin/return_items_controller_spec.rb +27 -0
  32. data/spec/controllers/spree/admin/root_controller_spec.rb +35 -0
  33. data/spec/controllers/spree/admin/search_controller_spec.rb +56 -0
  34. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +14 -0
  35. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +19 -0
  36. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +41 -0
  37. data/spec/controllers/spree/admin/stock_transfers_controller_spec.rb +41 -0
  38. data/spec/controllers/spree/admin/tax_categories_controller_spec.rb +34 -0
  39. data/spec/controllers/spree/admin/users_controller_spec.rb +161 -0
  40. data/spec/controllers/spree/admin/variants_controller_spec.rb +32 -0
  41. data/spec/features/admin/configuration/analytics_tracker_spec.rb +46 -0
  42. data/spec/features/admin/configuration/countries_spec.rb +24 -0
  43. data/spec/features/admin/configuration/general_settings_spec.rb +43 -0
  44. data/spec/features/admin/configuration/payment_methods_spec.rb +63 -0
  45. data/spec/features/admin/configuration/roles_spec.rb +47 -0
  46. data/spec/features/admin/configuration/shipping_methods_spec.rb +62 -0
  47. data/spec/features/admin/configuration/states_spec.rb +68 -0
  48. data/spec/features/admin/configuration/stock_locations_spec.rb +48 -0
  49. data/spec/features/admin/configuration/tax_categories_spec.rb +56 -0
  50. data/spec/features/admin/configuration/tax_rates_spec.rb +18 -0
  51. data/spec/features/admin/configuration/zones_spec.rb +39 -0
  52. data/spec/features/admin/homepage_spec.rb +81 -0
  53. data/spec/features/admin/locale_spec.rb +31 -0
  54. data/spec/features/admin/orders/adjustments_promotions_spec.rb +53 -0
  55. data/spec/features/admin/orders/adjustments_spec.rb +129 -0
  56. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +47 -0
  57. data/spec/features/admin/orders/customer_details_spec.rb +182 -0
  58. data/spec/features/admin/orders/line_items_spec.rb +51 -0
  59. data/spec/features/admin/orders/listing_spec.rb +225 -0
  60. data/spec/features/admin/orders/log_entries_spec.rb +55 -0
  61. data/spec/features/admin/orders/new_order_spec.rb +161 -0
  62. data/spec/features/admin/orders/order_details_spec.rb +620 -0
  63. data/spec/features/admin/orders/payments_spec.rb +229 -0
  64. data/spec/features/admin/orders/risk_analysis_spec.rb +48 -0
  65. data/spec/features/admin/orders/shipments_spec.rb +64 -0
  66. data/spec/features/admin/orders/state_changes_spec.rb +21 -0
  67. data/spec/features/admin/products/edit/images_spec.rb +86 -0
  68. data/spec/features/admin/products/edit/products_spec.rb +64 -0
  69. data/spec/features/admin/products/edit/taxons_spec.rb +41 -0
  70. data/spec/features/admin/products/edit/variants_spec.rb +56 -0
  71. data/spec/features/admin/products/option_types_spec.rb +113 -0
  72. data/spec/features/admin/products/products_spec.rb +394 -0
  73. data/spec/features/admin/products/properties_spec.rb +140 -0
  74. data/spec/features/admin/products/prototypes_spec.rb +112 -0
  75. data/spec/features/admin/products/stock_management_spec.rb +123 -0
  76. data/spec/features/admin/products/taxonomies_spec.rb +52 -0
  77. data/spec/features/admin/products/variant_spec.rb +50 -0
  78. data/spec/features/admin/promotions/adjustments_spec.rb +255 -0
  79. data/spec/features/admin/promotions/option_value_rule_spec.rb +70 -0
  80. data/spec/features/admin/promotions/tiered_calculator_spec.rb +70 -0
  81. data/spec/features/admin/reports_spec.rb +61 -0
  82. data/spec/features/admin/stock_transfer_spec.rb +75 -0
  83. data/spec/features/admin/taxons_spec.rb +47 -0
  84. data/spec/features/admin/users_spec.rb +284 -0
  85. data/spec/helpers/admin/base_helper_spec.rb +24 -0
  86. data/spec/helpers/admin/navigation_helper_spec.rb +106 -0
  87. data/spec/helpers/admin/stock_movements_helper_spec.rb +30 -0
  88. data/spec/helpers/promotion_rules_helper_spec.rb +12 -0
  89. data/spec/models/spree/resource_spec.rb +48 -0
  90. data/spec/spec_helper.rb +133 -0
  91. data/spec/support/appear_before_matcher.rb +8 -0
  92. data/spec/support/ror_ringer.jpeg +0 -0
  93. data/spec/test_views/spree/admin/submodule/posts/edit.html.erb +1 -0
  94. data/spec/test_views/spree/admin/submodule/posts/new.html.erb +1 -0
  95. data/spec/test_views/spree/admin/widgets/edit.html.erb +1 -0
  96. data/spec/test_views/spree/admin/widgets/new.html.erb +1 -0
  97. data/spree_backend.gemspec +29 -0
  98. metadata +101 -14
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Stock Transfers', type: :feature, js: true do
4
+ stub_authorization!
5
+
6
+ it 'transfer between 2 locations' do
7
+ source_location = create(:stock_location_with_items, name: 'NY')
8
+ destination_location = create(:stock_location, name: 'SF')
9
+ variant = Spree::Variant.last
10
+
11
+ visit spree.admin_stock_transfers_path
12
+ click_on 'New Stock Transfer'
13
+ fill_in 'reference', with: 'PO 666'
14
+
15
+ select2_search variant.name, from: 'Variant'
16
+
17
+ click_button 'Add'
18
+ click_button 'Transfer Stock'
19
+
20
+ expect(page).to have_content('Reference PO 666')
21
+ expect(page).to have_content('NY')
22
+ expect(page).to have_content('SF')
23
+ expect(page).to have_content(variant.name)
24
+
25
+ transfer = Spree::StockTransfer.last
26
+ expect(transfer.stock_movements.size).to eq 2
27
+ end
28
+
29
+ describe 'received stock transfer' do
30
+ def it_is_received_stock_transfer(page)
31
+ expect(page).to have_content('Reference PO 666')
32
+ expect(page).not_to have_selector("#stock-location-source")
33
+ expect(page).to have_selector("#stock-location-destination")
34
+
35
+ transfer = Spree::StockTransfer.last
36
+ expect(transfer.stock_movements.size).to eq 1
37
+ expect(transfer.source_location).to be_nil
38
+ end
39
+
40
+ it 'receive stock to a single location' do
41
+ source_location = create(:stock_location_with_items, name: 'NY')
42
+ destination_location = create(:stock_location, name: 'SF')
43
+ variant = Spree::Variant.last
44
+
45
+ visit spree.new_admin_stock_transfer_path
46
+
47
+ fill_in 'reference', with: 'PO 666'
48
+ check 'transfer_receive_stock'
49
+ select('NY', from: 'transfer_destination_location_id')
50
+ select2_search variant.name, from: 'Variant'
51
+
52
+ click_button 'Add'
53
+ click_button 'Transfer Stock'
54
+
55
+ it_is_received_stock_transfer page
56
+ end
57
+
58
+ it 'forced to only receive there is only one location' do
59
+ source_location = create(:stock_location_with_items, name: 'NY')
60
+ variant = Spree::Variant.last
61
+
62
+ visit spree.new_admin_stock_transfer_path
63
+
64
+ fill_in 'reference', with: 'PO 666'
65
+
66
+ select('NY', from: 'transfer_destination_location_id')
67
+ select2_search variant.name, from: 'Variant'
68
+
69
+ click_button 'Add'
70
+ click_button 'Transfer Stock'
71
+
72
+ it_is_received_stock_transfer page
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ feature "Taxonomies and taxons" do
4
+ stub_authorization!
5
+
6
+ scenario "admin should be able to edit taxon" do
7
+ visit spree.new_admin_taxonomy_path
8
+
9
+ fill_in "Name", with: "Hello"
10
+ click_button "Create"
11
+
12
+ @taxonomy = Spree::Taxonomy.last
13
+
14
+ visit spree.edit_admin_taxonomy_taxon_path(@taxonomy, @taxonomy.root.id)
15
+
16
+ fill_in "taxon_name", with: "Shirt"
17
+ fill_in "taxon_description", with: "Discover our new rails shirts"
18
+
19
+ fill_in "permalink_part", with: "shirt-rails"
20
+ click_button "Update"
21
+ expect(page).to have_content("Taxon \"Shirt\" has been successfully updated!")
22
+ end
23
+
24
+ scenario "admin should be able to remove a product from a taxon", js: true do
25
+ taxon_1 = create(:taxon, name: 'Clothing')
26
+ product = create(:product)
27
+ product.taxons << taxon_1
28
+
29
+ visit spree.admin_taxons_path
30
+ select_clothing_from_select2
31
+
32
+ find('.product').hover
33
+ find('.product .dropdown-toggle').click
34
+ click_link "Delete From Taxon"
35
+ wait_for_ajax
36
+
37
+ visit current_path
38
+ select_clothing_from_select2
39
+
40
+ expect(page).to have_content("No results")
41
+ end
42
+
43
+ def select_clothing_from_select2
44
+ targetted_select2_search "Clothing", from: "#s2id_taxon_id"
45
+ wait_for_ajax
46
+ end
47
+ end
@@ -0,0 +1,284 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Users', type: :feature do
4
+ stub_authorization!
5
+
6
+ let!(:country) { create(:country) }
7
+ let!(:user_a) { create(:user_with_addresses, email: 'a@example.com') }
8
+ let!(:user_b) { create(:user_with_addresses, email: 'b@example.com') }
9
+
10
+ let(:order) { create(:completed_order_with_totals, user: user_a, number: "R123") }
11
+
12
+ let(:order_2) do
13
+ create(:completed_order_with_totals, user: user_a, number: "R456").tap do |o|
14
+ li = o.line_items.last
15
+ li.update_column(:price, li.price + 10)
16
+ end
17
+ end
18
+
19
+ let(:orders) { [order, order_2] }
20
+
21
+ before do
22
+ stub_const('Spree::User', create(:user, email: 'example@example.com').class)
23
+ end
24
+
25
+ shared_examples_for 'a user page' do
26
+ it 'has lifetime stats' do
27
+ orders
28
+ visit current_url # need to refresh after creating the orders for specs that did not require orders
29
+ within("#user-lifetime-stats") do
30
+ [:total_sales, :num_orders, :average_order_value, :member_since].each do |stat_name|
31
+ expect(page).to have_content Spree.t(stat_name)
32
+ end
33
+ expect(page).to have_content (order.total + order_2.total)
34
+ expect(page).to have_content orders.count
35
+ expect(page).to have_content (orders.sum(&:total) / orders.count)
36
+ expect(page).to have_content I18n.l(user_a.created_at.to_date)
37
+ end
38
+ end
39
+
40
+ it 'can go back to the users list' do
41
+ expect(page).to have_link Spree.t(:back_to_users_list), href: spree.admin_users_path
42
+ end
43
+
44
+ it 'can navigate to the account page' do
45
+ expect(page).to have_link Spree.t(:"admin.user.account"), href: spree.edit_admin_user_path(user_a)
46
+ end
47
+
48
+ it 'can navigate to the order history' do
49
+ expect(page).to have_link Spree.t(:"admin.user.orders"), href: spree.orders_admin_user_path(user_a)
50
+ end
51
+
52
+ it 'can navigate to the items purchased' do
53
+ expect(page).to have_link Spree.t(:"admin.user.items"), href: spree.items_admin_user_path(user_a)
54
+ end
55
+ end
56
+
57
+ shared_examples_for 'a sortable attribute' do
58
+ before { click_link sort_link }
59
+
60
+ it "can sort asc" do
61
+ within_table(table_id) do
62
+ expect(page).to have_text text_match_1
63
+ expect(page).to have_text text_match_2
64
+ expect(text_match_1).to appear_before text_match_2
65
+ end
66
+ end
67
+
68
+ it "can sort desc" do
69
+ within_table(table_id) do
70
+ click_link sort_link
71
+
72
+ expect(page).to have_text text_match_1
73
+ expect(page).to have_text text_match_2
74
+ expect(text_match_2).to appear_before text_match_1
75
+ end
76
+ end
77
+ end
78
+
79
+ before do
80
+ visit spree.admin_path
81
+ click_link 'Users'
82
+ end
83
+
84
+ context 'users index' do
85
+
86
+ context "email" do
87
+ it_behaves_like "a sortable attribute" do
88
+ let(:text_match_1) { user_a.email }
89
+ let(:text_match_2) { user_b.email }
90
+ let(:table_id) { "listing_users" }
91
+ let(:sort_link) { "users_email_title" }
92
+ end
93
+ end
94
+
95
+ it 'displays the correct results for a user search' do
96
+ fill_in 'q_email_cont', with: user_a.email, visible: false
97
+ click_button 'Search', visible: false
98
+ within_table('listing_users') do
99
+ expect(page).to have_text user_a.email
100
+ expect(page).not_to have_text user_b.email
101
+ end
102
+ end
103
+ end
104
+
105
+ context 'editing users' do
106
+ before { click_link user_a.email }
107
+
108
+ it_behaves_like 'a user page'
109
+
110
+ it 'can edit the user email' do
111
+ fill_in 'user_email', with: 'a@example.com99'
112
+ click_button 'Update'
113
+
114
+ expect(user_a.reload.email).to eq 'a@example.com99'
115
+ expect(page).to have_text 'Account updated'
116
+ expect(find_field('user_email').value).to eq 'a@example.com99'
117
+ end
118
+
119
+ it 'can edit the user password' do
120
+ fill_in 'user_password', with: 'welcome'
121
+ fill_in 'user_password_confirmation', with: 'welcome'
122
+ click_button 'Update'
123
+
124
+ expect(page).to have_text 'Account updated'
125
+ end
126
+
127
+ it 'can edit user roles' do
128
+ Spree::Role.create name: "admin"
129
+ click_link 'Users'
130
+ click_link user_a.email
131
+
132
+ check 'user_spree_role_admin'
133
+ click_button 'Update'
134
+ expect(page).to have_text 'Account updated'
135
+ expect(find_field('user_spree_role_admin')['checked']).to be true
136
+ end
137
+
138
+ it 'can edit user shipping address' do
139
+ click_link "Addresses"
140
+
141
+ within("#admin_user_edit_addresses") do
142
+ fill_in "user_ship_address_attributes_address1", with: "1313 Mockingbird Ln"
143
+ click_button 'Update'
144
+ expect(find_field('user_ship_address_attributes_address1').value).to eq "1313 Mockingbird Ln"
145
+ end
146
+
147
+ expect(user_a.reload.ship_address.address1).to eq "1313 Mockingbird Ln"
148
+ end
149
+
150
+ it 'can edit user billing address' do
151
+ click_link "Addresses"
152
+
153
+ within("#admin_user_edit_addresses") do
154
+ fill_in "user_bill_address_attributes_address1", with: "1313 Mockingbird Ln"
155
+ click_button 'Update'
156
+ expect(find_field('user_bill_address_attributes_address1').value).to eq "1313 Mockingbird Ln"
157
+ end
158
+
159
+ expect(user_a.reload.bill_address.address1).to eq "1313 Mockingbird Ln"
160
+ end
161
+
162
+ context 'no api key exists' do
163
+ it 'can generate a new api key' do
164
+ within("#admin_user_edit_api_key") do
165
+ expect(user_a.spree_api_key).to be_blank
166
+ click_button Spree.t('generate_key', :scope => 'api')
167
+ end
168
+
169
+ expect(user_a.reload.spree_api_key).to be_present
170
+
171
+ within("#admin_user_edit_api_key") do
172
+ expect(find("#current-api-key").text).to match /Key: #{user_a.spree_api_key}/
173
+ end
174
+ end
175
+ end
176
+
177
+ context 'an api key exists' do
178
+ before do
179
+ user_a.generate_spree_api_key!
180
+ expect(user_a.reload.spree_api_key).to be_present
181
+ visit current_path
182
+ end
183
+
184
+ it 'can clear an api key' do
185
+ within("#admin_user_edit_api_key") do
186
+ click_button Spree.t('clear_key', :scope => 'api')
187
+ end
188
+
189
+ expect(user_a.reload.spree_api_key).to be_blank
190
+ expect { find("#current-api-key") }.to raise_error Capybara::ElementNotFound
191
+ end
192
+
193
+ it 'can regenerate an api key' do
194
+ old_key = user_a.spree_api_key
195
+
196
+ within("#admin_user_edit_api_key") do
197
+ click_button Spree.t('regenerate_key', :scope => 'api')
198
+ end
199
+
200
+ expect(user_a.reload.spree_api_key).to be_present
201
+ expect(user_a.reload.spree_api_key).not_to eq old_key
202
+
203
+ within("#admin_user_edit_api_key") do
204
+ expect(find("#current-api-key").text).to match /Key: #{user_a.spree_api_key}/
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ context 'order history with sorting' do
211
+
212
+ before do
213
+ orders
214
+ click_link user_a.email
215
+ within("#sidebar") { click_link Spree.t(:"admin.user.orders") }
216
+ end
217
+
218
+ it_behaves_like 'a user page'
219
+
220
+ context "completed_at" do
221
+ it_behaves_like "a sortable attribute" do
222
+ let(:text_match_1) { I18n.l(order.completed_at.to_date) }
223
+ let(:text_match_2) { I18n.l(order_2.completed_at.to_date) }
224
+ let(:table_id) { "listing_orders" }
225
+ let(:sort_link) { "orders_completed_at_title" }
226
+ end
227
+ end
228
+
229
+ [:number, :state, :total].each do |attr|
230
+ context attr do
231
+ it_behaves_like "a sortable attribute" do
232
+ let(:text_match_1) { order.send(attr).to_s }
233
+ let(:text_match_2) { order_2.send(attr).to_s }
234
+ let(:table_id) { "listing_orders" }
235
+ let(:sort_link) { "orders_#{attr}_title" }
236
+ end
237
+ end
238
+ end
239
+ end
240
+
241
+ context 'items purchased with sorting' do
242
+
243
+ before do
244
+ orders
245
+ click_link user_a.email
246
+ within("#sidebar") { click_link Spree.t(:"admin.user.items") }
247
+ end
248
+
249
+ it_behaves_like 'a user page'
250
+
251
+ context "completed_at" do
252
+ it_behaves_like "a sortable attribute" do
253
+ let(:text_match_1) { I18n.l(order.completed_at.to_date) }
254
+ let(:text_match_2) { I18n.l(order_2.completed_at.to_date) }
255
+ let(:table_id) { "listing_items" }
256
+ let(:sort_link) { "orders_completed_at_title" }
257
+ end
258
+ end
259
+
260
+ [:number, :state].each do |attr|
261
+ context attr do
262
+ it_behaves_like "a sortable attribute" do
263
+ let(:text_match_1) { order.send(attr).to_s }
264
+ let(:text_match_2) { order_2.send(attr).to_s }
265
+ let(:table_id) { "listing_items" }
266
+ let(:sort_link) { "orders_#{attr}_title" }
267
+ end
268
+ end
269
+ end
270
+
271
+ it "has item attributes" do
272
+ items = order.line_items | order_2.line_items
273
+ expect(page).to have_table 'listing_items'
274
+ within_table('listing_items') do
275
+ items.each do |item|
276
+ expect(page).to have_selector(".item-name", text: item.product.name)
277
+ expect(page).to have_selector(".item-price", text: item.single_money.to_html)
278
+ expect(page).to have_selector(".item-quantity", text: item.quantity)
279
+ expect(page).to have_selector(".item-total", text: item.money.to_html)
280
+ end
281
+ end
282
+ end
283
+ end
284
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Admin::BaseHelper, :type => :helper do
4
+ include Spree::Admin::BaseHelper
5
+
6
+ context "#datepicker_field_value" do
7
+ it "should return nil when date is empty" do
8
+ date = nil
9
+ expect(datepicker_field_value(date)).to be_nil
10
+ end
11
+
12
+ it "should return a formatted date when date is present" do
13
+ date = "2013-08-14".to_time
14
+ expect(datepicker_field_value(date)).to eq("2013/08/14")
15
+ end
16
+ end
17
+
18
+ context "#plural_resource_name" do
19
+ it "should return correct form of class" do
20
+ resource_class = Spree::Product
21
+ expect(plural_resource_name(resource_class)).to eq("Products")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,106 @@
1
+ # coding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe Spree::Admin::NavigationHelper, type: :helper do
5
+
6
+ describe "#tab" do
7
+ before do
8
+ allow(helper).to receive(:cannot?).and_return false
9
+ end
10
+
11
+ context "creating an admin tab" do
12
+ it "should capitalize the first letter of each word in the tab's label" do
13
+ admin_tab = helper.tab(:orders)
14
+ expect(admin_tab).to include("Orders")
15
+ end
16
+ end
17
+
18
+ it "should accept options with label and capitalize each word of it" do
19
+ admin_tab = helper.tab(:orders, label: "delivered orders")
20
+ expect(admin_tab).to include("Delivered Orders")
21
+ end
22
+
23
+ it "should capitalize words with unicode characters" do
24
+ # overview
25
+ admin_tab = helper.tab(:orders, label: "přehled")
26
+ expect(admin_tab).to include("Přehled")
27
+ end
28
+
29
+ describe "selection" do
30
+ context "when match_path option is not supplied" do
31
+ subject(:tab) { helper.tab(:orders) }
32
+
33
+ it "should be selected if the controller matches" do
34
+ allow(controller).to receive(:controller_name).and_return("orders")
35
+ expect(subject).to include('selected')
36
+ end
37
+
38
+ it "should not be selected if the controller does not match" do
39
+ allow(controller).to receive(:controller_name).and_return("bonobos")
40
+ expect(subject).not_to include('selected')
41
+ end
42
+
43
+ end
44
+
45
+ context "when match_path option is supplied" do
46
+ before do
47
+ allow(helper).to receive(:request).and_return(double(ActionDispatch::Request, fullpath: "/admin/orders/edit/1"))
48
+ end
49
+
50
+ it "should be selected if the fullpath matches" do
51
+ allow(controller).to receive(:controller_name).and_return("bonobos")
52
+ tab = helper.tab(:orders, label: "delivered orders", match_path: '/orders')
53
+ expect(tab).to include('selected')
54
+ end
55
+
56
+ it "should be selected if the fullpath matches a regular expression" do
57
+ allow(controller).to receive(:controller_name).and_return("bonobos")
58
+ tab = helper.tab(:orders, label: "delivered orders", match_path: /orders$|orders\//)
59
+ expect(tab).to include('selected')
60
+ end
61
+
62
+ it "should not be selected if the fullpath does not match" do
63
+ allow(controller).to receive(:controller_name).and_return("bonobos")
64
+ tab = helper.tab(:orders, label: "delivered orders", match_path: '/shady')
65
+ expect(tab).not_to include('selected')
66
+ end
67
+
68
+ it "should not be selected if the fullpath does not match a regular expression" do
69
+ allow(controller).to receive(:controller_name).and_return("bonobos")
70
+ tab = helper.tab(:orders, label: "delivered orders", match_path: /shady$|shady\//)
71
+ expect(tab).not_to include('selected')
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '#klass_for' do
78
+
79
+ it 'returns correct klass for Spree model' do
80
+ expect(klass_for(:products)).to eq(Spree::Product)
81
+ expect(klass_for(:product_properties)).to eq(Spree::ProductProperty)
82
+ end
83
+
84
+ it 'returns correct klass for non-spree model' do
85
+ class MyUser
86
+ end
87
+ expect(klass_for(:my_users)).to eq(MyUser)
88
+
89
+ Object.send(:remove_const, 'MyUser')
90
+ end
91
+
92
+ it 'returns correct namespaced klass for non-spree model' do
93
+ module My
94
+ class User
95
+ end
96
+ end
97
+
98
+ expect(klass_for(:my_users)).to eq(My::User)
99
+
100
+ My.send(:remove_const, 'User')
101
+ Object.send(:remove_const, 'My')
102
+ end
103
+
104
+ end
105
+
106
+ end