From 538371e316a1d0774f94107722cdf15ee7d65768 Mon Sep 17 00:00:00 2001 From: Karel Picman Date: Wed, 2 Nov 2016 14:33:24 +0100 Subject: [PATCH] A lot of warnings in WebDAV unit tests #584 --- app/models/dmsf_file.rb | 2 +- lib/redmine_dmsf/webdav/controller.rb | 13 +++++++------ lib/redmine_dmsf/webdav/dmsf_resource.rb | 8 +++----- lib/redmine_dmsf/webdav/index_resource.rb | 5 +++++ lib/redmine_dmsf/webdav/project_resource.rb | 5 +++++ test/integration/dmsf_webdav_delete_test.rb | 2 +- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 057a762d..42313019 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -121,7 +121,7 @@ class DmsfFile < ActiveRecord::Base end def last_revision - unless @last_revision + unless defined?(@last_revision) @last_revision = self.deleted? ? self.dmsf_file_revisions.first : self.dmsf_file_revisions.visible.first end @last_revision diff --git a/lib/redmine_dmsf/webdav/controller.rb b/lib/redmine_dmsf/webdav/controller.rb index 26a07b13..750d5aea 100644 --- a/lib/redmine_dmsf/webdav/controller.rb +++ b/lib/redmine_dmsf/webdav/controller.rb @@ -20,6 +20,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require 'dav4rack' +require 'addressable/uri' module RedmineDmsf module Webdav @@ -117,15 +118,15 @@ module RedmineDmsf # Escape URL string def url_format(resource) - # Additionally escape square brackets, otherwise files with - # file names like file[1].pdf are not visible in some WebDAV clients - # TODO: The method is obsolete - URI.encode(super, '[]') + ret = resource.public_path + if resource.collection? && (ret[-1,1] != '/') + ret += '/' + end + Addressable::URI.escape ret end def url_unescape(str) - # TODO: The method is obsolete - super str + Addressable::URI.unescape str end end diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 9421dd99..dc44af09 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -20,6 +20,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require 'uuidtools' +require 'addressable/uri' module RedmineDmsf module Webdav @@ -413,9 +414,6 @@ module RedmineDmsf l.save! @response['Lock-Token'] = l.uuid return [1.hours.to_i, l.uuid] - - # Unfortunately if we're here, then it's updating a lock we can't find - return Conflict end scope = "scope_#{(args[:scope] || 'exclusive')}".to_sym @@ -610,8 +608,8 @@ module RedmineDmsf doc.timeout "Second-#{(lock.expires_at.to_i - Time.now.to_i)}" end lock_entity = lock.folder || lock.file - lock_path = "#{request.scheme}://#{request.host}:#{request.port}#{path_prefix}#{URI.escape(lock_entity.project.identifier)}/" - lock_path << lock_entity.dmsf_path.map {|x| URI.escape(x.respond_to?('name') ? x.name : x.title) }.join('/') + lock_path = "#{request.scheme}://#{request.host}:#{request.port}#{path_prefix}#{Addressable::URI.escape(lock_entity.project.identifier)}/" + lock_path << lock_entity.dmsf_path.map { |e| Addressable::URI.escape(e.respond_to?('name') ? e.name : e.title) }.join('/') lock_path << '/' if lock_entity.is_a?(DmsfFolder) && lock_path[-1,1] != '/' doc.lockroot { doc.href lock_path } if ((lock.user.id == User.current.id) || User.current.allowed_to?(:force_file_unlock, self.project)) diff --git a/lib/redmine_dmsf/webdav/index_resource.rb b/lib/redmine_dmsf/webdav/index_resource.rb index bc39e8b4..8077f9a5 100644 --- a/lib/redmine_dmsf/webdav/index_resource.rb +++ b/lib/redmine_dmsf/webdav/index_resource.rb @@ -22,6 +22,11 @@ module RedmineDmsf module Webdav class IndexResource < BaseResource + + def initialize(*args) + super(*args) + @projects = nil + end def children unless @projects diff --git a/lib/redmine_dmsf/webdav/project_resource.rb b/lib/redmine_dmsf/webdav/project_resource.rb index 459f0d96..a99f1b6d 100644 --- a/lib/redmine_dmsf/webdav/project_resource.rb +++ b/lib/redmine_dmsf/webdav/project_resource.rb @@ -22,6 +22,11 @@ module RedmineDmsf module Webdav class ProjectResource < BaseResource + + def initialize(*args) + super(*args) + @children = nil + end def children unless @children diff --git a/test/integration/dmsf_webdav_delete_test.rb b/test/integration/dmsf_webdav_delete_test.rb index 3dfe6a91..ffba24c2 100644 --- a/test/integration/dmsf_webdav_delete_test.rb +++ b/test/integration/dmsf_webdav_delete_test.rb @@ -64,7 +64,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest assert_response 401 end - def test_failed_authentication + def test_failed_authentication_global delete '/dmsf/webdav', nil, credentials('admin', 'badpassword') assert_response 401 end