Merge branch 'master' into 15803-unsetup
[arvados.git] / apps / workbench / test / integration / jobs_test.rb
index 716e7319874d56189b145acae6fd4c137a590f23..7b510f2be9347b0a5f5b121b8d984f8ccf41983b 100644 (file)
@@ -1,9 +1,16 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 require 'fileutils'
 require 'tmpdir'
 
 require 'integration_helper'
 
 class JobsTest < ActionDispatch::IntegrationTest
+  setup do
+      need_javascript
+  end
 
   def fakepipe_with_log_data
     content =
@@ -13,63 +20,67 @@ class JobsTest < ActionDispatch::IntegrationTest
     StringIO.new content, 'r'
   end
 
-  test "add job description" do
-    need_javascript
-    visit page_with_token("active", "/jobs")
-
-    # go to job running the script "doesnotexist"
-    within first('tr', text: 'doesnotexist') do
-      find("a").click
-    end
-
-    # edit job description
-    within('.arv-description-as-subtitle') do
-      find('.fa-pencil').click
-      find('.editable-input textarea').set('*Textile description for job* - "Go to dashboard":/')
-      find('.editable-submit').click
-    end
-    wait_for_ajax
-
-    # Verify edited description
-    assert page.has_no_text? '*Textile description for job*'
-    assert page.has_text? 'Textile description for job'
-    assert page.has_link? 'Go to dashboard'
-    click_link 'Go to dashboard'
-    assert page.has_text? 'Active pipelines'
-  end
-
-  test "view job log" do
-    need_javascript
-    job = api_fixture('jobs')['job_with_real_log']
+  [
+    ['active', true],
+    ['job_reader2', false],
+  ].each do |user, readable|
+    test "view job with components as #{user} user" do
+      Rails.configuration.Users.AnonymousUserToken = ""
+      job = api_fixture('jobs')['running_job_with_components']
+      component1 = api_fixture('jobs')['completed_job_in_publicly_accessible_project']
+      component2 = api_fixture('pipeline_instances')['running_pipeline_with_complete_job']
+      component2_child1 = api_fixture('jobs')['previous_job_run']
+      component2_child2 = api_fixture('jobs')['running']
 
-    IO.expects(:popen).returns(fakepipe_with_log_data)
+      visit page_with_token(user, "/jobs/#{job['uuid']}")
+      assert page.has_text? job['script_version']
+      assert page.has_no_text? 'script_parameters'
 
-    visit page_with_token("active", "/jobs/#{job['uuid']}")
-    assert page.has_text? job['script_version']
+      # The job_reader2 is allowed to read job, component2, and component2_child1,
+      # and component2_child2 only as a component of the pipeline component2
+      if readable
+        assert page.has_link? 'component1'
+        assert page.has_link? 'component2'
+      else
+        assert page.has_no_link? 'component1'
+        assert page.has_link? 'component2'
+      end
 
-    click_link 'Log'
-    wait_for_ajax
-    assert page.has_text? 'Started at'
-    assert page.has_text? 'Finished at'
-    assert page.has_text? 'log message 1'
-    assert page.has_text? 'log message 2'
-    assert page.has_text? 'log message 3'
-    assert page.has_no_text? 'Showing only 100 bytes of this log'
-  end
-
-  test 'view partial job log' do
-    need_javascript
-    # This config will be restored during teardown by ../test_helper.rb:
-    Rails.configuration.log_viewer_max_bytes = 100
+      if readable
+        click_link('component1')
+        within('.panel-collapse') do
+          assert(has_text? component1['uuid'])
+          assert(has_text? component1['script_version'])
+          assert(has_text? 'script_parameters')
+        end
+        click_link('component1')
+      end
 
-    IO.expects(:popen).returns(fakepipe_with_log_data)
-    job = api_fixture('jobs')['job_with_real_log']
+      click_link('component2')
+      within('.panel-collapse') do
+        assert(has_text? component2['uuid'])
+        assert(has_text? component2['script_version'])
+        assert(has_no_text? 'script_parameters')
+        assert(has_link? 'previous')
+        assert(has_link? 'running')
 
-    visit page_with_token("active", "/jobs/#{job['uuid']}")
-    assert page.has_text? job['script_version']
+        click_link('previous')
+        within('.panel-collapse') do
+          assert(has_text? component2_child1['uuid'])
+          assert(has_text? component2_child1['script_version'])
+        end
+        click_link('previous')
 
-    click_link 'Log'
-    wait_for_ajax
-    assert page.has_text? 'Showing only 100 bytes of this log'
+        click_link('running')
+        within('.panel-collapse') do
+          assert(has_text? component2_child2['uuid'])
+          if readable
+            assert(has_text? component2_child2['script_version'])
+          else
+            assert(has_no_text? component2_child2['script_version'])
+          end
+        end
+      end
+    end
   end
 end