diff --git a/lib/redmine_dmsf/webdav/base_resource.rb b/lib/redmine_dmsf/webdav/base_resource.rb index 8f8ca6d8..96769133 100644 --- a/lib/redmine_dmsf/webdav/base_resource.rb +++ b/lib/redmine_dmsf/webdav/base_resource.rb @@ -31,7 +31,9 @@ module RedmineDmsf attr_reader :public_path def initialize(path, request, response, options) - raise NotFound if Setting.plugin_redmine_dmsf['dmsf_webdav'].blank? + if Setting.plugin_redmine_dmsf['dmsf_webdav'].blank? + raise NotFound + end @project = nil @public_path = "#{options[:root_uri_path]}#{path}" @children = nil @@ -101,7 +103,9 @@ module RedmineDmsf end def options(request, response) - return NotFound if ((@path.length > 1) && ((!project) || (!project.module_enabled?('dmsf')))) + if ((@path.length > 1) && ((!project) || (!project.module_enabled?('dmsf')))) + return NotFound + end if @__proxy.read_only response['Allow'] ||= 'OPTIONS,HEAD,GET,PROPFIND' end diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 118e594f..9acf0737 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -238,7 +238,7 @@ module RedmineDmsf destroy = false end if file.delete(destroy) - DmsfMailer.deliver_files_deleted(project, [file]) + DmsfMailer.deliver_files_deleted project, [file] NoContent else Conflict @@ -580,7 +580,7 @@ module RedmineDmsf end end else - raise BadRequest unless (parent.projectless_path == '/' || (parent.exist? && parent.folder)) + #raise BadRequest unless (parent.projectless_path == '/' || (parent.exist? && parent.folder)) f = DmsfFile.new f.project_id = project.id f.name = basename diff --git a/lib/redmine_dmsf/webdav/resource_proxy.rb b/lib/redmine_dmsf/webdav/resource_proxy.rb index f923b7ca..7ef67aa8 100644 --- a/lib/redmine_dmsf/webdav/resource_proxy.rb +++ b/lib/redmine_dmsf/webdav/resource_proxy.rb @@ -36,7 +36,9 @@ module RedmineDmsf def initialize(*args) # Return 404 - NotFound if WebDAV is not enabled - raise NotFound unless Setting.plugin_redmine_dmsf['dmsf_webdav'] + unless Setting.plugin_redmine_dmsf['dmsf_webdav'] + raise NotFound + end super(*args) pinfo = path.split('/').drop(1) if pinfo.length == 0 # If this is the base_path, we're at root diff --git a/test/fixtures/dmsf_file_revisions.yml b/test/fixtures/dmsf_file_revisions.yml index 003f7af5..7f4edfaf 100644 --- a/test/fixtures/dmsf_file_revisions.yml +++ b/test/fixtures/dmsf_file_revisions.yml @@ -211,4 +211,26 @@ dmsf_file_revisions_010: dmsf_workflow_assigned_by_user_id: 1 dmsf_workflow_started_by_user_id: 1 digest: '81dc9bdb52d04dc20036dbd8313ed055' + created_at: 2017-04-18 14:52:27 +02:00 + +dmsf_file_revisions_011: + id: 11 + dmsf_file_id: 12 + source_dmsf_file_revision_id: NULL + name: "test.txt" + disk_filename: "test.txt" + size: 4 + mime_type: text/plain + title: "Test File" + description: 'Some file :-)' + workflow: 0 + minor_version: 0 + major_version: 1 + comment: NULL + deleted: 0 + deleted_by_user_id: NULL + user_id: 1 + dmsf_workflow_assigned_by_user_id: 1 + dmsf_workflow_started_by_user_id: 1 + digest: '81dc9bdb52d04dc20036dbd8313ed055' created_at: 2017-04-18 14:52:27 +02:00 \ No newline at end of file diff --git a/test/fixtures/dmsf_files.yml b/test/fixtures/dmsf_files.yml index d72da3ad..51d1a1f5 100644 --- a/test/fixtures/dmsf_files.yml +++ b/test/fixtures/dmsf_files.yml @@ -99,3 +99,12 @@ dmsf_files_011: notification: false deleted: 0 deleted_by_user_id: NULL + +dmsf_files_012: + id: 12 + project_id: 3 + dmsf_folder_id: NULL + name: 'test.txt' + notification: false + deleted: 0 + deleted_by_user_id: NULL \ No newline at end of file diff --git a/test/fixtures/dmsf_folders.yml b/test/fixtures/dmsf_folders.yml index 27d86c43..1b41e80a 100644 --- a/test/fixtures/dmsf_folders.yml +++ b/test/fixtures/dmsf_folders.yml @@ -62,4 +62,11 @@ dmsf_folders_009: project_id: 1 dmsf_folder_id: 8 user_id: 1 - system: true \ No newline at end of file + system: true + +dmsf_folders_010: + id: 10 + title: folder10 + project_id: 3 + dmsf_folder_id: NULL + user_id: 1 \ No newline at end of file diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 14e4c8e4..46bb9aaa 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -34,10 +34,13 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest @jsmith = credentials 'jsmith' @project1 = Project.find 1 @project2 = Project.find 2 + @project3 = Project.find 3 # Sub-project of project 1 @role = Role.find_by(name: 'Manager') @folder1 = DmsfFolder.find 1 @folder6 = DmsfFolder.find 6 + @folder10 = DmsfFolder.find 10 @file1 = DmsfFile.find 1 + @file12 = DmsfFile.find 12 @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] Setting.plugin_redmine_dmsf['dmsf_webdav'] = true @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] @@ -47,7 +50,8 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest @dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf' FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path - @project1.enable_module! :dmsf # Flag module enabled + @project1.enable_module! :dmsf # Enable DMSF module + @project3.enable_module! :dmsf User.current = nil end @@ -67,9 +71,12 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest def test_truth assert_kind_of Project, @project1 assert_kind_of Project, @project2 + assert_kind_of Project, @project3 assert_kind_of DmsfFolder, @folder1 assert_kind_of DmsfFolder, @folder6 + assert_kind_of DmsfFolder, @folder10 assert_kind_of DmsfFile, @file1 + assert_kind_of DmsfFile, @file12 assert_kind_of Role, @role end @@ -252,4 +259,18 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest assert_nil DmsfFile.visible.find_by(id: @file1.id) end + def test_file_delete_in_subproject + @role.add_permission! :view_dmsf_folders + @role.add_permission! :file_delete + delete "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin + assert_response :success + end + + def test_folder_delete_in_subproject + @role.add_permission! :view_dmsf_folders + @role.add_permission! :folder_delete + delete "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin + assert_response :success + end + end \ No newline at end of file