4031: Fix tests. Move RequestDuck to test_helper.rb so as not to duplicate code.
[arvados.git] / apps / workbench / test / controllers / collections_controller_test.rb
1 require 'test_helper'
2
3 class CollectionsControllerTest < ActionController::TestCase
4   include PipelineInstancesHelper
5
6   test 'provenance graph' do
7     use_token 'admin'
8
9     obj = find_fixture Collection, "graph_test_collection3"
10
11     provenance = obj.provenance.stringify_keys
12
13     [obj[:portable_data_hash]].each do |k|
14       assert_not_nil provenance[k], "Expected key #{k} in provenance set"
15     end
16
17     prov_svg = ProvenanceHelper::create_provenance_graph(provenance, "provenance_svg",
18                                                          {:request => RequestDuck,
19                                                            :direction => :bottom_up,
20                                                            :combine_jobs => :script_only})
21
22     stage1 = find_fixture Job, "graph_stage1"
23     stage3 = find_fixture Job, "graph_stage3"
24     previous_job_run = find_fixture Job, "previous_job_run"
25
26     obj_id = obj.portable_data_hash.gsub('+', '\\\+')
27     stage1_out = stage1.output.gsub('+', '\\\+')
28     stage1_id = "#{stage1.script}_#{Digest::MD5.hexdigest(stage1[:script_parameters].to_json)}"
29     stage3_id = "#{stage3.script}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
30
31     assert /#{obj_id}&#45;&gt;#{stage3_id}/.match(prov_svg)
32
33     assert /#{stage3_id}&#45;&gt;#{stage1_out}/.match(prov_svg)
34
35     assert /#{stage1_out}&#45;&gt;#{stage1_id}/.match(prov_svg)
36
37   end
38
39   test 'used_by graph' do
40     use_token 'admin'
41     obj = find_fixture Collection, "graph_test_collection1"
42
43     used_by = obj.used_by.stringify_keys
44
45     used_by_svg = ProvenanceHelper::create_provenance_graph(used_by, "used_by_svg",
46                                                             {:request => RequestDuck,
47                                                               :direction => :top_down,
48                                                               :combine_jobs => :script_only,
49                                                               :pdata_only => true})
50
51     stage2 = find_fixture Job, "graph_stage2"
52     stage3 = find_fixture Job, "graph_stage3"
53
54     stage2_id = "#{stage2.script}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
55     stage3_id = "#{stage3.script}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
56
57     obj_id = obj.portable_data_hash.gsub('+', '\\\+')
58     stage3_out = stage3.output.gsub('+', '\\\+')
59
60     assert /#{obj_id}&#45;&gt;#{stage2_id}/.match(used_by_svg)
61
62     assert /#{obj_id}&#45;&gt;#{stage3_id}/.match(used_by_svg)
63
64     assert /#{stage3_id}&#45;&gt;#{stage3_out}/.match(used_by_svg)
65
66     assert /#{stage3_id}&#45;&gt;#{stage3_out}/.match(used_by_svg)
67
68   end
69 end