Merge branch '5554-delete-job-log-rows-wip'
[arvados.git] / apps / workbench / test / integration / collection_upload_test.rb
index 1a3449ff37e7627fa623bc8b039265ac110b2f53..6960d3bc899d47bdfe929719f88dd24615db3f98 100644 (file)
@@ -1,10 +1,6 @@
 require 'integration_helper'
 
 class CollectionUploadTest < ActionDispatch::IntegrationTest
-  setup do
-    Headless.new.start
-  end
-
   setup do
     testfiles.each do |filename, content|
       open(testfile_path(filename), 'w') do |io|
@@ -20,26 +16,27 @@ class CollectionUploadTest < ActionDispatch::IntegrationTest
   end
 
   test "Create new collection using upload button" do
-    Capybara.current_driver = :poltergeist
+    need_javascript
     visit page_with_token 'active', aproject_path
     find('.btn', text: 'Add data').click
     click_link 'Upload files from my computer'
     # Should be looking at a new empty collection.
     assert_text 'New collection'
-    assert_text 'd41d8cd98f00b204e9800998ecf8427e+0'
+    assert_text ' 0 files'
+    assert_text ' 0 bytes'
     # The "Upload" tab should be active and loaded.
     assert_selector 'div#Upload.active div.panel'
   end
 
   test "No Upload tab on non-writable collection" do
-    Capybara.current_driver = :poltergeist
+    need_javascript
     visit(page_with_token 'active',
           '/collections/'+api_fixture('collections')['user_agreement']['uuid'])
     assert_no_selector '.nav-tabs Upload'
   end
 
   test "Upload two empty files with the same name" do
-    Capybara.current_driver = :selenium
+    need_selenium "to make file uploads work"
     visit page_with_token 'active', sandbox_path
     find('.nav-tabs a', text: 'Upload').click
     attach_file 'file_selector', testfile_path('empty.txt')
@@ -53,15 +50,17 @@ class CollectionUploadTest < ActionDispatch::IntegrationTest
   end
 
   test "Upload non-empty files, report errors" do
-    Capybara.current_driver = :selenium
+    need_selenium "to make file uploads work"
     visit page_with_token 'active', sandbox_path
     find('.nav-tabs a', text: 'Upload').click
     attach_file 'file_selector', testfile_path('a')
     attach_file 'file_selector', testfile_path('foo.txt')
     assert_selector 'button:not([disabled])', text: 'Start'
     click_button 'Start'
-    if "test environment does not have a keepproxy yet, see #4534"
-      assert_text :visible, 'error'
+    if "test environment does not have a keepproxy yet, see #4534" != "fixed"
+      using_wait_time 20 do
+        assert_text :visible, 'error'
+      end
     else
       assert_text :visible, 'Done!'
       visit sandbox_path+'.json'
@@ -69,6 +68,43 @@ class CollectionUploadTest < ActionDispatch::IntegrationTest
     end
   end
 
+  test "Report mixed-content error" do
+    skip 'Test suite does not use TLS'
+    need_selenium "to make file uploads work"
+    begin
+      use_token :admin
+      proxy = KeepService.find(api_fixture('keep_services')['proxy']['uuid'])
+      proxy.update_attributes service_ssl_flag: false
+    end
+    visit page_with_token 'active', sandbox_path
+    find('.nav-tabs a', text: 'Upload').click
+    attach_file 'file_selector', testfile_path('foo.txt')
+    assert_selector 'button:not([disabled])', text: 'Start'
+    click_button 'Start'
+    using_wait_time 5 do
+      assert_text :visible, 'server setup problem'
+      assert_text :visible, 'cannot be used from origin'
+    end
+  end
+
+  test "Report network error" do
+    need_selenium "to make file uploads work"
+    begin
+      use_token :admin
+      proxy = KeepService.find(api_fixture('keep_services')['proxy']['uuid'])
+      # Even if you somehow do port>2^16, surely nx.example.net won't respond
+      proxy.update_attributes service_host: 'nx.example.net', service_port: 99999
+    end
+    visit page_with_token 'active', sandbox_path
+    find('.nav-tabs a', text: 'Upload').click
+    attach_file 'file_selector', testfile_path('foo.txt')
+    assert_selector 'button:not([disabled])', text: 'Start'
+    click_button 'Start'
+    using_wait_time 5 do
+      assert_text :visible, 'network error'
+    end
+  end
+
   protected
 
   def aproject_path