1 require 'integration_helper'
3 class ContainerRequestsTest < ActionDispatch::IntegrationTest
10 ['ex_string_opt', 'abc'],
14 ['ex_double', '12.34', 12.34],
15 ['ex_float', '12.34', 12.34],
16 ].each do |input_id, input_value, expected_value|
17 test "set input #{input_id} with #{input_value}" do
18 request_uuid = api_fixture("container_requests", "uncommitted", "uuid")
19 visit page_with_token("active", "/container_requests/#{request_uuid}")
20 selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][#{input_id}]']"
22 find(".editable-input input").set(input_value)
23 find("#editable-submit").click
24 assert_no_selector(".editable-popup")
25 assert_selector(selector, text: expected_value || input_value)
29 test "select value for boolean input" do
30 request_uuid = api_fixture("container_requests", "uncommitted", "uuid")
31 visit page_with_token("active", "/container_requests/#{request_uuid}")
32 selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][ex_boolean]']"
34 within(".editable-input") do
37 find("#editable-submit").click
38 assert_no_selector(".editable-popup")
39 assert_selector(selector, text: "true")
42 test "select value for enum typed input" do
43 request_uuid = api_fixture("container_requests", "uncommitted", "uuid")
44 visit page_with_token("active", "/container_requests/#{request_uuid}")
45 selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][ex_enum]']"
47 within(".editable-input") do
48 select "b" # second value
50 find("#editable-submit").click
51 assert_no_selector(".editable-popup")
52 assert_selector(selector, text: "b")
59 test "select value for #{type} input" do
60 request_uuid = api_fixture("container_requests", "uncommitted-with-directory-input", "uuid")
61 visit page_with_token("active", "/container_requests/#{request_uuid}")
62 assert_text 'Provide a value for the following parameter'
64 within('.modal-dialog') do
66 collection = api_fixture('collections', 'collection_with_one_property', 'uuid')
67 find("div[data-object-uuid=#{collection}]").click
70 find('.preview-selectable', text: 'bar').click
72 find('button', text: 'OK').click
74 page.assert_no_selector 'a.disabled,button.disabled', text: 'Run'
75 assert_text 'This workflow does not need any further inputs'
78 assert_text 'This container is queued'
82 test "Run button enabled once all required inputs are provided" do
83 request_uuid = api_fixture("container_requests", "uncommitted-with-required-and-optional-inputs", "uuid")
84 visit page_with_token("active", "/container_requests/#{request_uuid}")
85 assert_text 'Provide a value for the following parameter'
87 page.assert_selector 'a.disabled,button.disabled', text: 'Run'
89 selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][int_required]']"
91 find(".editable-input input").set(2016)
92 find("#editable-submit").click
94 page.assert_no_selector 'a.disabled,button.disabled', text: 'Run'
97 assert_text 'This container is queued'
100 test "Run button enabled when workflow is empty and no inputs are needed" do
101 visit page_with_token("active")
103 find('.btn', text: 'Run a process').click
104 within('.modal-dialog') do
105 find('.selectable', text: 'Valid workflow with no definition yaml').click
106 find('.btn', text: 'Next: choose inputs').click
109 assert_text 'This workflow does not need any further inputs'
110 page.assert_selector 'a', text: 'Run'
113 test "Provenance graph shown on committed container requests" do
114 cr = api_fixture('container_requests', 'completed')
115 visit page_with_token("active", "/container_requests/#{cr['uuid']}")
116 assert page.has_text? 'Provenance'
117 click_link 'Provenance'
119 # Check for provenance graph existance
120 page.assert_selector '#provenance_svg'
121 page.assert_selector 'ellipse+text', text: cr['name'], visible: false
122 page.assert_selector 'g.node>title', text: cr['uuid'], visible: false
126 visit page_with_token("active", "/container_requests")
128 running_owner_active = api_fixture("container_requests", "requester_for_running")
129 anon_accessible_cr = api_fixture("container_requests", "running_anonymous_accessible")
131 # both of these CRs should be accessible to the user
132 assert_selector "a[href=\"/container_requests/#{running_owner_active['uuid']}\"]", text: running_owner_active[:name]
133 assert_selector "a[href=\"/container_requests/#{anon_accessible_cr['uuid']}\"]", text: anon_accessible_cr[:name]
135 # user can delete the "running" container_request
136 within(".cr-#{running_owner_active['uuid']}") do
137 assert_not_nil first('.glyphicon-trash')
140 # user can not delete the anonymously accessible container_request
141 within(".cr-#{anon_accessible_cr['uuid']}") do
142 assert_nil first('.glyphicon-trash')
145 # verify the search box in the page
146 find('.recent-container-requests-filterable-control').set("anonymous")
147 sleep 0.350 # Wait for 250ms debounce timer (see filterable.js)
149 assert_no_selector "a[href=\"/container_requests/#{running_owner_active['uuid']}\"]", text: running_owner_active[:name]
150 assert_selector "a[href=\"/container_requests/#{anon_accessible_cr['uuid']}\"]", text: anon_accessible_cr[:name]