11167: Re-added another removed integration test, adjusted to work
authorLucas Di Pentima <lucas@curoverse.com>
Mon, 24 Jul 2017 22:09:14 +0000 (19:09 -0300)
committerLucas Di Pentima <lucas@curoverse.com>
Mon, 24 Jul 2017 22:09:14 +0000 (19:09 -0300)
with keep-web.

Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas@curoverse.com>

apps/workbench/test/integration/anonymous_access_test.rb
apps/workbench/test/integration/collections_test.rb

index d69de2c8b156d719b6f69d58c647100fd11d356d..fef83ba4e8440e70233321652afa33817b28c5b1 100644 (file)
@@ -123,11 +123,11 @@ class AnonymousAccessTest < ActionDispatch::IntegrationTest
 
     magic = rand(2**512).to_s 36
     token = api_fixture('api_client_authorizations')['admin']['api_token']
-    logblock = `echo -n #{magic.shellescape} | ARVADOS_API_TOKEN=#{token.shellescape} arv-put --no-progress --raw -`.strip
+    datablock = `echo -n #{magic.shellescape} | ARVADOS_API_TOKEN=#{token.shellescape} arv-put --no-progress --raw -`.strip
     assert $?.success?, $?
     col = nil
     use_token 'admin' do
-      mtxt = ". #{logblock} 0:#{magic.length}:Hello\\040world.txt\n"
+      mtxt = ". #{datablock} 0:#{magic.length}:Hello\\040world.txt\n"
       col = Collection.create(
         manifest_text: mtxt,
         owner_uuid: api_fixture('groups')['anonymously_accessible_project']['uuid'])
index abe34ac3b2ffb8834607df036f057203ffd36f0b..71cfe38abfda32b2d5b5ce943ecdbf26f46ff52b 100644 (file)
@@ -6,6 +6,8 @@ require 'integration_helper'
 require_relative 'integration_test_utils'
 
 class CollectionsTest < ActionDispatch::IntegrationTest
+  include KeepWebConfig
+
   setup do
     need_javascript
   end
@@ -52,6 +54,46 @@ class CollectionsTest < ActionDispatch::IntegrationTest
     end
   end
 
+  test "can download an entire collection with a reader token" do
+    use_keep_web_config
+
+    token = api_fixture('api_client_authorizations')['active']['api_token']
+    data = "foo\nfile\n"
+    datablock = `echo -n #{data.shellescape} | ARVADOS_API_TOKEN=#{token.shellescape} arv-put --no-progress --raw -`.strip
+    assert $?.success?, $?
+
+    col = nil
+    use_token 'active' do
+      mtxt = ". #{datablock} 0:#{data.length}:foo\n"
+      col = Collection.create(manifest_text: mtxt)
+    end
+
+    uuid = col.uuid
+    token = api_fixture('api_client_authorizations')['active_all_collections']['api_token']
+    url_head = "/collections/download/#{uuid}/#{token}/"
+    visit url_head
+    # It seems that Capybara can't inspect tags outside the body, so this is
+    # a very blunt approach.
+    assert_no_match(/<\s*meta[^>]+\bnofollow\b/i, page.html,
+                    "wget prohibited from recursing the collection page")
+    # Look at all the links that wget would recurse through using our
+    # recommended options, and check that it's exactly the file list.
+    hrefs = page.all('a').map do |anchor|
+      link = anchor[:href] || ''
+      if link.start_with? url_head
+        link[url_head.size .. -1]
+      elsif link.start_with? '/'
+        nil
+      else
+        link
+      end
+    end
+    assert_equal(['foo'], hrefs.compact.sort,
+                 "download page did provide strictly file links")
+    click_link "foo"
+    assert_text "foo\nfile\n"
+  end
+
   test "combine selected collections into new collection" do
     foo_collection = api_fixture('collections')['foo_file']
     bar_collection = api_fixture('collections')['bar_file']