lib/formulaic/inputs/string_input.rb in formulaic-0.3.0 vs lib/formulaic/inputs/string_input.rb in formulaic-0.4.0

- old
+ new

@@ -1,23 +1,42 @@ module Formulaic module Inputs class StringInput < Input def fill - if page.has_selector?(:fillable_field, label) + if page.has_selector?(:fillable_field, label, wait: Formulaic.default_wait_time) fill_in(label, with: value) - elsif page.has_selector?(:radio_button, label) + elsif page.has_selector?(:radio_button, label, wait: Formulaic.default_wait_time) choose(value) - elsif has_option_in_select?(value, label) - select(value, from: label) + elsif has_option_in_select?(translate_option(value), label) + select(translate_option(value), from: label) else raise Formulaic::InputNotFound.new(%[Unable to find input "#{label}".]) end end def has_option_in_select?(option, select) - find(:select, select).has_selector?(:option, option) + element = find(:select, select) + if ! element.has_selector?(:option, option, wait: Formulaic.default_wait_time) + raise Formulaic::OptionForSelectInputNotFound.new(%[Unable to find option with text matching "#{option}".]) + end + true rescue Capybara::ElementNotFound false + end + + private + + def translate_option(option) + I18n.t(lookup_paths_for_option.first, + scope: :'simple_form.options', default: lookup_paths_for_option) + end + + def lookup_paths_for_option + [ + :"#{label.model_name}.#{label.attribute}.#{value}", + :"defaults.#{label.attribute}.#{value}", + value.to_s, + ] end end end end