debian-mirror-gitlab/spec/support/shared_examples/features/dirty_submit_form_shared_examples.rb

37 lines
1.3 KiB
Ruby
Raw Normal View History

2019-10-12 21:52:04 +05:30
# frozen_string_literal: true
2020-03-13 15:44:24 +05:30
RSpec.shared_examples 'dirty submit form' do |selector_args|
2018-12-13 13:39:08 +05:30
selectors = selector_args.is_a?(Array) ? selector_args : [selector_args]
2019-07-31 22:56:46 +05:30
def expect_disabled_state(form, submit_selector, is_disabled = true)
2019-03-02 22:35:43 +05:30
disabled_selector = is_disabled == true ? '[disabled]' : ':not([disabled])'
2019-07-31 22:56:46 +05:30
form.find("#{submit_selector}#{disabled_selector}")
2019-03-02 22:35:43 +05:30
end
2018-12-13 13:39:08 +05:30
selectors.each do |selector|
2019-03-02 22:35:43 +05:30
it "disables #{selector[:form]} submit until there are changes on #{selector[:input]}", :js do
2018-12-13 13:39:08 +05:30
form = find(selector[:form])
2019-07-31 22:56:46 +05:30
submit_selector = selector[:submit] || 'input[type="submit"]'
submit = form.first(submit_selector)
2018-12-13 13:39:08 +05:30
input = form.first(selector[:input])
2019-03-02 22:35:43 +05:30
is_radio = input[:type] == 'radio'
is_checkbox = input[:type] == 'checkbox'
is_checkable = is_radio || is_checkbox
2018-12-13 13:39:08 +05:30
original_value = input.value
2019-03-02 22:35:43 +05:30
original_checkable = form.find("input[name='#{input[:name]}'][checked]") if is_radio
original_checkable = input if is_checkbox
2018-12-13 13:39:08 +05:30
expect(submit.disabled?).to be true
2019-03-02 22:35:43 +05:30
is_checkable ? input.click : input.set("#{original_value} changes")
2018-12-13 13:39:08 +05:30
2019-07-31 22:56:46 +05:30
expect_disabled_state(form, submit_selector, false)
2018-12-13 13:39:08 +05:30
2019-03-02 22:35:43 +05:30
is_checkable ? original_checkable.click : input.set(original_value)
2018-12-13 13:39:08 +05:30
2019-07-31 22:56:46 +05:30
expect_disabled_state(form, submit_selector)
2018-12-13 13:39:08 +05:30
end
end
end