9767: add a link to workflow in the container_request#show page.
[arvados.git] / apps / workbench / test / integration / container_requests_test.rb
index 232f33c1ac819737cdfc089f907168b4ce6ef0df..cdb5c9180b660d3f64b930b8722b38288b7c3432 100644 (file)
@@ -5,22 +5,95 @@ class ContainerRequestsTest < ActionDispatch::IntegrationTest
     need_javascript
   end
 
-  test "enter a float for a number workflow input" do
-    # Poltergeist either does not support the HTML 5 <input
-    # type="number">, or interferes with the associated X-Editable
-    # validation code.  If the input field has type=number (forcing an
-    # integer), this test will yield a false positive under
-    # Poltergeist.  --Brett, 2015-02-05
-    need_selenium "for strict X-Editable input validation"
+  [
+    ['ex_string', 'abc'],
+    ['ex_string_opt', 'abc'],
+    ['ex_int', 12],
+    ['ex_int_opt', 12],
+    ['ex_long', 12],
+    ['ex_double', '12.34', 12.34],
+    ['ex_float', '12.34', 12.34],
+  ].each do |input_id, input_value, expected_value|
+    test "set input #{input_id} with #{input_value}" do
+      request_uuid = api_fixture("container_requests", "uncommitted", "uuid")
+      visit page_with_token("active", "/container_requests/#{request_uuid}")
+      selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][#{input_id}]']"
+      find(selector).click
+      find(".editable-input input").set(input_value)
+      find("#editable-submit").click
+      assert_no_selector(".editable-popup")
+      assert_selector(selector, text: expected_value || input_value)
+    end
+  end
+
+  test "select value for boolean input" do
+    request_uuid = api_fixture("container_requests", "uncommitted", "uuid")
+    visit page_with_token("active", "/container_requests/#{request_uuid}")
+    selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][ex_boolean]']"
+    find(selector).click
+    within(".editable-input") do
+      select "true"
+    end
+    find("#editable-submit").click
+    assert_no_selector(".editable-popup")
+    assert_selector(selector, text: "true")
+  end
+
+  test "select value for enum typed input" do
     request_uuid = api_fixture("container_requests", "uncommitted", "uuid")
     visit page_with_token("active", "/container_requests/#{request_uuid}")
-    INPUT_SELECTOR =
-      ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][ex_double]']"
-    find(INPUT_SELECTOR).click
-    find(".editable-input input").set("12.34")
+    selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][ex_enum]']"
+    find(selector).click
+    within(".editable-input") do
+      select "b"    # second value
+    end
     find("#editable-submit").click
     assert_no_selector(".editable-popup")
-    assert_selector(INPUT_SELECTOR, text: "12.34")
+    assert_selector(selector, text: "b")
   end
 
+  [
+    ['directory_type'],
+    ['file_type'],
+  ].each do |type|
+    test "select value for #{type} input" do
+      request_uuid = api_fixture("container_requests", "uncommitted-with-directory-input", "uuid")
+      visit page_with_token("active", "/container_requests/#{request_uuid}")
+      assert_text 'Provide a value for the following parameter'
+      click_link 'Choose'
+      within('.modal-dialog') do
+        wait_for_ajax
+        collection = api_fixture('collections', 'collection_with_one_property', 'uuid')
+        find("div[data-object-uuid=#{collection}]").click
+        if type == 'ex_file'
+          wait_for_ajax
+          find('.preview-selectable', text: 'bar').click
+        end
+        find('button', text: 'OK').click
+      end
+      page.assert_no_selector 'a.disabled,button.disabled', text: 'Run'
+      assert_text 'This workflow does not need any further inputs'
+      click_link "Run"
+      wait_for_ajax
+      assert_text 'This container is committed'
+    end
+  end
+
+  test "Run button enabled once all required inputs are provided" do
+    request_uuid = api_fixture("container_requests", "uncommitted-with-required-and-optional-inputs", "uuid")
+    visit page_with_token("active", "/container_requests/#{request_uuid}")
+    assert_text 'Provide a value for the following parameter'
+
+    page.assert_selector 'a.disabled,button.disabled', text: 'Run'
+
+    selector = ".editable[data-name='[mounts][/var/lib/cwl/cwl.input.json][content][int_required]']"
+    find(selector).click
+    find(".editable-input input").set(2016)
+    find("#editable-submit").click
+
+    page.assert_no_selector 'a.disabled,button.disabled', text: 'Run'
+    click_link "Run"
+    wait_for_ajax
+    assert_text 'This container is committed'
+  end
 end