X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/206451cdcaee133836761024c8517629de429f10..6d1c41d6fd83824669cd1a6d714ea6da1ae7ab4c:/apps/workbench/test/integration/download_test.rb diff --git a/apps/workbench/test/integration/download_test.rb b/apps/workbench/test/integration/download_test.rb index cf4246cef8..6ae9f29274 100644 --- a/apps/workbench/test/integration/download_test.rb +++ b/apps/workbench/test/integration/download_test.rb @@ -1,40 +1,82 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'integration_helper' require 'helpers/download_helper' class DownloadTest < ActionDispatch::IntegrationTest - setup do - portfile = File.expand_path '../../../../../tmp/keep-web-ssl.port', __FILE__ - @kwport = File.read portfile - Rails.configuration.keep_web_url = "https://localhost:#{@kwport}/c=%{uuid_or_pdh}" - CollectionsController.any_instance.expects(:file_enumerator).never + @@wrote_test_data = false + setup do # Make sure Capybara can download files. need_selenium 'for downloading', :selenium_with_download DownloadHelper.clear # Keep data isn't populated by fixtures, so we have to write any # data we expect to read. - unless /^acbd/ =~ `echo -n foo | arv-put --no-progress --raw -` && $?.success? - raise $?.to_s + if !@@wrote_test_data + ['foo', 'w a z', "Hello world\n"].each do |data| + md5 = `echo -n #{data.shellescape} | arv-put --no-progress --raw -` + assert_match /^#{Digest::MD5.hexdigest(data)}/, md5 + assert $?.success?, $? + end + @@wrote_test_data = true end end ['uuid', 'portable_data_hash'].each do |id_type| - test "download from keep-web by #{id_type} using a reader token" do + test "preview from keep-web by #{id_type} using a reader token" do uuid_or_pdh = api_fixture('collections')['foo_file'][id_type] token = api_fixture('api_client_authorizations')['active_all_collections']['api_token'] visit "/collections/download/#{uuid_or_pdh}/#{token}/" + within 'ul' do + click_link 'foo' + end + assert_no_selector 'a' + assert_text 'foo' + end + + test "preview anonymous content from keep-web by #{id_type}" do + Rails.configuration.Users.AnonymousUserToken = + api_fixture('api_client_authorizations')['anonymous']['api_token'] + uuid_or_pdh = + api_fixture('collections')['public_text_file'][id_type] + visit "/collections/#{uuid_or_pdh}" within "#collection_files" do - click_link "foo" + find('[title~=View]').click end - wait_for_download 'foo', 'foo' + assert_no_selector 'a' + assert_text 'Hello world' + end + + test "download anonymous content from keep-web by #{id_type}" do + Rails.configuration.Users.AnonymousUserToken = + api_fixture('api_client_authorizations')['anonymous']['api_token'] + uuid_or_pdh = + api_fixture('collections')['public_text_file'][id_type] + visit "/collections/#{uuid_or_pdh}" + within "#collection_files" do + find('[title~=Download]').click + end + wait_for_download 'Hello world.txt', "Hello world\n" + end + end + + test "download from keep-web using a session token" do + uuid = api_fixture('collections')['w_a_z_file']['uuid'] + token = api_fixture('api_client_authorizations')['active']['api_token'] + visit page_with_token('active', "/collections/#{uuid}") + within "#collection_files" do + find('[title~=Download]').click end + wait_for_download 'w a z', 'w a z', timeout: 20 end - def wait_for_download filename, expect_data + def wait_for_download filename, expect_data, timeout: 3 data = nil tries = 0 - while tries < 20 + while tries < timeout*10 && data != expect_data sleep 0.1 tries += 1 data = File.read(DownloadHelper.path.join filename) rescue nil