X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/ca6c0353c236d5fc0f829880e845cbd8489ea9ad..c3872e7a1c817cd39b702f694f70d34f28f7f472:/services/api/test/functional/arvados/v1/collections_controller_test.rb diff --git a/services/api/test/functional/arvados/v1/collections_controller_test.rb b/services/api/test/functional/arvados/v1/collections_controller_test.rb index eac393104c..43797035bc 100644 --- a/services/api/test/functional/arvados/v1/collections_controller_test.rb +++ b/services/api/test/functional/arvados/v1/collections_controller_test.rb @@ -374,6 +374,24 @@ EOS "Expected 'duplicate key' error in #{response_errors.first}") end + [false, true].each do |ensure_unique_name| + test "create failure with duplicate name, ensure_unique_name #{ensure_unique_name}" do + authorize_with :active + post :create, params: { + collection: { + owner_uuid: users(:active).uuid, + manifest_text: "", + name: "this...............................................................................................................................................................................................................................................................name is too long" + }, + ensure_unique_name: ensure_unique_name + } + assert_response 422 + # check the real error isn't masked by an + # ensure_unique_name-related error (#19698) + assert_match /value too long for type/, json_response['errors'][0] + end + end + [false, true].each do |unsigned| test "create with duplicate name, ensure_unique_name, unsigned=#{unsigned}" do permit_unsigned_manifests unsigned @@ -391,7 +409,7 @@ EOS ensure_unique_name: true } assert_response :success - assert_match /^owned_by_active \(\d{4}-\d\d-\d\d.*?Z\)$/, json_response['name'] + assert_match /^owned_by_active \(#{json_response['uuid'][-15..-1]}\)$/, json_response['name'] end end @@ -1204,6 +1222,20 @@ EOS assert_nil json_response['trash_at'] end + test 'untrash a trashed collection by assigning nil to trash_at' do + authorize_with :active + post :update, params: { + id: collections(:expired_collection).uuid, + collection: { + trash_at: nil, + }, + include_trash: true, + } + assert_response 200 + assert_equal false, json_response['is_trashed'] + assert_nil json_response['trash_at'] + end + test 'untrash error on not trashed collection' do authorize_with :active post :untrash, params: { @@ -1253,7 +1285,7 @@ EOS assert_equal false, json_response['is_trashed'] assert_nil json_response['trash_at'] assert_nil json_response['delete_at'] - assert_match /^same name for trashed and persisted collections \(\d{4}-\d\d-\d\d.*?Z\)$/, json_response['name'] + assert_match /^same name for trashed and persisted collections \(#{json_response['uuid'][-15..-1]}\)$/, json_response['name'] end test 'cannot show collection in trashed subproject' do @@ -1461,4 +1493,56 @@ EOS end end end + + test "select param is respected in 'show' response" do + authorize_with :active + get :show, params: { + id: collections(:collection_owned_by_active).uuid, + select: ["name"], + } + assert_response :success + assert_raises ActiveModel::MissingAttributeError do + assigns(:object).manifest_text + end + assert_nil json_response["manifest_text"] + assert_nil json_response["properties"] + assert_equal collections(:collection_owned_by_active).name, json_response["name"] + end + + test "select param is respected in 'update' response" do + authorize_with :active + post :update, params: { + id: collections(:collection_owned_by_active).uuid, + collection: { + manifest_text: ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foobar.txt\n", + }, + select: ["name"], + } + assert_response :success + assert_nil json_response["manifest_text"] + assert_nil json_response["properties"] + assert_equal collections(:collection_owned_by_active).name, json_response["name"] + end + + [nil, + [], + ["is_trashed", "trash_at"], + ["is_trashed", "trash_at", "portable_data_hash"], + ["portable_data_hash"], + ["portable_data_hash", "manifest_text"], + ].each do |select| + test "select=#{select.inspect} param is respected in 'get by pdh' response" do + authorize_with :active + get :show, params: { + id: collections(:collection_owned_by_active).portable_data_hash, + select: select, + } + assert_response :success + if !select || select.index("manifest_text") + assert_not_nil json_response["manifest_text"] + else + assert_nil json_response["manifest_text"] + end + end + end end