10144: Conver the link_to_log tests into controller tests so that the #show is executed.
[arvados.git] / apps / workbench / test / controllers / work_units_controller_test.rb
1 require 'test_helper'
2
3 class WorkUnitsControllerTest < ActionController::TestCase
4   # These tests don't do state-changing API calls.
5   # Save some time by skipping the database reset.
6   reset_api_fixtures :after_each_test, false
7   reset_api_fixtures :after_suite, true
8
9   [
10     ['foo', 10, 25,
11       ['/pipeline_instances/zzzzz-d1hrv-1xfj6xkicf2muk2',
12        '/pipeline_instances/zzzzz-d1hrv-jobspeccomponts',
13        '/jobs/zzzzz-8i9sb-grx15v5mjnsyxk7'],
14       ['/pipeline_instances/zzzzz-d1hrv-1yfj61234abcdk3',
15        '/jobs/zzzzz-8i9sb-n7omg50bvt0m1nf',
16        '/container_requests/zzzzz-xvhdp-cr4completedcr2']],
17     ['pipeline_with_tagged_collection_input', 1, 1,
18       ['/pipeline_instances/zzzzz-d1hrv-1yfj61234abcdk3'],
19       ['/pipeline_instances/zzzzz-d1hrv-jobspeccomponts',
20        '/jobs/zzzzz-8i9sb-pshmckwoma9plh7',
21        '/jobs/zzzzz-8i9sb-n7omg50bvt0m1nf',
22        '/container_requests/zzzzz-xvhdp-cr4completedcr2']],
23     ['no_such_match', 0, 0,
24       [],
25       ['/pipeline_instances/zzzzz-d1hrv-jobspeccomponts',
26        '/jobs/zzzzz-8i9sb-pshmckwoma9plh7',
27        '/jobs/zzzzz-8i9sb-n7omg50bvt0m1nf',
28        '/container_requests/zzzzz-xvhdp-cr4completedcr2']],
29   ].each do |search_filter, expected_min, expected_max, expected, not_expected|
30     test "all_processes page for search filter '#{search_filter}'" do
31       work_units_index(filters: [['any','@@', search_filter]])
32       assert_response :success
33
34       # Verify that expected number of processes are found
35       found_count = json_response['content'].scan('<tr').count
36       if expected_min == expected_max
37         assert_equal(true, found_count == expected_min,
38           "Not found expected number of items. Expected #{expected_min} and found #{found_count}")
39       else
40         assert_equal(true, found_count>=expected_min,
41           "Found too few items. Expected at least #{expected_min} and found #{found_count}")
42         assert_equal(true, found_count<=expected_max,
43           "Found too many items. Expected at most #{expected_max} and found #{found_count}")
44       end
45
46       # verify that all expected uuid links are found
47       expected.each do |link|
48         assert_match /href="#{link}"/, json_response['content']
49       end
50
51       # verify that none of the not_expected uuid links are found
52       not_expected.each do |link|
53         assert_no_match /href="#{link}"/, json_response['content']
54       end
55     end
56   end
57
58   def work_units_index params
59     params = {
60       partial: :all_processes_rows,
61       format: :json,
62     }.merge(params)
63     encoded_params = Hash[params.map { |k,v|
64                             [k, (v.is_a?(Array) || v.is_a?(Hash)) ? v.to_json : v]
65                           }]
66     get :index, encoded_params, session_for(:active)
67   end
68
69   [
70     [Job, 'active', 'running_job_with_components', '/jobs/zzzzz-8i9sb-jyq01m7in1jlofj#Log'],
71     [PipelineInstance, 'active', 'pipeline_in_running_state', '/jobs/zzzzz-8i9sb-pshmckwoma9plh7#Log'],
72     [PipelineInstance, nil, 'pipeline_in_publicly_accessible_project_but_other_objects_elsewhere', 'Log unavailable'],
73   ].each do |type, token, fixture, log_link|
74     test "link_to_log for #{fixture} for #{token}" do
75       use_token 'admin'
76       obj = find_fixture(type, fixture)
77
78       @controller = if type == Job then JobsController.new else PipelineInstancesController.new end
79
80       if token
81         get :show, {id: obj['uuid']}, session_for(token)
82       else
83         Rails.configuration.anonymous_user_token =
84           api_fixture("api_client_authorizations", "anonymous", "api_token")
85         get :show, {id: obj['uuid']}
86       end
87
88       assert_includes @response.body, log_link
89     end
90   end
91 end