X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a714babda599431fd509dff6dee87ab30a1793eb..a309f8c5b4842075d6c83f99a8f2a1e1016976f5:/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 c285f8db20..a31ad8af03 100644 --- a/services/api/test/functional/arvados/v1/collections_controller_test.rb +++ b/services/api/test/functional/arvados/v1/collections_controller_test.rb @@ -1,6 +1,7 @@ require 'test_helper' class Arvados::V1::CollectionsControllerTest < ActionController::TestCase + include DbCurrentTime PERM_TOKEN_RE = /\+A[[:xdigit:]]+@[[:xdigit:]]{8}\b/ @@ -282,12 +283,12 @@ EOS assert_response :success assert_not_nil assigns(:object) resp = assigns(:object) - assert_equal foo_collection[:portable_data_hash], resp['portable_data_hash'] - assert_signed_manifest resp['manifest_text'] + assert_equal foo_collection[:portable_data_hash], resp[:portable_data_hash] + assert_signed_manifest resp[:manifest_text] # The manifest in the response will have had permission hints added. # Remove any permission hints in the response before comparing it to the source. - stripped_manifest = resp['manifest_text'].gsub(/\+A[A-Za-z0-9@_-]+/, '') + stripped_manifest = resp[:manifest_text].gsub(/\+A[A-Za-z0-9@_-]+/, '') assert_equal foo_collection[:manifest_text], stripped_manifest end end @@ -344,7 +345,7 @@ EOS ensure_unique_name: true } assert_response :success - assert_equal 'owned_by_active (2)', json_response['name'] + assert_match /^owned_by_active \(\d{4}-\d\d-\d\d.*?Z\)$/, json_response['name'] end end @@ -823,11 +824,11 @@ EOS [2**8, :success], [2**18, 422], ].each do |description_size, expected_response| - test "create collection with description size #{description_size} + # Descriptions are not part of search indexes. Skip until + # full-text search is implemented, at which point replace with a + # search in description. + skip "create collection with description size #{description_size} and expect response #{expected_response}" do - skip "(Descriptions are not part of search indexes. Skip until full-text search - is implemented, at which point replace with a search in description.)" - authorize_with :active description = 'here is a collection with a very large description' @@ -959,4 +960,68 @@ EOS assert_response 200 end end + + test 'get trashed collection with include_trash' do + uuid = 'zzzzz-4zz18-mto52zx1s7sn3ih' # expired_collection + authorize_with :active + get :show, { + id: uuid, + include_trash: true, + } + assert_response 200 + end + + test 'get trashed collection without include_trash' do + uuid = 'zzzzz-4zz18-mto52zx1s7sn3ih' # expired_collection + authorize_with :active + get :show, { + id: uuid, + } + assert_response 404 + end + + test 'trash collection using http DELETE verb' do + uuid = collections(:collection_owned_by_active).uuid + authorize_with :active + delete :destroy, { + id: uuid, + } + assert_response 200 + c = Collection.unscoped.find_by_uuid(uuid) + assert_operator c.trash_at, :<, db_current_time + assert_equal c.delete_at, c.trash_at + Rails.configuration.blob_signature_ttl + end + + test 'delete long-trashed collection immediately using http DELETE verb' do + uuid = 'zzzzz-4zz18-mto52zx1s7sn3ih' # expired_collection + authorize_with :active + delete :destroy, { + id: uuid, + } + assert_response 200 + c = Collection.unscoped.find_by_uuid(uuid) + assert_operator c.trash_at, :<, db_current_time + assert_operator c.delete_at, :<, db_current_time + end + + ['zzzzz-4zz18-mto52zx1s7sn3ih', # expired_collection + :empty_collection_name_in_active_user_home_project, + ].each do |fixture| + test "trash collection #{fixture} via trash action with grace period" do + if fixture.is_a? String + uuid = fixture + else + uuid = collections(fixture).uuid + end + authorize_with :active + time_before_trashing = db_current_time + post :trash, { + id: uuid, + } + assert_response 200 + c = Collection.unscoped.find_by_uuid(uuid) + assert_operator c.trash_at, :<, db_current_time + assert_operator c.delete_at, :>=, time_before_trashing + Rails.configuration.default_trash_lifetime + end + end end