diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-21 06:08:37 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-21 06:08:37 +0300 |
commit | 2399724614f3c4dcf3059038d997193830de93ee (patch) | |
tree | 3315c4453ef3efb5c1162911753436cad4f3e57d /spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb | |
parent | 6755df108b123ecc8ae330d7c7bf2f04fbf36a81 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb')
-rw-r--r-- | spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb b/spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb new file mode 100644 index 00000000000..cb81eeba236 --- /dev/null +++ b/spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'dirty submit form' do |selector_args| + selectors = selector_args.is_a?(Array) ? selector_args : [selector_args] + + def expect_disabled_state(form, submit_selector, is_disabled = true) + disabled_selector = is_disabled == true ? '[disabled]' : ':not([disabled])' + + form.find("#{submit_selector}#{disabled_selector}") + end + + selectors.each do |selector| + it "disables #{selector[:form]} submit until there are changes on #{selector[:input]}", :js do + form = find(selector[:form]) + submit_selector = selector[:submit] || 'input[type="submit"]' + submit = form.first(submit_selector) + input = form.first(selector[:input]) + is_radio = input[:type] == 'radio' + is_checkbox = input[:type] == 'checkbox' + is_checkable = is_radio || is_checkbox + original_value = input.value + original_checkable = form.find("input[name='#{input[:name]}'][checked]") if is_radio + original_checkable = input if is_checkbox + + expect(submit.disabled?).to be true + + is_checkable ? input.click : input.set("#{original_value} changes") + + expect_disabled_state(form, submit_selector, false) + + is_checkable ? original_checkable.click : input.set(original_value) + + expect_disabled_state(form, submit_selector) + end + end +end |