Merged master
[arvados.git] / services / api / test / functional / arvados / v1 / links_controller_test.rb
1 require 'test_helper'
2
3 class Arvados::V1::LinksControllerTest < ActionController::TestCase
4
5   test "no symbol keys in serialized hash" do
6     link = {
7       properties: {username: 'testusername'},
8       link_class: 'test',
9       name: 'encoding',
10       tail_uuid: users(:admin).uuid,
11       head_uuid: virtual_machines(:testvm).uuid
12     }
13     authorize_with :admin
14     [link, link.to_json].each do |formatted_link|
15       post :create, link: formatted_link
16       assert_response :success
17       assert_not_nil assigns(:object)
18       assert_equal 'testusername', assigns(:object).properties['username']
19       assert_equal false, assigns(:object).properties.has_key?(:username)
20     end
21   end
22   
23   test "head must exist" do
24     link = {
25       link_class: 'test',
26       name: 'stuff',
27       tail_uuid: users(:active).uuid,
28       head_uuid: 'zzzzz-tpzed-xyzxyzxerrrorxx'
29     }
30     authorize_with :admin
31     post :create, link: link
32     assert_response 422
33   end
34
35   test "tail must exist" do
36     link = {
37       link_class: 'test',
38       name: 'stuff',
39       head_uuid: users(:active).uuid,
40       tail_uuid: 'zzzzz-tpzed-xyzxyzxerrrorxx'
41     }
42     authorize_with :admin
43     post :create, link: link
44     assert_response 422
45   end
46
47   test "tail must be visible by user" do
48     link = {
49       link_class: 'test',
50       name: 'stuff',
51       head_uuid: users(:active).uuid,
52       tail_uuid: virtual_machines(:testvm).uuid
53     }
54     authorize_with :active
55     post :create, link: link
56     assert_response 422
57   end
58
59   test "filter links with 'is_a' operator" do
60     authorize_with :admin
61     get :index, {
62       filters: [ ['tail_uuid', 'is_a', 'arvados#user'] ]
63     }
64     assert_response :success
65     found = assigns(:objects)
66     assert_not_equal 0, found.count
67     assert_equal found.count, (found.select { |f| f.tail_uuid.match /[a-z0-9]{5}-tpzed-[a-z0-9]{15}/}).count
68   end
69
70   test "filter links with 'is_a' operator with more than one" do
71     authorize_with :admin
72     get :index, {
73       filters: [ ['tail_uuid', 'is_a', ['arvados#user', 'arvados#group'] ] ],
74     }
75     assert_response :success
76     found = assigns(:objects)
77     assert_not_equal 0, found.count
78     assert_equal found.count, (found.select { |f| f.tail_uuid.match /[a-z0-9]{5}-(tpzed|j7d0g)-[a-z0-9]{15}/}).count
79   end
80
81   test "filter links with 'is_a' operator with bogus type" do
82     authorize_with :admin
83     get :index, {
84       filters: [ ['tail_uuid', 'is_a', ['arvados#bogus'] ] ],
85     }
86     assert_response :success
87     found = assigns(:objects)
88     assert_equal 0, found.count
89   end
90
91   test "filter links with 'is_a' operator with collection" do
92     authorize_with :admin
93     get :index, {
94       filters: [ ['head_uuid', 'is_a', ['arvados#collection'] ] ],
95     }
96     assert_response :success
97     found = assigns(:objects)
98     assert_response :success
99     found = assigns(:objects)
100     assert_not_equal 0, found.count
101     assert_equal found.count, (found.select { |f| f.head_uuid.match /[a-f0-9]{32}\+\d+/}).count
102   end
103
104
105 end