10538: Add /arvados/v1/collections/{uuid}/trash endpoint.
authorTom Clegg <tom@curoverse.com>
Wed, 28 Dec 2016 05:26:42 +0000 (00:26 -0500)
committerTom Clegg <tom@curoverse.com>
Wed, 28 Dec 2016 05:59:36 +0000 (00:59 -0500)
services/api/app/controllers/arvados/v1/collections_controller.rb
services/api/config/routes.rb
services/api/test/functional/arvados/v1/collections_controller_test.rb

index 33b7a2dd4eecf86400803ebbcc841f1f2719654f..6c3589736e91d8762d04e1202a80c588c4257387 100644 (file)
@@ -16,7 +16,7 @@ class Arvados::V1::CollectionsController < ApplicationController
   end
 
   def find_objects_for_index
-    if params[:include_trash] || action_name == 'destroy'
+    if params[:include_trash] || ['destroy', 'trash'].include?(action_name)
       @objects = Collection.unscoped.readable_by(*@read_users)
     end
     super
@@ -58,6 +58,13 @@ class Arvados::V1::CollectionsController < ApplicationController
     show
   end
 
+  def trash
+    if !@object.is_trashed
+      @object.update_attributes!(trash_at: db_current_time)
+    end
+    show
+  end
+
   def find_collections(visited, sp, &b)
     case sp
     when ArvadosModel
index f28390489dca3f42e14b7274407881009cc80b2f..f89d2c16a8881f66444738ea6a7c6299759fd52f 100644 (file)
@@ -22,6 +22,7 @@ Server::Application.routes.draw do
       resources :collections do
         get 'provenance', on: :member
         get 'used_by', on: :member
+        post 'trash', on: :member
       end
       resources :groups do
         get 'contents', on: :collection
index cc759a6c3ec9e646580c7d745debd9e8592c3b3c..bd331c372cd7492097a14d726d9af9574872fd55 100644 (file)
@@ -973,6 +973,21 @@ EOS
     c = Collection.unscoped.find_by_uuid(uuid)
     assert_operator c.trash_at, :<, db_current_time
     assert_operator c.delete_at, :<, db_current_time
-    assert_equal c.delete_at, c.trash_at + Rails.configuration.blob_signature_ttl
+  end
+
+  ['zzzzz-4zz18-mto52zx1s7sn3ih',
+   'zzzzz-4zz18-5qa38qghh1j3nvv',
+  ].each do |uuid|
+    test "trash collection #{uuid} via trash action with grace period" do
+      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