diff --git a/Gemfile.lock b/Gemfile.lock index 96ee7f8da6..ce12da36db 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -267,9 +267,9 @@ GEM css_parser (1.21.1) addressable csv (3.3.5) - cuprite (0.15) + cuprite (0.17) capybara (~> 3.0) - ferrum (~> 0.14.0) + ferrum (~> 0.17.0) database_cleaner (2.1.0) database_cleaner-active_record (>= 2, < 3) database_cleaner-active_record (2.2.2) @@ -334,11 +334,12 @@ GEM faraday (>= 1, < 3) faraday-net_http (3.4.2) net-http (~> 0.5) - ferrum (0.14) + ferrum (0.17.1) addressable (~> 2.5) + base64 (~> 0.2) concurrent-ruby (~> 1.1) webrick (~> 1.7) - websocket-driver (>= 0.6, < 0.8) + websocket-driver (~> 0.7) ffaker (2.25.0) ffi (1.17.3) flipper (1.3.6) @@ -529,7 +530,7 @@ GEM net-protocol newrelic_rpm (9.24.0) nio4r (2.7.5) - nokogiri (1.19.0) + nokogiri (1.19.1) mini_portile2 (~> 2.8.2) racc (~> 1.4) nokogiri-html5-inference (0.3.0) @@ -602,7 +603,7 @@ GEM psych (5.3.1) date stringio - public_suffix (7.0.0) + public_suffix (7.0.2) puffing-billy (4.0.2) addressable (~> 2.5) em-http-request (~> 1.1, >= 1.1.0) @@ -959,7 +960,7 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) webrick (1.9.2) - websocket-driver (0.7.7) + websocket-driver (0.8.0) base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) diff --git a/app/views/spree/admin/products/new.html.haml b/app/views/spree/admin/products/new.html.haml index b7444422d6..ee6c972d59 100644 --- a/app/views/spree/admin/products/new.html.haml +++ b/app/views/spree/admin/products/new.html.haml @@ -29,7 +29,7 @@ .sixteen.columns.alpha .eight.columns.alpha = f.field_container :variant_unit do - = f.label :variant_unit, t(".units") + = f.label :variant_unit_with_scale, t(".units") %span.required * = f.select 'variant_unit', [], { include_blank: true }, diff --git a/spec/support/request/tomselect_helper.rb b/spec/support/request/tomselect_helper.rb deleted file mode 100644 index 93b0717d8e..0000000000 --- a/spec/support/request/tomselect_helper.rb +++ /dev/null @@ -1,45 +0,0 @@ -# frozen_string_literal: true - -module TomselectHelper - def tomselect_open(field_name) - page.find("##{field_name}-ts-control").click - end - - def tomselect_multiselect(value, options) - tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click - tomselect_wrapper.find(:css, '.ts-dropdown.multi .ts-dropdown-content .option', - text: value).click - # Close the dropdown - page.find("body").click - end - - def tomselect_search_and_select(value, options) - tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click - # Use send_keys as setting the value directly doesn't trigger the search - tomselect_wrapper.find(:css, '.ts-dropdown input.dropdown-input').send_keys(value) - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click - end - - def tomselect_select(value, options) - tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click - - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click - end - - def open_tomselect_to_validate!(page, field_name) - tomselect_wrapper = page.find_field(field_name).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click # open the dropdown - - raise 'Please pass the block for expectations' unless block_given? - - # execute block containing expectations - yield - - tomselect_wrapper.find( - '.ts-dropdown .ts-dropdown-content .option.active', - ).click # close the dropdown by selecting the already selected value - end -end diff --git a/spec/support/request/web_helper.rb b/spec/support/request/web_helper.rb index de10dc79c6..3e4bb3a632 100644 --- a/spec/support/request/web_helper.rb +++ b/spec/support/request/web_helper.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true module WebHelper - include TomselectHelper - def have_input(name, opts = {}) selector = "[name='#{name}']" selector += "[placeholder='#{opts[:placeholder]}']" if opts.key? :placeholder diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index d066bbe6ea..a5216c10da 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -1,39 +1,41 @@ # frozen_string_literal: true module TomSelectHelper - def tomselect_open(field_name) - page.find("##{field_name}-ts-control").click - end - def tomselect_multiselect(value, options) - tomselect_wrapper = page.find("[name='#{options[:from]}']").sibling(".ts-wrapper") + tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click - tomselect_wrapper.find(:css, '.ts-dropdown.multi .ts-dropdown-content .option', + tomselect_wrapper.find(:css, ".ts-dropdown.multi .ts-dropdown-content .option", text: value).click + # Close the dropdown + page.find("body").click end def tomselect_search_and_select(value, options) - tomselect_wrapper = page.find("[name='#{options[:from]}']").sibling(".ts-wrapper") + tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click # Use send_keys as setting the value directly doesn't trigger the search - tomselect_wrapper.find(:css, '.ts-dropdown input.dropdown-input').send_keys(value) - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click + tomselect_wrapper.find(".ts-dropdown input.dropdown-input").send_keys(value) + tomselect_wrapper.find(".ts-dropdown .ts-dropdown-content .option.active", text: value).click end def tomselect_select(value, options) - tomselect_wrapper = page.find("[name='#{options[:from]}']").sibling(".ts-wrapper") + tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click + tomselect_wrapper.find(".ts-dropdown .ts-dropdown-content .option", text: value).click end - def select_tom_select(value, from:) - container = find(:id, from) + def open_tomselect_to_validate!(page, field_name) + tomselect_wrapper = page.find_field(field_name).sibling(".ts-wrapper") + tomselect_wrapper.find(".ts-control").click # open the dropdown - within(container) do - find('.ts-control').send_keys(value) - end + raise "Please pass the block for expectations" unless block_given? - find('.ts-dropdown .ts-dropdown-content .option', text: /#{Regexp.quote(value)}/i).click + # execute block containing expectations + yield + + tomselect_wrapper.find( + ".ts-dropdown .ts-dropdown-content .option.active", + ).click # close the dropdown by selecting the already selected value end end diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index e5bcbcc776..68e5c1c489 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -100,10 +100,10 @@ RSpec.describe ' end it "order cycles appear in descending order by close date on orders page" do - tomselect_open('q_order_cycle_id_in').click - - expect(find('#q_order_cycle_id_in', - visible: :all)[:innerHTML]).to have_content(/.*Four.*Three.*Two.*Five/m) + open_tomselect_to_validate!(page, 'q_order_cycle_id_in') do + oc_html = find('#q_order_cycle_id_in', visible: :all)[:innerHTML] + expect(oc_html).to have_content(/.*Four.*Three.*Two.*Five/m) + end end it "filter by multiple order cycles" do diff --git a/spec/system/admin/products_v3/create_spec.rb b/spec/system/admin/products_v3/create_spec.rb index e36ba0c9fa..965d9f9e99 100644 --- a/spec/system/admin/products_v3/create_spec.rb +++ b/spec/system/admin/products_v3/create_spec.rb @@ -23,7 +23,7 @@ RSpec.describe 'As an enterprise user, I can manage my products' do expect(page).to have_content "New Product" fill_in 'product_name', with: 'Big Bag Of Apples' tomselect_select supplier.name, from: 'product[supplier_id]' - select_tom_select 'Weight (g)', from: 'product_variant_unit_field' + tomselect_search_and_select 'Weight (g)', from: "product_variant_unit_with_scale" fill_in 'product_unit_value', with: '100' fill_in 'product_price', with: '10.00' # TODO dropdowns below are still using select2: