From aa1350ccf97830da0f3ea5386dc9d1aee9549832 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Thu, 20 Aug 2020 10:14:22 +0200 Subject: [PATCH] Digest adn custom values for new revisions via WebDAV --- app/controllers/dmsf_files_controller.rb | 1 + lib/redmine_dmsf/webdav/dmsf_resource.rb | 22 +++++++++++++++---- test/fixtures/enabled_modules.yml | 5 ----- .../webdav/dmsf_webdav_put_test.rb | 20 +++++++++++++++-- 4 files changed, 37 insertions(+), 11 deletions(-) delete mode 100644 test/fixtures/enabled_modules.yml diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index 8591ab60..cd779be7 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -128,6 +128,7 @@ class DmsfFilesController < ApplicationController revision.size = upload.size revision.disk_filename = revision.new_storage_filename revision.mime_type = upload.mime_type + revision.digest = upload.digest end else revision.size = last_revision.size diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 763633c2..0e1acc6a 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -589,8 +589,18 @@ module RedmineDmsf new_revision = last_revision reuse_revision = true else - new_revision = last_revision ? last_revision.dup : DmsfFileRevision.new - new_revision.source_revision = last_revision + if last_revision + new_revision = last_revision.dup + new_revision.source_revision = last_revision + else + new_revision = DmsfFileRevision.new + end + # Custom fields + i = 0 + last_revision.custom_field_values.each do |custom_value| + new_revision.custom_field_values[i].value = custom_value + i = i + 1 + end end else f = DmsfFile.new @@ -620,8 +630,11 @@ module RedmineDmsf else new_revision.size = request.content_length # Bad Guess end - - raise InternalServerError unless new_revision.valid? && f.save + + if new_revision.valid? && (!f.save) + Rails.logger.error f.errors.full_messages.to_sentence + raise InternalServerError + end new_revision.disk_filename = new_revision.new_storage_filename unless reuse_revision @@ -641,6 +654,7 @@ module RedmineDmsf # Notifications DmsfMailer.deliver_files_updated project, [f] else + Rails.logger.error new_revision.errors.full_messages.to_sentence raise InternalServerError end diff --git a/test/fixtures/enabled_modules.yml b/test/fixtures/enabled_modules.yml deleted file mode 100644 index 05089406..00000000 --- a/test/fixtures/enabled_modules.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -enabled_modules_001: - name: dmsf - project_id: 1 - id: 1 diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index c8b2e5a3..e1f264cd 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -25,7 +25,12 @@ require 'fileutils' class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest - fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions + fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :custom_fields, :custom_values + + def setup + super + @cv22 = CustomValue.find(22) + end def test_put_denied_unless_authenticated_root put '/dmsf/webdav' @@ -272,7 +277,6 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_put_keep_title - assert @file1.last_revision.size != 0 @file1.last_revision.title = 'Keep that title' assert @file1.last_revision.save assert_difference '@file1.dmsf_file_revisions.count', +1 do @@ -283,5 +287,17 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest @file1.last_revision.reload assert_equal @file1.last_revision.title, 'Keep that title' end + + def test_put_keep_custom_field_values + @file1.last_revision.custom_values << @cv22 + assert @file1.last_revision.save + assert_difference '@file1.dmsf_file_revisions.count', +1 do + put "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end + @file1.last_revision.reload + assert_equal @file1.last_revision.custom_values.first.value, @cv22.value + end end \ No newline at end of file