2019-07-25 05:27:42 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-10-15 13:36:19 +00:00
|
|
|
shared_examples 'dirty submit form' do |selector_args|
|
|
|
|
selectors = selector_args.is_a?(Array) ? selector_args : [selector_args]
|
|
|
|
|
2019-03-14 20:52:01 +00:00
|
|
|
def expect_disabled_state(form, submit_selector, is_disabled = true)
|
2018-11-14 19:51:39 +00:00
|
|
|
disabled_selector = is_disabled == true ? '[disabled]' : ':not([disabled])'
|
|
|
|
|
2019-03-14 20:52:01 +00:00
|
|
|
form.find("#{submit_selector}#{disabled_selector}")
|
2018-11-14 19:51:39 +00:00
|
|
|
end
|
|
|
|
|
2018-10-15 13:36:19 +00:00
|
|
|
selectors.each do |selector|
|
2018-11-14 19:51:39 +00:00
|
|
|
it "disables #{selector[:form]} submit until there are changes on #{selector[:input]}", :js do
|
2018-10-15 13:36:19 +00:00
|
|
|
form = find(selector[:form])
|
2019-03-14 20:52:01 +00:00
|
|
|
submit_selector = selector[:submit] || 'input[type="submit"]'
|
|
|
|
submit = form.first(submit_selector)
|
2018-10-15 13:36:19 +00:00
|
|
|
input = form.first(selector[:input])
|
2018-11-14 19:51:39 +00:00
|
|
|
is_radio = input[:type] == 'radio'
|
|
|
|
is_checkbox = input[:type] == 'checkbox'
|
|
|
|
is_checkable = is_radio || is_checkbox
|
2018-10-15 13:36:19 +00:00
|
|
|
original_value = input.value
|
2018-11-14 19:51:39 +00:00
|
|
|
original_checkable = form.find("input[name='#{input[:name]}'][checked]") if is_radio
|
|
|
|
original_checkable = input if is_checkbox
|
2018-10-15 13:36:19 +00:00
|
|
|
|
|
|
|
expect(submit.disabled?).to be true
|
|
|
|
|
2018-11-14 19:51:39 +00:00
|
|
|
is_checkable ? input.click : input.set("#{original_value} changes")
|
2018-10-15 13:36:19 +00:00
|
|
|
|
2019-03-14 20:52:01 +00:00
|
|
|
expect_disabled_state(form, submit_selector, false)
|
2018-10-15 13:36:19 +00:00
|
|
|
|
2018-11-14 19:51:39 +00:00
|
|
|
is_checkable ? original_checkable.click : input.set(original_value)
|
2018-10-15 13:36:19 +00:00
|
|
|
|
2019-03-14 20:52:01 +00:00
|
|
|
expect_disabled_state(form, submit_selector)
|
2018-10-15 13:36:19 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|