Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Made TestHelpers include methods from WaitForLoaded #3325

Merged
merged 1 commit into from
Oct 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/avo/test_helpers.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
module Avo
module TestHelpers
include WaitForLoaded

# Finds the wrapper element on the index view for the given field id and type, and associated with the given record id
# Example usage:
# index_field_wrapper(id: "name", type: "text", record_id: 2)
Expand Down
108 changes: 108 additions & 0 deletions lib/avo/wait_for_loaded.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
require "timeout"

module Avo
module WaitForLoaded
def wait_for_route_loading(time = Capybara.default_max_wait_time)
Timeout.timeout(time) { sleep(0.01) until page.find("body")[:class].include?("route-loading") }
end

def wait_for_route_loaded(time = Capybara.default_max_wait_time)
Timeout.timeout(time) { sleep(0.01) while page.find("body")[:class].include?("route-loading") }
end

def wait_for_turbo_loaded(time = Capybara.default_max_wait_time)
wait_for_body_class_missing("turbo-loading", time)
end

def wait_for_search_loaded(time = Capybara.default_max_wait_time)
wait_for_body_class_missing("search-loading", time)
end

def wait_for_search_to_dissapear(time = Capybara.default_max_wait_time)
wait_for_element_missing(".aa-DetachedOverlay", time)
end

def wait_for_turbo_frame_id(frame_id = "", time = Capybara.default_max_wait_time)
wait_for_element_missing("turbo-frame[id='#{frame_id}'][busy]", time)
end

def wait_for_turbo_frame_src(frame_src = "", time = Capybara.default_max_wait_time)
wait_for_element_missing("turbo-frame[src='#{frame_src}'][busy]", time)
end

def wait_for_body_class_missing(klass = "turbo-loading", time = Capybara.default_max_wait_time)
Paul-Bob marked this conversation as resolved.
Show resolved Hide resolved
Timeout.timeout(time) do
body = page.find(:xpath, "//body")
break if !body[:class].to_s.include?(klass)

if page.present? && body.present? && body[:class].present? && body[:class].is_a?(String)
sleep(0.1) until page.present? && !body[:class].to_s.include?(klass)
else
sleep 0.1
end
end
rescue Timeout::Error
puts "\n\nMethod '#{__method__}' raised 'Timeout::Error' after #{time}s"
end

def wait_for_element_missing(identifier = ".element", time = Capybara.default_max_wait_time)
Paul-Bob marked this conversation as resolved.
Show resolved Hide resolved
Timeout.timeout(time) do
if page.present?
break if page.has_no_css?(identifier, wait: time)
else
sleep 0.05
end
end
end

def wait_for_element_present(identifier = ".element", time = Capybara.default_max_wait_time)
Paul-Bob marked this conversation as resolved.
Show resolved Hide resolved
Timeout.timeout(time) do
if page.present?
break if page.has_css?(identifier, wait: time)
else
sleep 0.05
end
end
end

def wait_for_loaded
wait_for_turbo_loaded
end

def wait_for_action_dialog_to_disappear(time = Capybara.default_max_wait_time)
wait_for_element_missing("[role='dialog']", time)
end

def wait_for_tag_to_disappear(tag, time = Capybara.default_max_wait_time)
Capybara.using_wait_time(time) do
page.has_no_css?(".tagify__tag", text: tag)
end
end

def wait_for_tag_to_appear(tag, time = Capybara.default_max_wait_time)
Capybara.using_wait_time(time) do
page.has_css?(".tagify__tag", text: tag)
end
end

def wait_for_tag_suggestions_to_appear(time = Capybara.default_max_wait_time)
Capybara.using_wait_time(time) do
page.has_css?(".tagify__dropdown")
end

current_count = prev_count = page.all(".tagify__dropdown__item").count
attempts = 5

loop do
sleep(0.05)
current_count = page.all(".tagify__dropdown__item").count

# Break when suggestions stop appearing
# Or attempts reach 0
attempts -= 1
break if (current_count == prev_count) || (attempts == 0)
prev_count = current_count
end
end
end
end
1 change: 0 additions & 1 deletion spec/rails_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,6 @@ def headless_download_setup(driver)
require "support/helpers"
require "support/factory_bot"
require "support/database_cleaner"
require "support/wait_for_loaded"
require "support/js_error_detector"
require "support/devise"
require "support/shared_contexts"
Expand Down
104 changes: 0 additions & 104 deletions spec/support/wait_for_loaded.rb

This file was deleted.

Loading