OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/spec/support/download_list.rb

51 lines
1.4 KiB

class DownloadList
SHARED_PATH = Pathname.new(
ENV.fetch("CAPYBARA_DOWNLOADED_FILE_DIR", Rails.root.join('tmp/test/downloads'))
).join(
ENV.fetch('TEST_ENV_NUMBER', '1')
).tap {|f| p ["DownloadList::SHARED_PATH", f.to_s] ; f.mkpath }
def initialize
@history = []
@latest = nil
end
def refresh_from(page)
@latest = nil
if false
page.visit("about:downloads")
# give some time for page to load
sleep 0.5
download_name = page.evaluate_script("document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div#content #file-link')").text()
if download_name && !@history.include?(download_name)
Timeout.timeout(Capybara.default_max_wait_time) do
sleep 0.1 until SHARED_PATH.join(download_name).exist?
end
@latest = download_name
@history << @latest
end
else
sleep 0.5
@latest = Dir.glob(SHARED_PATH.join("*").to_s).max_by {|f| File.mtime(f) }
@history << @latest
end
self
end
def latest_download
return nil if @latest.nil?
SHARED_PATH.join(@latest)
end
def latest_downloaded_content
return nil if @latest.nil?
SHARED_PATH.join(@latest).read
end
def self.clear
Dir[SHARED_PATH.join("*")].each do |file|
FileUtils.rm_f(file)
end
end
end