solidus_backend 2.10.2 → 2.11.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/app/assets/javascripts/spree/backend.js +4 -1
- data/app/assets/javascripts/spree/backend/adjustments.js +1 -1
- data/app/assets/javascripts/spree/backend/admin.js +18 -29
- data/app/assets/javascripts/spree/backend/collections/states.js +1 -1
- data/app/assets/javascripts/spree/backend/components/selectable_table.js +5 -0
- data/app/assets/javascripts/spree/backend/components/selectable_table/return_items.js +5 -0
- data/app/assets/javascripts/spree/backend/components/selectable_table/summary.js +7 -0
- data/app/assets/javascripts/spree/backend/components/sortable_table.js +31 -25
- data/app/assets/javascripts/spree/backend/models/order.js +3 -3
- data/app/assets/javascripts/spree/backend/models/payment.js +1 -1
- data/app/assets/javascripts/spree/backend/models/shipment.js +1 -1
- data/app/assets/javascripts/spree/backend/models/stock_item.js +1 -1
- data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +2 -2
- data/app/assets/javascripts/spree/backend/option_value_picker.js +2 -2
- data/app/assets/javascripts/spree/backend/product_picker.js +2 -2
- data/app/assets/javascripts/spree/backend/routes.js +40 -21
- data/app/assets/javascripts/spree/backend/shipments.js +5 -5
- data/app/assets/javascripts/spree/backend/shipping_methods/stock_locations_picker.js +18 -0
- data/app/assets/javascripts/spree/backend/stock_management.js +4 -2
- data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +2 -2
- data/app/assets/javascripts/spree/backend/taxons.js +3 -3
- data/app/assets/javascripts/spree/backend/templates/index.js +2 -0
- data/app/assets/javascripts/spree/backend/templates/orders/customer_details/autocomplete.hbs +2 -2
- data/app/assets/javascripts/spree/backend/templates/stock_items/stock_location_stock_item.hbs +5 -1
- data/app/assets/javascripts/spree/backend/templates/tables/return_item_sum_amount.hbs +7 -0
- data/app/assets/javascripts/spree/backend/templates/tables/selectable_label.hbs +6 -0
- data/app/assets/javascripts/spree/backend/user_picker.js +3 -4
- data/app/assets/javascripts/spree/backend/variant_autocomplete.js +2 -2
- data/app/assets/javascripts/spree/backend/views/cart/empty_cart_button.js +2 -2
- data/app/assets/javascripts/spree/backend/views/index.js +4 -0
- data/app/assets/javascripts/spree/backend/views/order/address.js +1 -1
- data/app/assets/javascripts/spree/backend/views/order/customer_select.js +2 -3
- data/app/assets/javascripts/spree/backend/views/order/details_adjustments.js +4 -1
- data/app/assets/javascripts/spree/backend/views/stock/edit_stock_item_row.js +4 -0
- data/app/assets/javascripts/spree/backend/views/tables/return_items.js +9 -0
- data/app/assets/javascripts/spree/backend/views/tables/selectable_table.js +70 -0
- data/app/assets/javascripts/spree/backend/views/tables/selectable_table/sum_return_item_amount.js +32 -0
- data/app/assets/javascripts/spree/backend/views/tables/selectable_table/summary.js +45 -0
- data/app/assets/stylesheets/spree/backend/components/_navigation.scss +4 -5
- data/app/assets/stylesheets/spree/backend/sections/_orders.scss +5 -1
- data/app/assets/stylesheets/spree/backend/sections/_style_guide.scss +4 -0
- data/app/assets/stylesheets/spree/backend/shared/_forms.scss +1 -0
- data/app/controllers/spree/admin/base_controller.rb +6 -0
- data/app/controllers/spree/admin/cancellations_controller.rb +2 -0
- data/app/controllers/spree/admin/customer_returns_controller.rb +4 -4
- data/app/controllers/spree/admin/images_controller.rb +2 -1
- data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -0
- data/app/controllers/spree/admin/orders_controller.rb +7 -2
- data/app/controllers/spree/admin/payments_controller.rb +3 -1
- data/app/controllers/spree/admin/product_properties_controller.rb +1 -1
- data/app/controllers/spree/admin/products_controller.rb +18 -24
- data/app/controllers/spree/admin/promotion_codes_controller.rb +9 -4
- data/app/controllers/spree/admin/refunds_controller.rb +20 -0
- data/app/controllers/spree/admin/resource_controller.rb +27 -7
- data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
- data/app/controllers/spree/admin/root_controller.rb +1 -1
- data/app/controllers/spree/admin/search_controller.rb +1 -2
- data/app/controllers/spree/admin/stock_items_controller.rb +6 -5
- data/app/controllers/spree/admin/stock_locations_controller.rb +4 -0
- data/app/controllers/spree/admin/stock_movements_controller.rb +7 -0
- data/app/controllers/spree/admin/taxons_controller.rb +12 -1
- data/app/controllers/spree/admin/users/api_key_controller.rb +29 -0
- data/app/controllers/spree/admin/users_controller.rb +37 -20
- data/app/controllers/spree/admin/variants_controller.rb +4 -2
- data/app/controllers/spree/admin/zones_controller.rb +1 -1
- data/app/helpers/spree/admin/base_helper.rb +4 -0
- data/app/helpers/spree/admin/customer_returns_helper.rb +1 -1
- data/app/helpers/spree/admin/navigation_helper.rb +1 -1
- data/app/helpers/spree/admin/orders_helper.rb +8 -4
- data/app/helpers/spree/admin/stock_movements_helper.rb +8 -4
- data/app/views/spree/admin/customer_returns/_return_item_selection.html.erb +2 -3
- data/app/views/spree/admin/images/index.html.erb +25 -21
- data/app/views/spree/admin/option_types/_option_value_fields.html.erb +8 -1
- data/app/views/spree/admin/option_types/edit.html.erb +3 -1
- data/app/views/spree/admin/orders/customer_details/_form.html.erb +13 -13
- data/app/views/spree/admin/orders/index.html.erb +23 -13
- data/app/views/spree/admin/payment_methods/_form.html.erb +7 -2
- data/app/views/spree/admin/payments/index.html.erb +3 -1
- data/app/views/spree/admin/prices/_master_variant_table.html.erb +3 -3
- data/app/views/spree/admin/prices/_table.html.erb +3 -3
- data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +7 -2
- data/app/views/spree/admin/product_properties/index.html.erb +14 -2
- data/app/views/spree/admin/products/_form.html.erb +13 -2
- data/app/views/spree/admin/products/index.html.erb +2 -2
- data/app/views/spree/admin/promotion_codes/index.html.erb +1 -1
- data/app/views/spree/admin/promotions/_actions.html.erb +1 -1
- data/app/views/spree/admin/promotions/_activations_new.html.erb +1 -1
- data/app/views/spree/admin/promotions/_rules.html.erb +1 -1
- data/app/views/spree/admin/promotions/edit.html.erb +2 -2
- data/app/views/spree/admin/promotions/index.html.erb +12 -5
- data/app/views/spree/admin/return_authorizations/_form.html.erb +3 -10
- data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
- data/app/views/spree/admin/search/users.json.jbuilder +15 -1
- data/app/views/spree/admin/shared/_address.html.erb +6 -6
- data/app/views/spree/admin/shared/_address_form.html.erb +15 -8
- data/app/views/spree/admin/shared/_order_submenu.html.erb +4 -4
- data/app/views/spree/admin/shared/_payments_tabs.html.erb +1 -1
- data/app/views/spree/admin/shared/_settings_checkout_tabs.html.erb +5 -5
- data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +6 -6
- data/app/views/spree/admin/shared/_shipping_tabs.html.erb +3 -3
- data/app/views/spree/admin/shared/_taxes_tabs.html.erb +2 -2
- data/app/views/spree/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
- data/app/views/spree/admin/shipping_methods/_form.html.erb +18 -0
- data/app/views/spree/admin/stock_items/_stock_management.html.erb +1 -1
- data/app/views/spree/admin/stock_locations/edit.html.erb +1 -1
- data/app/views/spree/admin/stock_locations/index.html.erb +3 -1
- data/app/views/spree/admin/stock_movements/index.html.erb +30 -1
- data/app/views/spree/admin/store_credits/index.html.erb +1 -1
- data/app/views/spree/admin/stores/_form.html.erb +6 -0
- data/app/views/spree/admin/style_guide/topics/tables/_building_tables.html.erb +27 -3
- data/app/views/spree/admin/tax_categories/_form.html.erb +1 -0
- data/app/views/spree/admin/users/_form.html.erb +2 -2
- data/app/views/spree/admin/users/_tabs.html.erb +1 -1
- data/app/views/spree/admin/users/edit.html.erb +4 -4
- data/app/views/spree/admin/users/items.html.erb +5 -3
- data/app/views/spree/admin/users/orders.html.erb +5 -3
- data/app/views/spree/admin/variants/_table_filter.html.erb +1 -1
- data/app/views/spree/admin/variants/index.html.erb +2 -2
- data/config/initializers/form_builder.rb +2 -2
- data/lib/spree/backend/engine.rb +0 -2
- data/lib/spree/backend_configuration.rb +14 -1
- data/solidus_backend.gemspec +4 -4
- metadata +24 -123
- data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +0 -35
- data/script/rails +0 -10
- data/spec/controllers/spree/admin/base_controller_spec.rb +0 -26
- data/spec/controllers/spree/admin/cancellations_controller_spec.rb +0 -83
- data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +0 -235
- data/spec/controllers/spree/admin/locale_controller_spec.rb +0 -45
- data/spec/controllers/spree/admin/missing_products_controller_spec.rb +0 -18
- data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +0 -128
- data/spec/controllers/spree/admin/orders_controller_spec.rb +0 -408
- data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +0 -95
- data/spec/controllers/spree/admin/payments_controller_spec.rb +0 -194
- data/spec/controllers/spree/admin/prices_controller_spec.rb +0 -45
- data/spec/controllers/spree/admin/product_properties_controller_spec.rb +0 -71
- data/spec/controllers/spree/admin/products_controller_spec.rb +0 -270
- data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +0 -23
- data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +0 -32
- data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +0 -36
- data/spec/controllers/spree/admin/promotions_controller_spec.rb +0 -122
- data/spec/controllers/spree/admin/refunds_controller_spec.rb +0 -35
- data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +0 -137
- data/spec/controllers/spree/admin/resource_controller_spec.rb +0 -201
- data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +0 -291
- data/spec/controllers/spree/admin/return_items_controller_spec.rb +0 -29
- data/spec/controllers/spree/admin/root_controller_spec.rb +0 -43
- data/spec/controllers/spree/admin/search_controller_spec.rb +0 -106
- data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +0 -16
- data/spec/controllers/spree/admin/stock_items_controller_spec.rb +0 -52
- data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +0 -44
- data/spec/controllers/spree/admin/store_credits_controller_spec.rb +0 -311
- data/spec/controllers/spree/admin/users_controller_spec.rb +0 -287
- data/spec/controllers/spree/admin/variants_controller_spec.rb +0 -71
- data/spec/features/admin/configuration/payment_methods_spec.rb +0 -176
- data/spec/features/admin/configuration/shipping_methods_spec.rb +0 -126
- data/spec/features/admin/configuration/stock_locations_spec.rb +0 -54
- data/spec/features/admin/configuration/store_spec.rb +0 -62
- data/spec/features/admin/configuration/tax_categories_spec.rb +0 -58
- data/spec/features/admin/configuration/tax_rates_spec.rb +0 -31
- data/spec/features/admin/configuration/taxonomies_spec.rb +0 -61
- data/spec/features/admin/configuration/zones_spec.rb +0 -41
- data/spec/features/admin/homepage_spec.rb +0 -86
- data/spec/features/admin/javascript_format_money_spec.rb +0 -22
- data/spec/features/admin/locale_spec.rb +0 -34
- data/spec/features/admin/orders/adjustments_promotions_spec.rb +0 -55
- data/spec/features/admin/orders/adjustments_spec.rb +0 -130
- data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +0 -45
- data/spec/features/admin/orders/cancelling_inventory_spec.rb +0 -50
- data/spec/features/admin/orders/customer_details_spec.rb +0 -203
- data/spec/features/admin/orders/customer_returns_spec.rb +0 -41
- data/spec/features/admin/orders/line_items_spec.rb +0 -52
- data/spec/features/admin/orders/listing_spec.rb +0 -186
- data/spec/features/admin/orders/log_entries_spec.rb +0 -56
- data/spec/features/admin/orders/new_order_spec.rb +0 -379
- data/spec/features/admin/orders/new_refund_spec.rb +0 -35
- data/spec/features/admin/orders/order_details_spec.rb +0 -591
- data/spec/features/admin/orders/payments_spec.rb +0 -330
- data/spec/features/admin/orders/return_authorizations_spec.rb +0 -56
- data/spec/features/admin/orders/return_payment_state_spec.rb +0 -65
- data/spec/features/admin/orders/risk_analysis_spec.rb +0 -49
- data/spec/features/admin/orders/shipments_spec.rb +0 -145
- data/spec/features/admin/payments/store_credits_spec.rb +0 -23
- data/spec/features/admin/products/edit/images_spec.rb +0 -76
- data/spec/features/admin/products/edit/products_spec.rb +0 -92
- data/spec/features/admin/products/edit/taxons_spec.rb +0 -57
- data/spec/features/admin/products/edit/variants_spec.rb +0 -63
- data/spec/features/admin/products/option_types_spec.rb +0 -116
- data/spec/features/admin/products/pricing_spec.rb +0 -127
- data/spec/features/admin/products/products_spec.rb +0 -348
- data/spec/features/admin/products/properties_spec.rb +0 -141
- data/spec/features/admin/products/stock_management_spec.rb +0 -101
- data/spec/features/admin/products/variant_spec.rb +0 -89
- data/spec/features/admin/promotion_adjustments_spec.rb +0 -286
- data/spec/features/admin/promotions/option_value_rule_spec.rb +0 -90
- data/spec/features/admin/promotions/product_rule_spec.rb +0 -35
- data/spec/features/admin/promotions/promotion_categories_spec.rb +0 -83
- data/spec/features/admin/promotions/promotion_code_batches_spec.rb +0 -37
- data/spec/features/admin/promotions/promotion_code_spec.rb +0 -31
- data/spec/features/admin/promotions/promotion_spec.rb +0 -52
- data/spec/features/admin/promotions/tiered_calculator_spec.rb +0 -76
- data/spec/features/admin/promotions/user_rule_spec.rb +0 -42
- data/spec/features/admin/reimbursements_spec.rb +0 -18
- data/spec/features/admin/store_credits_spec.rb +0 -132
- data/spec/features/admin/stores_spec.rb +0 -37
- data/spec/features/admin/style_guide_spec.rb +0 -14
- data/spec/features/admin/taxons_spec.rb +0 -90
- data/spec/features/admin/users_spec.rb +0 -412
- data/spec/fixtures/files/ror_ringer.jpeg +0 -0
- data/spec/helpers/admin/base_helper_spec.rb +0 -49
- data/spec/helpers/admin/navigation_helper_spec.rb +0 -139
- data/spec/helpers/admin/stock_movements_helper_spec.rb +0 -29
- data/spec/helpers/admin/store_credit_events_helper_spec.rb +0 -97
- data/spec/helpers/promotion_rules_helper_spec.rb +0 -14
- data/spec/javascripts/fixtures/_boot.html.erb +0 -8
- data/spec/javascripts/fixtures/number_with_currency/with_currency_select.html.erb +0 -3
- data/spec/javascripts/fixtures/number_with_currency/without_select.html.erb +0 -3
- data/spec/javascripts/format_money_spec.js +0 -48
- data/spec/javascripts/spec_helper.js +0 -13
- data/spec/javascripts/support/show_errors.js +0 -8
- data/spec/javascripts/support/with_translations.js +0 -11
- data/spec/javascripts/translation_spec.js +0 -58
- data/spec/javascripts/views/number_with_currency_spec.js +0 -72
- data/spec/lib/spree/backend_configuration/menu_item_spec.rb +0 -17
- data/spec/lib/spree/backend_configuration_spec.rb +0 -22
- data/spec/spec_helper.rb +0 -123
- data/spec/support/appear_before_matcher.rb +0 -10
- data/spec/support/feature/base_feature_helper.rb +0 -17
- data/spec/support/feature/order_feature_helper.rb +0 -27
- data/spec/teaspoon_env.rb +0 -51
- data/spec/test_views/spree/admin/widgets/edit.html.erb +0 -1
- data/spec/test_views/spree/admin/widgets/new.html.erb +0 -1
- data/spec/views/spree/admin/shared/navigation_footer_spec.rb +0 -67
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe "Product Variants", type: :feature do
|
|
6
|
-
stub_authorization!
|
|
7
|
-
|
|
8
|
-
before(:each) do
|
|
9
|
-
visit spree.admin_path
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context "editing variant option types", js: true do
|
|
13
|
-
let!(:product) { create(:product) }
|
|
14
|
-
|
|
15
|
-
it "should allow an admin to create option types for a variant" do
|
|
16
|
-
click_nav "Products"
|
|
17
|
-
|
|
18
|
-
within_row(1) { click_icon :edit }
|
|
19
|
-
|
|
20
|
-
within('nav > ul.tabs') { click_link "Variants" }
|
|
21
|
-
expect(page).to have_content("To add variants, you must first define")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "allows admin to create a variant if there are option types" do
|
|
25
|
-
click_nav "Products"
|
|
26
|
-
click_link "Option Types"
|
|
27
|
-
click_link "new_option_type_link"
|
|
28
|
-
fill_in "option_type_name", with: "shirt colors"
|
|
29
|
-
fill_in "option_type_presentation", with: "colors"
|
|
30
|
-
click_button "Create"
|
|
31
|
-
expect(page).to have_content("successfully created!")
|
|
32
|
-
|
|
33
|
-
page.find('#option_type_option_values_attributes_0_name').set('color')
|
|
34
|
-
page.find('#option_type_option_values_attributes_0_presentation').set('black')
|
|
35
|
-
click_button "Update"
|
|
36
|
-
expect(page).to have_content("successfully updated!")
|
|
37
|
-
|
|
38
|
-
visit spree.admin_path
|
|
39
|
-
click_nav "Products"
|
|
40
|
-
within('table.index tbody tr:nth-child(1)') do
|
|
41
|
-
click_icon :edit
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
select2_search "shirt", from: "Option Types"
|
|
45
|
-
click_button "Update"
|
|
46
|
-
expect(page).to have_content("successfully updated!")
|
|
47
|
-
|
|
48
|
-
within('nav > ul.tabs') { click_link "Variants" }
|
|
49
|
-
click_link "New Variant"
|
|
50
|
-
|
|
51
|
-
select "black", from: "Colors"
|
|
52
|
-
fill_in "variant_sku", with: "A100"
|
|
53
|
-
click_button "Create"
|
|
54
|
-
expect(page).to have_content("successfully created!")
|
|
55
|
-
|
|
56
|
-
within(".index") do
|
|
57
|
-
expect(page).to have_content("19.99")
|
|
58
|
-
expect(page).to have_content("black")
|
|
59
|
-
expect(page).to have_content("A100")
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe "Option Types", type: :feature do
|
|
6
|
-
stub_authorization!
|
|
7
|
-
|
|
8
|
-
before(:each) do
|
|
9
|
-
visit spree.admin_path
|
|
10
|
-
click_nav "Products"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
context "listing option types" do
|
|
14
|
-
it "should list existing option types" do
|
|
15
|
-
create(:option_type, name: "tshirt-color", presentation: "Color")
|
|
16
|
-
create(:option_type, name: "tshirt-size", presentation: "Size")
|
|
17
|
-
|
|
18
|
-
click_link "Option Types"
|
|
19
|
-
within("table#listing_option_types") do
|
|
20
|
-
expect(page).to have_content("Color")
|
|
21
|
-
expect(page).to have_content("tshirt-color")
|
|
22
|
-
expect(page).to have_content("Size")
|
|
23
|
-
expect(page).to have_content("tshirt-size")
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
context "creating a new option type" do
|
|
29
|
-
it "should allow an admin to create a new option type", js: true do
|
|
30
|
-
click_link "Option Types"
|
|
31
|
-
click_link "new_option_type_link"
|
|
32
|
-
expect(page).to have_content("New Option Type")
|
|
33
|
-
fill_in "option_type_name", with: "shirt colors"
|
|
34
|
-
fill_in "option_type_presentation", with: "colors"
|
|
35
|
-
click_button "Create"
|
|
36
|
-
expect(page).to have_content("successfully created!")
|
|
37
|
-
|
|
38
|
-
page.find('#option_type_option_values_attributes_0_name').set('color')
|
|
39
|
-
page.find('#option_type_option_values_attributes_0_presentation').set('black')
|
|
40
|
-
|
|
41
|
-
click_button "Update"
|
|
42
|
-
expect(page).to have_content("successfully updated!")
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
context "editing an existing option type" do
|
|
47
|
-
it "should allow an admin to update an existing option type" do
|
|
48
|
-
create(:option_type, name: "tshirt-color", presentation: "Color")
|
|
49
|
-
create(:option_type, name: "tshirt-size", presentation: "Size")
|
|
50
|
-
click_link "Option Types"
|
|
51
|
-
within('table#listing_option_types') do
|
|
52
|
-
find('tr', text: 'Size').click_link "Edit"
|
|
53
|
-
end
|
|
54
|
-
fill_in "option_type_name", with: "foo-size 99"
|
|
55
|
-
click_button "Update"
|
|
56
|
-
expect(page).to have_content("successfully updated!")
|
|
57
|
-
expect(page).to have_content("foo-size 99")
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Regression test for https://github.com/spree/spree/issues/2277
|
|
62
|
-
it "can remove an option value from an option type", js: true do
|
|
63
|
-
option_value = create(:option_value)
|
|
64
|
-
click_link "Option Types"
|
|
65
|
-
within('table#listing_option_types') { click_icon :edit }
|
|
66
|
-
expect(page).to have_title("#{option_value.option_type.name} - Option Types - Products")
|
|
67
|
-
expect(page).to have_css("tbody#option_values tr", count: 1)
|
|
68
|
-
within("tbody#option_values") do
|
|
69
|
-
find('.spree_remove_fields').click
|
|
70
|
-
end
|
|
71
|
-
# Assert that the field is hidden automatically
|
|
72
|
-
expect(page).to have_no_css("tbody#option_values tr")
|
|
73
|
-
|
|
74
|
-
# Ensure the DELETE request finishes
|
|
75
|
-
expect(page).to have_no_css("#progress")
|
|
76
|
-
|
|
77
|
-
# Then assert that on a page refresh that it's still not visible
|
|
78
|
-
visit page.current_url
|
|
79
|
-
# What *is* visible is a new option value field, with blank values
|
|
80
|
-
# Sometimes the page doesn't load before the all check is done
|
|
81
|
-
# lazily finding the element gives the page 10 seconds
|
|
82
|
-
expect(page).to have_css("tbody#option_values")
|
|
83
|
-
all("tbody#option_values tr input", count: 2).each do |input|
|
|
84
|
-
expect(input.value).to be_blank
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# Regression test for https://github.com/spree/spree/issues/3204
|
|
89
|
-
it "can remove a non-persisted option value from an option type", js: true do
|
|
90
|
-
create(:option_type)
|
|
91
|
-
click_link "Option Types"
|
|
92
|
-
within('table#listing_option_types') { click_icon :edit }
|
|
93
|
-
|
|
94
|
-
expect(page).to have_css("tbody#option_values tr", count: 1)
|
|
95
|
-
|
|
96
|
-
# Add a new option type
|
|
97
|
-
click_link "Add Option Value"
|
|
98
|
-
expect(page).to have_css("tbody#option_values tr", count: 2)
|
|
99
|
-
|
|
100
|
-
# Remove default option type
|
|
101
|
-
within("tbody#option_values") do
|
|
102
|
-
within_row(1) do
|
|
103
|
-
find('.fa-trash').click
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
# Assert that the field is hidden automatically
|
|
107
|
-
expect(page).to have_css("tbody#option_values tr", count: 1)
|
|
108
|
-
|
|
109
|
-
# Remove added option type
|
|
110
|
-
within("tbody#option_values") do
|
|
111
|
-
find('.fa-trash').click
|
|
112
|
-
end
|
|
113
|
-
# Assert that the field is hidden automatically
|
|
114
|
-
expect(page).to have_css("tbody#option_values tr", count: 0)
|
|
115
|
-
end
|
|
116
|
-
end
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe 'Pricing' do
|
|
6
|
-
stub_authorization!
|
|
7
|
-
|
|
8
|
-
let(:product) { create(:product) }
|
|
9
|
-
|
|
10
|
-
before do
|
|
11
|
-
visit spree.edit_admin_product_path(product)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
it 'has a Prices tab' do
|
|
15
|
-
within(".tabs") do
|
|
16
|
-
expect(page).to have_link("Prices")
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
context "in the prices tab" do
|
|
21
|
-
let!(:country) { create :country, iso: "DE" }
|
|
22
|
-
let(:master_price) { product.master.default_price }
|
|
23
|
-
let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "RUB", country_iso: "DE") }
|
|
24
|
-
|
|
25
|
-
before do
|
|
26
|
-
visit spree.admin_product_prices_path(product)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'displays a table with the prices' do
|
|
30
|
-
expect(page).to have_content(product.name)
|
|
31
|
-
within(".tabs .active") do
|
|
32
|
-
expect(page).to have_content("Prices")
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
within('table.master_prices') do
|
|
36
|
-
expect(page).to have_content("$19.99")
|
|
37
|
-
expect(page).to have_content("USD")
|
|
38
|
-
expect(page).to have_content("34.56 ₽")
|
|
39
|
-
expect(page).to have_content("RUB")
|
|
40
|
-
expect(page).to have_content("Any Country")
|
|
41
|
-
expect(page).to have_content("Germany")
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
context "searching" do
|
|
46
|
-
let(:variant) { create(:variant, price: 20) }
|
|
47
|
-
let(:product) { variant.product }
|
|
48
|
-
|
|
49
|
-
before do
|
|
50
|
-
product.master.update(price: 49.99)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'has a working table filter' do
|
|
54
|
-
expect(page).to have_selector("#table-filter")
|
|
55
|
-
within "#table-filter" do
|
|
56
|
-
within "fieldset legend" do
|
|
57
|
-
expect(page).to have_content("Search")
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
select variant.options_text, from: "q_variant_id_eq", exact: false
|
|
61
|
-
click_button "Filter Results"
|
|
62
|
-
expect(page).to have_content("20")
|
|
63
|
-
expect(page).to_not have_content("49.99")
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
context "editing" do
|
|
68
|
-
let(:product) { create(:product, price: 123.99) }
|
|
69
|
-
let!(:variant) { product.master }
|
|
70
|
-
let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "EUR") }
|
|
71
|
-
|
|
72
|
-
it 'has a working edit page' do
|
|
73
|
-
within "#spree_price_#{product.master.prices.first.id}" do
|
|
74
|
-
click_icon :edit
|
|
75
|
-
end
|
|
76
|
-
expect(page).to have_content("Edit Price")
|
|
77
|
-
|
|
78
|
-
within("#price_price_field") do
|
|
79
|
-
expect(page).to have_field('price_price', with: '123.99')
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
fill_in "price_price", with: 999.99
|
|
83
|
-
click_button "Update"
|
|
84
|
-
expect(page).to have_content("Price has been successfully updated!")
|
|
85
|
-
expect(page).to have_content("$999.99")
|
|
86
|
-
expect(page).to have_content("€34.56")
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "will not reset the currency to default" do
|
|
90
|
-
within "#spree_price_#{other_price.id}" do
|
|
91
|
-
click_icon :edit
|
|
92
|
-
end
|
|
93
|
-
expect(page).to have_content("Edit Price")
|
|
94
|
-
expect(page).to_not have_field('price_currency', with: 'USD')
|
|
95
|
-
within("#price_price_field") do
|
|
96
|
-
expect(page).to have_css('.number-with-currency-addon', text: 'EUR')
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
context "deleting", js: true do
|
|
102
|
-
let(:product) { create(:product, price: 65.43) }
|
|
103
|
-
let!(:variant) { product.master }
|
|
104
|
-
let!(:other_price) { product.master.prices.create(amount: 34.56, currency: "EUR") }
|
|
105
|
-
|
|
106
|
-
it "will delete the non-default price" do
|
|
107
|
-
within "#spree_price_#{other_price.id}" do
|
|
108
|
-
accept_alert do
|
|
109
|
-
click_icon :trash
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
expect(page).to have_content("Price has been successfully removed")
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "does not break when default price is deleted" do
|
|
116
|
-
within "#spree_price_#{variant.default_price.id}" do
|
|
117
|
-
accept_alert do
|
|
118
|
-
click_icon :trash
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
expect(page).to have_content("Price has been successfully removed")
|
|
122
|
-
visit spree.admin_products_path
|
|
123
|
-
expect(page).to have_selector("#spree_product_#{product.id}")
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
@@ -1,348 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'spec_helper'
|
|
4
|
-
|
|
5
|
-
describe "Products", type: :feature do
|
|
6
|
-
context "as admin user" do
|
|
7
|
-
stub_authorization!
|
|
8
|
-
|
|
9
|
-
before(:each) do
|
|
10
|
-
visit spree.admin_path
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def build_option_type_with_values(name, values)
|
|
14
|
-
ot = FactoryBot.create(:option_type, name: name)
|
|
15
|
-
values.each do |val|
|
|
16
|
-
ot.option_values.create(name: val.downcase, presentation: val)
|
|
17
|
-
end
|
|
18
|
-
ot
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
context "listing products" do
|
|
22
|
-
context "sorting" do
|
|
23
|
-
before do
|
|
24
|
-
create(:product, name: 'apache baseball cap', price: 10)
|
|
25
|
-
create(:product, name: 'zomg shirt', price: 5)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should list existing products with correct sorting by name" do
|
|
29
|
-
click_nav "Products"
|
|
30
|
-
# Name ASC
|
|
31
|
-
within_row(1) { expect(page).to have_content('apache baseball cap') }
|
|
32
|
-
within_row(2) { expect(page).to have_content("zomg shirt") }
|
|
33
|
-
|
|
34
|
-
# Name DESC
|
|
35
|
-
click_link "admin_products_listing_name_title"
|
|
36
|
-
within_row(1) { expect(page).to have_content("zomg shirt") }
|
|
37
|
-
within_row(2) { expect(page).to have_content('apache baseball cap') }
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should list existing products with correct sorting by price" do
|
|
41
|
-
click_nav "Products"
|
|
42
|
-
|
|
43
|
-
# Name ASC (default)
|
|
44
|
-
within_row(1) { expect(page).to have_content('apache baseball cap') }
|
|
45
|
-
within_row(2) { expect(page).to have_content("zomg shirt") }
|
|
46
|
-
|
|
47
|
-
# Price DESC
|
|
48
|
-
click_link "admin_products_listing_price_title"
|
|
49
|
-
within_row(1) { expect(page).to have_content("zomg shirt") }
|
|
50
|
-
within_row(2) { expect(page).to have_content('apache baseball cap') }
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
context "currency displaying" do
|
|
55
|
-
context "using Russian Rubles" do
|
|
56
|
-
before do
|
|
57
|
-
stub_spree_preferences(currency: "RUB")
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
let!(:product) do
|
|
61
|
-
create(:product, name: "Just a product", price: 19.99)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Regression test for https://github.com/spree/spree/issues/2737
|
|
65
|
-
context "uses руб as the currency symbol" do
|
|
66
|
-
it "on the products listing page" do
|
|
67
|
-
visit spree.admin_products_path
|
|
68
|
-
within_row(1) { expect(page).to have_content("19.99 ₽") }
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
context "when none of the product prices are in the same currency as the default in the store" do
|
|
74
|
-
before do
|
|
75
|
-
stub_spree_preferences(currency: "MXN")
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
let!(:product) do
|
|
79
|
-
create(:product, name: "Just a product", price: 19.99)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it 'defaults it to Spree::Config.currency and sets the price as blank' do
|
|
83
|
-
stub_spree_preferences(currency: "USD")
|
|
84
|
-
visit spree.admin_product_path(product)
|
|
85
|
-
within("#product_price_field") do
|
|
86
|
-
expect(page).to have_content("USD")
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
context "searching products" do
|
|
93
|
-
it "should be able to search deleted products", js: true do
|
|
94
|
-
create(:product, name: 'apache baseball cap', deleted_at: "2011-01-06 18:21:13")
|
|
95
|
-
create(:product, name: 'zomg shirt')
|
|
96
|
-
|
|
97
|
-
click_nav "Products"
|
|
98
|
-
expect(page).to have_content("zomg shirt")
|
|
99
|
-
expect(page).not_to have_content("apache baseball cap")
|
|
100
|
-
check "Show Deleted"
|
|
101
|
-
click_button 'Search'
|
|
102
|
-
expect(find('input[name="q[with_deleted]"]')).to be_checked
|
|
103
|
-
expect(page).to have_content("zomg shirt")
|
|
104
|
-
expect(page).to have_content("apache baseball cap")
|
|
105
|
-
uncheck "Show Deleted"
|
|
106
|
-
click_button 'Search'
|
|
107
|
-
expect(page).to have_content("zomg shirt")
|
|
108
|
-
expect(page).not_to have_content("apache baseball cap")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it "should be able to search products by their properties" do
|
|
112
|
-
create(:product, name: 'apache baseball cap', sku: "A100")
|
|
113
|
-
create(:product, name: 'apache baseball cap2', sku: "B100")
|
|
114
|
-
create(:product, name: 'zomg shirt')
|
|
115
|
-
|
|
116
|
-
click_nav "Products"
|
|
117
|
-
fill_in "Name", with: "ap"
|
|
118
|
-
click_button 'Search'
|
|
119
|
-
expect(page).to have_content("apache baseball cap")
|
|
120
|
-
expect(page).to have_content("apache baseball cap2")
|
|
121
|
-
expect(page).not_to have_content("zomg shirt")
|
|
122
|
-
|
|
123
|
-
fill_in "SKU", with: "A1"
|
|
124
|
-
click_button "Search"
|
|
125
|
-
expect(page).to have_content("apache baseball cap")
|
|
126
|
-
expect(page).not_to have_content("apache baseball cap2")
|
|
127
|
-
expect(page).not_to have_content("zomg shirt")
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# Regression test for https://github.com/solidusio/solidus/issues/2016
|
|
131
|
-
it "should be able to search and sort by price" do
|
|
132
|
-
product = create(:product, name: 'apache baseball cap', sku: "A001")
|
|
133
|
-
create(:variant, product: product, sku: "A002")
|
|
134
|
-
create(:product, name: 'zomg shirt', sku: "Z001")
|
|
135
|
-
|
|
136
|
-
click_nav "Products"
|
|
137
|
-
expect(page).to have_content("apache baseball cap")
|
|
138
|
-
expect(page).to have_content("zomg shirt")
|
|
139
|
-
expect(page).to have_css('#listing_products > tbody > tr', count: 2)
|
|
140
|
-
|
|
141
|
-
fill_in "SKU", with: "A"
|
|
142
|
-
click_button 'Search'
|
|
143
|
-
expect(page).to have_content("apache baseball cap")
|
|
144
|
-
expect(page).not_to have_content("zomg shirt")
|
|
145
|
-
expect(page).to have_css('#listing_products > tbody > tr', count: 1)
|
|
146
|
-
|
|
147
|
-
# Sort by master price
|
|
148
|
-
click_on 'Master Price'
|
|
149
|
-
expect(page).to have_css('.sort_link.asc', text: 'Master Price')
|
|
150
|
-
expect(page).to have_content("apache baseball cap")
|
|
151
|
-
expect(page).not_to have_content("zomg shirt")
|
|
152
|
-
expect(page).to have_css('#listing_products > tbody > tr', count: 1)
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
context "creating a new product" do
|
|
157
|
-
before(:each) do
|
|
158
|
-
@shipping_category = create(:shipping_category)
|
|
159
|
-
click_nav "Products"
|
|
160
|
-
click_on "New Product"
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should allow an admin to create a new product", js: true do
|
|
164
|
-
fill_in "product_name", with: "Baseball Cap"
|
|
165
|
-
fill_in "product_sku", with: "B100"
|
|
166
|
-
fill_in "product_price", with: "100"
|
|
167
|
-
fill_in "product_available_on", with: "2012/01/24"
|
|
168
|
-
select @shipping_category.name, from: "product_shipping_category_id"
|
|
169
|
-
click_button "Create"
|
|
170
|
-
expect(page).to have_content("successfully created!")
|
|
171
|
-
click_button "Update"
|
|
172
|
-
expect(page).to have_content("successfully updated!")
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "disables the button at submit", :js do
|
|
176
|
-
page.execute_script "$('form').submit(function(e) { e.preventDefault()})"
|
|
177
|
-
fill_in "product_name", with: "Baseball Cap"
|
|
178
|
-
fill_in "product_sku", with: "B100"
|
|
179
|
-
fill_in "product_price", with: "100"
|
|
180
|
-
fill_in "product_available_on", with: "2012/01/24"
|
|
181
|
-
select @shipping_category.name, from: "product_shipping_category_id"
|
|
182
|
-
click_button "Create"
|
|
183
|
-
|
|
184
|
-
expect(page).to have_button("Create", disabled: true)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
it "should show validation errors", js: false do
|
|
188
|
-
fill_in "product_name", with: "Baseball Cap"
|
|
189
|
-
fill_in "product_sku", with: "B100"
|
|
190
|
-
fill_in "product_price", with: "100"
|
|
191
|
-
click_button "Create"
|
|
192
|
-
expect(page).to have_content("Shipping category can't be blank")
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
context "using a locale with a different decimal format " do
|
|
196
|
-
before do
|
|
197
|
-
# change English locale’s separator and delimiter to match 19,99 format
|
|
198
|
-
I18n.backend.store_translations(:en,
|
|
199
|
-
number: {
|
|
200
|
-
currency: {
|
|
201
|
-
format: {
|
|
202
|
-
separator: ",",
|
|
203
|
-
delimiter: "."
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
})
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
after do
|
|
210
|
-
# revert changes to English locale
|
|
211
|
-
I18n.backend.store_translations(:en,
|
|
212
|
-
number: {
|
|
213
|
-
currency: {
|
|
214
|
-
format: {
|
|
215
|
-
separator: ".",
|
|
216
|
-
delimiter: ","
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
})
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
it "should show localized price value on validation errors", js: true do
|
|
223
|
-
fill_in "Name", with: " "
|
|
224
|
-
select @shipping_category.name, from: "product_shipping_category_id"
|
|
225
|
-
fill_in "product_price", with: "19,99"
|
|
226
|
-
click_button "Create"
|
|
227
|
-
expect(page).to have_content("Name can't be blank")
|
|
228
|
-
expect(page).to have_field('product_price', with: '19,99')
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
# Regression test for https://github.com/spree/spree/issues/2097
|
|
233
|
-
it "can set the count on hand to a null value", js: true do
|
|
234
|
-
fill_in "product_name", with: "Baseball Cap"
|
|
235
|
-
fill_in "product_price", with: "100"
|
|
236
|
-
select @shipping_category.name, from: "product_shipping_category_id"
|
|
237
|
-
click_button "Create"
|
|
238
|
-
expect(page).to have_content("successfully created!")
|
|
239
|
-
click_button "Update"
|
|
240
|
-
expect(page).to have_content("successfully updated!")
|
|
241
|
-
end
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
context "cloning a product", js: true do
|
|
245
|
-
it "should allow an admin to clone a product" do
|
|
246
|
-
create(:product)
|
|
247
|
-
|
|
248
|
-
click_nav "Products"
|
|
249
|
-
within_row(1) do
|
|
250
|
-
click_icon :copy
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
expect(page).to have_content("Product has been cloned")
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
context "cloning a deleted product" do
|
|
257
|
-
it "should allow an admin to clone a deleted product" do
|
|
258
|
-
create(:product, name: "apache baseball cap")
|
|
259
|
-
|
|
260
|
-
click_nav "Products"
|
|
261
|
-
check "Show Deleted"
|
|
262
|
-
click_button "Search"
|
|
263
|
-
|
|
264
|
-
expect(page).to have_content("apache baseball cap")
|
|
265
|
-
|
|
266
|
-
within_row(1) do
|
|
267
|
-
click_icon :copy
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
expect(page).to have_content("Product has been cloned")
|
|
271
|
-
end
|
|
272
|
-
end
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
context 'updating a product', js: true do
|
|
276
|
-
let(:product) { create(:product) }
|
|
277
|
-
|
|
278
|
-
it 'should parse correctly available_on' do
|
|
279
|
-
visit spree.admin_product_path(product)
|
|
280
|
-
fill_in "product_available_on", with: "2012/12/25"
|
|
281
|
-
click_button "Update"
|
|
282
|
-
expect(page).to have_content("successfully updated!")
|
|
283
|
-
expect(Spree::Product.last.available_on).to eq('Tue, 25 Dec 2012 00:00:00 UTC +00:00')
|
|
284
|
-
end
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
context 'deleting a product', js: true do
|
|
288
|
-
let!(:product) { create(:product) }
|
|
289
|
-
|
|
290
|
-
it "product details are still viewable" do
|
|
291
|
-
visit spree.admin_products_path
|
|
292
|
-
|
|
293
|
-
expect(page).to have_content(product.name)
|
|
294
|
-
accept_alert do
|
|
295
|
-
click_icon :trash
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
expect(page).to have_no_content(product.name)
|
|
299
|
-
|
|
300
|
-
# This will show our deleted product
|
|
301
|
-
check "Show Deleted"
|
|
302
|
-
click_button "Search"
|
|
303
|
-
click_link product.name
|
|
304
|
-
expect(page).to_not have_field('Master Price')
|
|
305
|
-
expect(page).to_not have_content('Images')
|
|
306
|
-
expect(page).to_not have_content('Prices')
|
|
307
|
-
expect(page).to_not have_content('Product Properties')
|
|
308
|
-
end
|
|
309
|
-
end
|
|
310
|
-
end
|
|
311
|
-
|
|
312
|
-
context 'with only product permissions' do
|
|
313
|
-
before do
|
|
314
|
-
allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(nil)
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
custom_authorization! do |_user|
|
|
318
|
-
can [:admin, :update, :index, :read], Spree::Product
|
|
319
|
-
end
|
|
320
|
-
let!(:product) { create(:product) }
|
|
321
|
-
|
|
322
|
-
it "should only display accessible links on index" do
|
|
323
|
-
visit spree.admin_products_path
|
|
324
|
-
expect(page).to have_link('Products')
|
|
325
|
-
expect(page).not_to have_link('Option Types')
|
|
326
|
-
expect(page).not_to have_link('Properties')
|
|
327
|
-
|
|
328
|
-
expect(page).not_to have_link('New Product')
|
|
329
|
-
expect(page).not_to have_css('a.clone')
|
|
330
|
-
expect(page).to have_css('a.edit')
|
|
331
|
-
expect(page).not_to have_css('a.delete-resource')
|
|
332
|
-
end
|
|
333
|
-
|
|
334
|
-
it "should only display accessible links on edit" do
|
|
335
|
-
visit spree.admin_product_path(product)
|
|
336
|
-
|
|
337
|
-
# product tabs should be hidden
|
|
338
|
-
expect(page).to have_link('Product Details')
|
|
339
|
-
expect(page).not_to have_link('Images')
|
|
340
|
-
expect(page).not_to have_link('Variants')
|
|
341
|
-
expect(page).not_to have_link('Product Properties')
|
|
342
|
-
expect(page).not_to have_link('Stock Management')
|
|
343
|
-
|
|
344
|
-
# no create permission
|
|
345
|
-
expect(page).not_to have_link('New Product')
|
|
346
|
-
end
|
|
347
|
-
end
|
|
348
|
-
end
|