3147: PySDK tests use mock>=1.0 and easier mock side_effect.
[arvados.git] / services / api / test / integration / collections_api_test.rb
1 require 'test_helper'
2
3 class CollectionsApiTest < ActionDispatch::IntegrationTest
4   fixtures :all
5
6   test "should get index" do
7     get "/arvados/v1/collections", {:format => :json}, auth(:active)
8     assert_response :success
9     assert_equal "arvados#collectionList", json_response['kind']
10   end
11
12   test "get index with filters= (empty string)" do
13     get "/arvados/v1/collections", {:format => :json, :filters => ''}, auth(:active)
14     assert_response :success
15     assert_equal "arvados#collectionList", json_response['kind']
16   end
17
18   test "get index with invalid filters (array of strings) responds 422" do
19     get "/arvados/v1/collections", {
20       :format => :json,
21       :filters => ['uuid', '=', 'ad02e37b6a7f45bbe2ead3c29a109b8a+54'].to_json
22     }, auth(:active)
23     assert_response 422
24     assert_match /nvalid element.*not an array/, json_response['errors'].join(' ')
25   end
26
27   test "get index with invalid filters (unsearchable column) responds 422" do
28     get "/arvados/v1/collections", {
29       :format => :json,
30       :filters => [['this_column_does_not_exist', '=', 'bogus']].to_json
31     }, auth(:active)
32     assert_response 422
33     assert_match /nvalid attribute/, json_response['errors'].join(' ')
34   end
35
36   test "get index with invalid filters (invalid operator) responds 422" do
37     get "/arvados/v1/collections", {
38       :format => :json,
39       :filters => [['uuid', ':-(', 'displeased']].to_json
40     }, auth(:active)
41     assert_response 422
42     assert_match /nvalid operator/, json_response['errors'].join(' ')
43   end
44
45   test "get index with invalid filters (invalid operand type) responds 422" do
46     get "/arvados/v1/collections", {
47       :format => :json,
48       :filters => [['uuid', '=', {foo: 'bar'}]].to_json
49     }, auth(:active)
50     assert_response 422
51     assert_match /nvalid operand type/, json_response['errors'].join(' ')
52   end
53
54   test "get index with where= (empty string)" do
55     get "/arvados/v1/collections", {:format => :json, :where => ''}, auth(:active)
56     assert_response :success
57     assert_equal "arvados#collectionList", json_response['kind']
58   end
59
60   test "controller 404 response is json" do
61     get "/arvados/v1/thingsthatdonotexist", {:format => :xml}, auth(:active)
62     assert_response 404
63     assert_equal 1, json_response['errors'].length
64     assert_equal true, json_response['errors'][0].is_a?(String)
65   end
66
67   test "object 404 response is json" do
68     get "/arvados/v1/groups/zzzzz-j7d0g-o5ba971173cup4f", {}, auth(:active)
69     assert_response 404
70     assert_equal 1, json_response['errors'].length
71     assert_equal true, json_response['errors'][0].is_a?(String)
72   end
73
74   test "store collection as json" do
75     signing_opts = {
76       key: Rails.configuration.blob_signing_key,
77       api_token: api_token(:active),
78     }
79     signed_locator = Blob.sign_locator('bad42fa702ae3ea7d888fef11b46f450+44',
80                                        signing_opts)
81     post "/arvados/v1/collections", {
82       format: :json,
83       collection: "{\"manifest_text\":\". #{signed_locator} 0:44:md5sum.txt\\n\",\"portable_data_hash\":\"ad02e37b6a7f45bbe2ead3c29a109b8a+54\"}"
84     }, auth(:active)
85     assert_response 200
86     assert_equal 'ad02e37b6a7f45bbe2ead3c29a109b8a+54', json_response['portable_data_hash']
87   end
88
89   test "store collection with manifest_text only" do
90     signing_opts = {
91       key: Rails.configuration.blob_signing_key,
92       api_token: api_token(:active),
93     }
94     signed_locator = Blob.sign_locator('bad42fa702ae3ea7d888fef11b46f450+44',
95                                        signing_opts)
96     post "/arvados/v1/collections", {
97       format: :json,
98       collection: "{\"manifest_text\":\". #{signed_locator} 0:44:md5sum.txt\\n\"}"
99     }, auth(:active)
100     assert_response 200
101     assert_equal 'ad02e37b6a7f45bbe2ead3c29a109b8a+54', json_response['portable_data_hash']
102   end
103
104   test "store collection then update name" do
105     signing_opts = {
106       key: Rails.configuration.blob_signing_key,
107       api_token: api_token(:active),
108     }
109     signed_locator = Blob.sign_locator('bad42fa702ae3ea7d888fef11b46f450+44',
110                                        signing_opts)
111     post "/arvados/v1/collections", {
112       format: :json,
113       collection: "{\"manifest_text\":\". #{signed_locator} 0:44:md5sum.txt\\n\",\"portable_data_hash\":\"ad02e37b6a7f45bbe2ead3c29a109b8a+54\"}"
114     }, auth(:active)
115     assert_response 200
116     assert_equal 'ad02e37b6a7f45bbe2ead3c29a109b8a+54', json_response['portable_data_hash']
117
118     put "/arvados/v1/collections/#{json_response['uuid']}", {
119       format: :json,
120       collection: { name: "a name" }
121     }, auth(:active)
122
123     assert_response 200
124     assert_equal 'ad02e37b6a7f45bbe2ead3c29a109b8a+54', json_response['portable_data_hash']
125     assert_equal 'a name', json_response['name']
126
127     get "/arvados/v1/collections/#{json_response['uuid']}", {
128       format: :json,
129     }, auth(:active)
130
131     assert_response 200
132     assert_equal 'ad02e37b6a7f45bbe2ead3c29a109b8a+54', json_response['portable_data_hash']
133     assert_equal 'a name', json_response['name']
134   end
135
136
137 end