diff options
Diffstat (limited to 'spec/support/helpers/features/releases_helpers.rb')
-rw-r--r-- | spec/support/helpers/features/releases_helpers.rb | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/spec/support/helpers/features/releases_helpers.rb b/spec/support/helpers/features/releases_helpers.rb new file mode 100644 index 00000000000..0d46918b05c --- /dev/null +++ b/spec/support/helpers/features/releases_helpers.rb @@ -0,0 +1,117 @@ +# frozen_string_literal: true + +# These helpers fill fields on the "New Release" and +# "Edit Release" pages. They use the keyboard to navigate +# from one field to the next and assume that when +# they are called, the field to be filled out is already focused. +# +# Usage: +# describe "..." do +# include Spec::Support::Helpers::Features::ReleasesHelpers +# ... +# +# fill_tag_name("v1.0") +# select_create_from("my-feature-branch") +# +module Spec + module Support + module Helpers + module Features + module ReleasesHelpers + # Returns the element that currently has keyboard focus. + # Reminder that this returns a Selenium::WebDriver::Element + # _not_ a Capybara::Node::Element + def focused_element + page.driver.browser.switch_to.active_element + end + + def fill_tag_name(tag_name, and_tab: true) + expect(focused_element).to eq(find_field('Tag name').native) + + focused_element.send_keys(tag_name) + + focused_element.send_keys(:tab) if and_tab + end + + def select_create_from(branch_name, and_tab: true) + expect(focused_element).to eq(find('[data-testid="create-from-field"] button').native) + + focused_element.send_keys(:enter) + + # Wait for the dropdown to be rendered + page.find('.ref-selector .dropdown-menu') + + # Pressing Enter in the search box shouldn't submit the form + focused_element.send_keys(branch_name, :enter) + + # Wait for the search to return + page.find('.ref-selector .dropdown-item', text: branch_name, match: :first) + + focused_element.send_keys(:arrow_down, :enter) + + focused_element.send_keys(:tab) if and_tab + end + + def fill_release_title(release_title, and_tab: true) + expect(focused_element).to eq(find_field('Release title').native) + + focused_element.send_keys(release_title) + + focused_element.send_keys(:tab) if and_tab + end + + def select_milestone(milestone_title, and_tab: true) + expect(focused_element).to eq(find('[data-testid="milestones-field"] button').native) + + focused_element.send_keys(:enter) + + # Wait for the dropdown to be rendered + page.find('.project-milestone-combobox .dropdown-menu') + + # Clear any existing input + focused_element.attribute('value').length.times { focused_element.send_keys(:backspace) } + + # Pressing Enter in the search box shouldn't submit the form + focused_element.send_keys(milestone_title, :enter) + + # Wait for the search to return + page.find('.project-milestone-combobox .dropdown-item', text: milestone_title, match: :first) + + focused_element.send_keys(:arrow_down, :arrow_down, :enter) + + focused_element.send_keys(:tab) if and_tab + end + + def fill_release_notes(release_notes, and_tab: true) + expect(focused_element).to eq(find_field('Release notes').native) + + focused_element.send_keys(release_notes) + + # Tab past the links at the bottom of the editor + focused_element.send_keys(:tab, :tab, :tab) if and_tab + end + + def fill_asset_link(link, and_tab: true) + expect(focused_element['id']).to start_with('asset-url-') + + focused_element.send_keys(link[:url], :tab, link[:title], :tab, link[:type]) + + # Tab past the "Remove asset link" button + focused_element.send_keys(:tab, :tab) if and_tab + end + + # Click "Add another link" and tab back to the beginning of the new row + def add_another_asset_link + expect(focused_element).to eq(find_button('Add another link').native) + + focused_element.send_keys(:enter, + [:shift, :tab], + [:shift, :tab], + [:shift, :tab], + [:shift, :tab]) + end + end + end + end + end +end |