summaryrefslogtreecommitdiff
path: root/spec/support/helpers/features/releases_helpers.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/helpers/features/releases_helpers.rb')
-rw-r--r--spec/support/helpers/features/releases_helpers.rb117
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