118 lines
4.1 KiB
Ruby
118 lines
4.1 KiB
Ruby
|
# 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
|