# frozen_string_literal: true module DownloadsHelper TIMEOUT = 10 def self.path Rails.root.join("tmp/capybara") end def downloaded_filename wait_for_download expect(downloaded_filenames.length).to eq(1) # downloads folder should contain 1 file downloaded_filenames.first end def downloaded_content wait_for_download File.read(downloaded_filename) end private def downloaded_filenames Dir[DownloadsHelper.path.join("*")].select { |f| File.file?(f) } end def wait_for_download Timeout.timeout(TIMEOUT) do sleep 0.1 until downloaded? end end def downloaded? !downloading? && downloaded_filenames.any? end def downloading? downloaded_filenames.grep(/\.crdownload$/).any? end def remove_downloaded_files FileUtils.rm_f(downloaded_filenames) end end