module Spree::TestingSupport::FlatpickrCapybara

Public Instance Methods

fill_in_date_manually(label_text, with:) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 4
def fill_in_date_manually(label_text, with:)
  with_open_flatpickr(label_text) do |field|
    fill_in field[:id], with: with
  end
end
fill_in_date_picker(label_text, with:) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 10
def fill_in_date_picker(label_text, with:)
  within_open_flatpickr(label_text) do
    within_flatpickr_months do
      fill_in_flatpickr_year(with.split('-')[0])

      select_flatpickr_month(with.split('-')[1])

      click_on_flatpickr_day(with.split('-')[2])
    end
  end
end
fill_in_date_time_picker(label_text, with:) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 22
def fill_in_date_time_picker(label_text, with:)
  within_open_flatpickr(label_text) do
    within_flatpickr_months do
      fill_in_flatpickr_year(with.split('-')[0])

      select_flatpickr_month(with.split('-')[1])

      click_on_flatpickr_day(with.split('-')[2])
    end

    within_flatpickr_time do
      select_flatpickr_hour(with.split('-')[3])

      select_flatpickr_min(with.split('-')[4])
    end
  end
end
fill_in_date_with_js(label_text, with:) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 40
def fill_in_date_with_js(label_text, with:)
  date_field = find("input[id='#{label_text}']")
  script = "document.querySelector('#{date_field}').flatpickr().setDate('#{with}');"

  page.execute_script(script)
end

Private Instance Methods

click_on_flatpickr_day(day) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 82
def click_on_flatpickr_day(day)
  within_flatpickr_days do
    find('span', text: day).click
  end
end
fill_in_flatpickr_year(year) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 78
def fill_in_flatpickr_year(year)
  find('input.cur-year').set(year)
end
select_flatpickr_hour(hour) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 92
def select_flatpickr_hour(hour)
  find('input.flatpickr-hour').set(hour)
end
select_flatpickr_min(min) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 96
def select_flatpickr_min(min)
  find('input.flatpickr-minute').set(min)
end
select_flatpickr_month(month) click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 74
def select_flatpickr_month(month)
  find("select.flatpickr-monthDropdown-months > option:nth-child(#{month.to_i})").select_option
end
with_open_flatpickr(label_text) { |date_field| ... } click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 49
def with_open_flatpickr(label_text)
  field_label = find_field(id: label_text, type: :hidden)

  date_field = field_label.sibling('.flatpickr-alt-input')
  date_field.click # Open the widget

  yield(date_field)

  date_field.send_keys :tab # Close the date picker widget
end
within_flatpickr_days() { || ... } click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 88
def within_flatpickr_days
  within find('.flatpickr-innerContainer > .flatpickr-rContainer > .flatpickr-days') { yield }
end
within_flatpickr_months() { || ... } click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 66
def within_flatpickr_months
  within find('.flatpickr-months .flatpickr-month .flatpickr-current-month') { yield }
end
within_flatpickr_time() { || ... } click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 70
def within_flatpickr_time
  within find('.flatpickr-time') { yield }
end
within_open_flatpickr(label_text) { || ... } click to toggle source
# File lib/spree/testing_support/flatpickr_capybara.rb, line 60
def within_open_flatpickr(label_text)
  with_open_flatpickr(label_text) do
    within find(:xpath, "/html/body/div[contains(@class, 'flatpickr-calendar')]") { yield }
  end
end