From 22b71a0e146047fe63f63a1caf7082fb0837d188 Mon Sep 17 00:00:00 2001 From: "COLA@Redmine.local" Date: Thu, 9 Feb 2017 22:58:07 +0100 Subject: [PATCH] WebDav move: moving a zero sized file does not create a new revision. --- lib/redmine_dmsf/webdav/dmsf_resource.rb | 7 ++++- test/fixtures/dmsf_file_revisions.yml | 22 +++++++++++++- test/fixtures/dmsf_files.yml | 10 +++++++ .../webdav/dmsf_webdav_move_test.rb | 30 +++++++++++++++++++ 4 files changed, 67 insertions(+), 2 deletions(-) diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index e43e09ce..9b8e74eb 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -336,7 +336,12 @@ module RedmineDmsf file.copy_to_filename(resource.project, f, resource.basename) Created else - return InternalServerError unless file.move_to(resource.project, f) + if (project == resource.project) && (file.last_revision.size == 0) + # Moving a zero sized file within the same project, just update the dmsf_folder + file.dmsf_folder = f + else + return InternalServerError unless file.move_to(resource.project, f) + end # Update Revision and names of file [We can link to old physical resource, as it's not changed] if file.last_revision diff --git a/test/fixtures/dmsf_file_revisions.yml b/test/fixtures/dmsf_file_revisions.yml index 368511b3..4157f9d1 100644 --- a/test/fixtures/dmsf_file_revisions.yml +++ b/test/fixtures/dmsf_file_revisions.yml @@ -139,4 +139,24 @@ dmsf_file_revisions_007: deleted_by_user_id: NULL user_id: 1 dmsf_workflow_assigned_by: NULL - dmsf_workflow_started_by: NULL \ No newline at end of file + dmsf_workflow_started_by: NULL + +dmsf_file_revisions_008: + id: 8 + dmsf_file_id: 10 + source_dmsf_file_revision_id: NULL + name: "zero.txt" + disk_filename: "zero.txt" + size: 0 + mime_type: text/plain + title: "Zero Size File" + description: NULL + workflow: NULL + minor_version: 0 + major_version: 1 + comment: NULL + deleted: 0 + deleted_by_user_id: NULL + user_id: 1 + dmsf_workflow_assigned_by: NULL + dmsf_workflow_started_by: NULL diff --git a/test/fixtures/dmsf_files.yml b/test/fixtures/dmsf_files.yml index 8aec03de..2db9b629 100644 --- a/test/fixtures/dmsf_files.yml +++ b/test/fixtures/dmsf_files.yml @@ -90,3 +90,13 @@ dmsf_files_009: notification: 0 deleted: 0 deleted_by_user_id: NULL + +dmsf_files_010: + id: 10 + container_id: 1 + container_type: "Project" + dmsf_folder_id: NULL + name: "zero.txt" + notification: 0 + deleted: 0 + deleted_by_user_id: NULL diff --git a/test/integration/webdav/dmsf_webdav_move_test.rb b/test/integration/webdav/dmsf_webdav_move_test.rb index 00f7bccc..cb0c78d1 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -131,6 +131,19 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest end end + def test_move_zero_sized_to_new_filename + file = DmsfFile.find_by_id 10 + + new_name = "#{file.name}.moved" + assert_no_difference 'file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) + assert_response 201 # Created + f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}" + assert f, "Moved file '#{new_name}' not found in project." + end + end + def test_move_to_new_folder file = DmsfFile.find_by_id 1 folder = DmsfFolder.find_by_id 1 @@ -141,6 +154,23 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"}) assert_response 201 # Created + file2 = DmsfFile.find_by_id 1 + assert_equal folder.id, file2.dmsf_folder_id + end + end + + def test_move_zero_sized_to_new_folder + file = DmsfFile.find_by_id 10 + folder = DmsfFolder.find_by_id 1 + assert_kind_of DmsfFile, file + assert_kind_of DmsfFolder, folder + + assert_no_difference 'file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"}) + assert_response 201 # Created + file2 = DmsfFile.find_by_id 10 + assert_equal folder.id, file2.dmsf_folder_id end end