14717: Fixups since tests now use config.yml
[arvados.git] / apps / workbench / test / integration / download_test.rb
index 9e4fd56af4fe6f94383d9c5f7fd9b34eae2fd7dd..e2d3dc8ef374a49ce7005ec5771c20b80886c161 100644 (file)
@@ -1,12 +1,15 @@
+# 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
+  @@wrote_test_data = false
+
   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
+    use_keep_web_config
 
     # Make sure Capybara can download files.
     need_selenium 'for downloading', :selenium_with_download
@@ -14,26 +17,73 @@ class DownloadTest < ActionDispatch::IntegrationTest
 
     # 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
 
-  test "download from keep-web with a reader token" do
-    uuid = api_fixture('collections')['foo_file']['uuid']
-    token = api_fixture('api_client_authorizations')['active_all_collections']['api_token']
-    visit "/collections/download/#{uuid}/#{token}/"
+  ['uuid', 'portable_data_hash'].each do |id_type|
+    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
+        find('[title~=View]').click
+      end
+      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
-      click_link "foo"
+      find('[title~=Download]').click
     end
+    wait_for_download 'w a z', 'w a z', timeout: 20
+  end
+
+  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 'foo') rescue nil
+      data = File.read(DownloadHelper.path.join filename) rescue nil
     end
-    assert_equal 'foo', data
+    assert_equal expect_data, data
   end
 
   # TODO(TC): test "view pages hosted by keep-web, using session