+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
require 'helpers/fake_websocket_helper'
require 'integration_helper'
need_javascript
end
- test "scroll all_processes page" do
- expected_min, expected_max, expected, not_expected = [
- 25, 100,
- ['/pipeline_instances/zzzzz-d1hrv-1yfj61234abcdk3',
- '/pipeline_instances/zzzzz-d1hrv-jobspeccomponts',
- '/jobs/zzzzz-8i9sb-grx15v5mjnsyxk7',
- '/jobs/zzzzz-8i9sb-n7omg50bvt0m1nf',
- '/container_requests/zzzzz-xvhdp-cr4completedcr2',
- '/container_requests/zzzzz-xvhdp-cr4requestercn2'],
- ['/pipeline_instances/zzzzz-d1hrv-scarxiyajtshq3l',
- '/container_requests/zzzzz-xvhdp-oneof60crs00001']
- ]
-
+ [[true, 25, 100,
+ ['/pipeline_instances/zzzzz-d1hrv-1yfj61234abcdk3',
+ '/pipeline_instances/zzzzz-d1hrv-jobspeccomponts',
+ '/jobs/zzzzz-8i9sb-grx15v5mjnsyxk7',
+ '/jobs/zzzzz-8i9sb-n7omg50bvt0m1nf',
+ '/container_requests/zzzzz-xvhdp-cr4completedcr2',
+ '/container_requests/zzzzz-xvhdp-cr4requestercn2'],
+ ['/pipeline_instances/zzzzz-d1hrv-scarxiyajtshq3l',
+ '/container_requests/zzzzz-xvhdp-oneof60crs00001']],
+ [false, 25, 100,
+ ['/pipeline_instances/zzzzz-d1hrv-1yfj61234abcdk3',
+ '/pipeline_instances/zzzzz-d1hrv-jobspeccomponts',
+ '/container_requests/zzzzz-xvhdp-cr4completedcr2'],
+ ['/pipeline_instances/zzzzz-d1hrv-scarxiyajtshq3l',
+ '/container_requests/zzzzz-xvhdp-oneof60crs00001',
+ '/jobs/zzzzz-8i9sb-grx15v5mjnsyxk7',
+ '/jobs/zzzzz-8i9sb-n7omg50bvt0m1nf',
+ '/container_requests/zzzzz-xvhdp-cr4requestercn2'
+ ]]
+ ].each do |show_children, expected_min, expected_max, expected, not_expected|
+ test "scroll all_processes page with show_children=#{show_children}" do
visit page_with_token('active', "/all_processes")
+ if show_children
+ find('#IncludeChildProcs').click
+ wait_for_ajax
+ end
+
page_scrolls = expected_max/20 + 2
within('.arv-recent-all-processes') do
(0..page_scrolls).each do |i|
found_count = found_items.count
if expected_min == expected_max
assert_equal(true, found_count == expected_min,
- "Not found expected number of items. Expected #{expected_min} and found #{found_count}")
+ "Not found expected number of items. Expected #{expected_min} and found #{found_count}")
assert page.has_no_text? 'request failed'
else
assert_equal(true, found_count>=expected_min,
- "Found too few items. Expected at least #{expected_min} and found #{found_count}")
+ "Found too few items. Expected at least #{expected_min} and found #{found_count}")
assert_equal(true, found_count<=expected_max,
- "Found too many items. Expected at most #{expected_max} and found #{found_count}")
+ "Found too many items. Expected at most #{expected_max} and found #{found_count}")
end
# verify that all expected uuid links are found
not_expected.each do |link|
assert_no_selector "a[href=\"#{link}\"]"
end
+ end
end
[
- ['jobs', 'running_job_with_components', true],
- ['pipeline_instances', 'components_is_jobspec', false],
+ ['jobs', 'running_job_with_components', true, true],
+ ['pipeline_instances', 'components_is_jobspec', true, true],
['containers', 'running', false],
['container_requests', 'running', true],
- ].each do |type, fixture, cancelable|
+ ].each do |type, fixture, cancelable, confirm_cancellation|
test "cancel button for #{type}/#{fixture}" do
if cancelable
need_selenium 'to cancel'
visit page_with_token "active", "/#{type}/#{obj['uuid']}"
assert_text 'created_at'
-
if cancelable
assert_text 'priority: 1' if type.include?('container')
- assert_selector 'button', text: 'Cancel'
- first('a,button', text: 'Cancel').click
+ if type.include?('pipeline')
+ assert_selector 'a', text: 'Pause'
+ first('a,link', text: 'Pause').click
+ else
+ assert_selector 'button', text: 'Cancel'
+ first('a,button', text: 'Cancel').click
+ end
+ if confirm_cancellation
+ alert = page.driver.browser.switch_to.alert
+ alert.accept
+ end
wait_for_ajax
end
- assert_text 'priority: 0' if cancelable and type.include?('container')
+
+ if type.include?('pipeline')
+ assert_selector 'a', text: 'Resume'
+ assert_no_selector 'a', text: 'Pause'
+ elsif type.include?('job')
+ assert_text 'Cancelled'
+ assert_text 'Paused' # this job has a pipeline child which was also cancelled
+ assert_no_selector 'button', text: 'Cancel'
+ elsif cancelable
+ assert_text 'priority: 0'
+ end
end
end
end
[
- ['Two Part Pipeline Template', 'part-one', 'Provide a value for the following'],
- ['Workflow with input specifications', 'this workflow has inputs specified', 'Provide a value for the following'],
+ ['Pipeline with default input specifications', 'part-one', 'Provide values for the following'],
+ ['Workflow with default input specifications', 'this workflow has inputs specified', 'Provide a value for the following'],
].each do |template_name, preview_txt, process_txt|
test "run a process using template #{template_name} from dashboard" do
visit page_with_token('admin')
within('.recent-processes-actions') do
assert page.has_link?('All processes')
- find('a', text: 'Run a pipeline').click
+ find('a', text: 'Run a process').click
end
# in the chooser, verify preview and click Next button
# in the process page now
assert_text process_txt
assert_selector 'a', text: template_name
+
+ assert_equal "Set value for ex_string_def", find('div.form-group > div > p.form-control-static > a', text: "hello-testing-123")[:"data-title"]
+
+ page.assert_selector 'a.disabled,button.disabled', text: 'Run'
end
end
old_attributes: {state: 'Running'},
new_attributes: {state: 'Complete', exit_code: 1},
},
- }, "Container #{c['uuid']} finished with exit code 1 (failure)"],
+ }, "Container #{c['uuid']} finished"],
# It's unrealistic for state to change again once it's Complete,
# but the logging code doesn't care, so we do it to keep the test
# simple.
assert_text(expect_log_text)
end
end
+
+ [
+ ['jobs', 'active', 'running_job_with_components', 'component1', '/jobs/zzzzz-8i9sb-jyq01m7in1jlofj#Log'],
+ ['pipeline_instances', 'active', 'pipeline_in_running_state', 'foo', '/jobs/zzzzz-8i9sb-pshmckwoma9plh7#Log'],
+ ['pipeline_instances', nil, 'pipeline_in_publicly_accessible_project_but_other_objects_elsewhere', 'foo', 'Log unavailable'],
+ ].each do |type, token, fixture, child, log_link|
+ test "link_to_log for #{fixture} for #{token}" do
+ obj = api_fixture(type)[fixture]
+ if token
+ visit page_with_token token, "/#{type}/#{obj['uuid']}"
+ else
+ Rails.configuration.anonymous_user_token =
+ api_fixture("api_client_authorizations", "anonymous", "api_token")
+ visit "/#{type}/#{obj['uuid']}"
+ end
+
+ click_link(child)
+
+ if token
+ assert_selector "a[href=\"#{log_link}\"]"
+ else
+ assert_text log_link
+ end
+ end
+ end
+
+ test 'Run from workflows index page' do
+ visit page_with_token('active', '/workflows')
+
+ wf_count = page.all('a[data-original-title="show workflow"]').count
+ assert_equal true, wf_count>0
+
+ # Run one of the workflows
+ wf_name = 'Workflow with input specifications'
+ within('tr', text: wf_name) do
+ find('a,button', text: 'Run').click
+ end
+
+ # Choose project for the container_request being created
+ within('.modal-dialog') do
+ find('.selectable', text: 'A Project').click
+ find('button', text: 'Choose').click
+ end
+
+ # In newly created container_request page now
+ assert_text 'A Project' # CR created in "A Project"
+ assert_text "This container request was created from the workflow #{wf_name}"
+ assert_match /Provide a value for .* then click the \"Run\" button to start the workflow/, page.text
+ end
+
+ test 'Run workflow from show page' do
+ visit page_with_token('active', '/workflows/zzzzz-7fd4e-validwithinputs')
+
+ find('a,button', text: 'Run this workflow').click
+
+ # Choose project for the container_request being created
+ within('.modal-dialog') do
+ find('.selectable', text: 'A Project').click
+ find('button', text: 'Choose').click
+ end
+
+ # In newly created container_request page now
+ assert_text 'A Project' # CR created in "A Project"
+ assert_text "This container request was created from the workflow"
+ assert_match /Provide a value for .* then click the \"Run\" button to start the workflow/, page.text
+ end
end