diff --git a/app/site_files.rb b/app/site_files.rb index 4a3a8349..627728ff 100644 --- a/app/site_files.rb +++ b/app/site_files.rb @@ -87,9 +87,12 @@ end post '/site_files/delete' do require_login current_site.delete_file params[:filename] - flash[:success] = "Deleted #{params[:filename]}." - redirect '/dashboard' + + dirname = Pathname(params[:filename]).dirname + dir_query = dirname.nil? || dirname.to_s == '.' ? '' : "?dir=#{Rack::Utils.escape dirname}" + + redirect "/dashboard#{dir_query}" end get '/site_files/:username.zip' do |username| diff --git a/tests/site_file_tests.rb b/tests/site_file_tests.rb index 625cbc5c..cf6a1241 100644 --- a/tests/site_file_tests.rb +++ b/tests/site_file_tests.rb @@ -32,7 +32,7 @@ describe 'site_files' do SiteFile[site_id: @site.id, path: 'test.jpg'].must_be_nil end - it 'deletes all files in a directory' do + it 'deletes a directory and all files in it' do upload( 'dir' => 'test', 'files[]' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') @@ -45,6 +45,21 @@ describe 'site_files' do @site.site_files.select {|f| f.path =~ /^test\//}.length.must_equal 0 @site.site_files.select {|f| f.path =~ /^test/}.length.must_equal 1 end + + it 'goes back to deleting directory' do + upload( + 'dir' => 'test', + 'files[]' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') + ) + delete_file filename: 'test/test.jpg' + last_response.headers['Location'].must_equal "http://example.org/dashboard?dir=test" + + upload( + 'files[]' => Rack::Test::UploadedFile.new('./tests/files/test.jpg', 'image/jpeg') + ) + delete_file filename: 'test.jpg' + last_response.headers['Location'].must_equal "http://example.org/dashboard" + end end describe 'upload' do