WebDAV PROPSTATS and PROPFIND caching change #742
This commit is contained in:
parent
07e3dfebbf
commit
9f6a4d8eec
@ -187,14 +187,6 @@
|
||||
</em>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_memcached_servers)) %>
|
||||
<%= text_field_tag 'settings[dmsf_memcached_servers]', @settings['dmsf_memcached_servers'], :size => 50 %>
|
||||
<em class="info">
|
||||
<%= l(:text_memcached_servers) %>
|
||||
</em>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<%= content_tag(:label, l(:label_webdav_ignore)) %>
|
||||
<%= text_field_tag 'settings[dmsf_webdav_ignore]', @settings['dmsf_webdav_ignore'], :size => 50 %>
|
||||
|
||||
1
init.rb
1
init.rb
@ -48,7 +48,6 @@ Redmine::Plugin.register :redmine_dmsf do
|
||||
'dmsf_display_notified_recipients' => 0,
|
||||
'dmsf_global_title_format' => '',
|
||||
'dmsf_columns' => %w(title size modified version workflow author),
|
||||
'dmsf_memcached_servers' => '',
|
||||
'dmsf_webdav_ignore' => '^(\._|\.DS_Store$|Thumbs.db$)',
|
||||
'dmsf_webdav_disable_versioning' => '^\~\$|\.tmp$',
|
||||
'dmsf_keep_documents_locked' => false,
|
||||
|
||||
@ -23,62 +23,33 @@ module RedmineDmsf
|
||||
module Webdav
|
||||
class Cache
|
||||
def self.read(name, options = nil)
|
||||
init unless defined?(@@WebDAVCache)
|
||||
@@WebDAVCache.read(name, options) unless name.blank?
|
||||
Rails.cache.read(name, options)
|
||||
end
|
||||
|
||||
def self.write(name, value, options = nil)
|
||||
init unless defined?(@@WebDAVCache)
|
||||
@@WebDAVCache.write(name, value, options) unless name.blank?
|
||||
Rails.cache.write(name, value, options)
|
||||
end
|
||||
|
||||
def self.delete(name, options = nil)
|
||||
init unless defined?(@@WebDAVCache)
|
||||
@@WebDAVCache.delete(name, options) unless name.blank?
|
||||
Rails.cache.delete(name, options)
|
||||
end
|
||||
|
||||
def self.exist?(name, options = nil)
|
||||
init unless defined?(@@WebDAVCache)
|
||||
@@WebDAVCache.exist?(name, options) unless name.blank?
|
||||
Rails.cache.exist?(name, options)
|
||||
end
|
||||
|
||||
def self.clear
|
||||
Rails.cache.clear
|
||||
end
|
||||
|
||||
def self.invalidate_item(key)
|
||||
init unless defined?(@@WebDAVCache)
|
||||
return if key.blank?
|
||||
# Write an .invalid entry to notify anyone that is currently creating a response
|
||||
# that that response is invalid and should not be cached
|
||||
@@WebDAVCache.write("#{key}.invalid", expires_in: 60.seconds)
|
||||
self.write("#{key}.invalid", expires_in: 60.seconds)
|
||||
# Delete any existing entry in the cache
|
||||
@@WebDAVCache.delete(key)
|
||||
self.delete(key)
|
||||
end
|
||||
|
||||
def self.cache
|
||||
@@WebDAVCache
|
||||
end
|
||||
|
||||
def self.init_testcache
|
||||
#puts "Webdav::Cache: Enable MemoryStore cache."
|
||||
@@WebDAVCache = ActiveSupport::Cache::MemoryStore.new(:namespace => "RedmineDmsfWebDAV")
|
||||
end
|
||||
|
||||
def self.init_nullcache
|
||||
#puts "Webdav::Cache: Disable cache."
|
||||
@@WebDAVCache = ActiveSupport::Cache::NullStore.new
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def self.init
|
||||
if Setting.plugin_redmine_dmsf['dmsf_memcached_servers'].nil? || Setting.plugin_redmine_dmsf['dmsf_memcached_servers'].empty?
|
||||
# Disable caching by using a null cache
|
||||
Rails.logger.info "Webdav::Cache: Cache disabled!"
|
||||
@@WebDAVCache = ActiveSupport::Cache::NullStore.new
|
||||
else
|
||||
# Create cache using the provided server address
|
||||
Rails.logger.info "Webdav::Cache: Cache enabled, using memcached server '#{Setting.plugin_redmine_dmsf['dmsf_memcached_servers']}'"
|
||||
@@WebDAVCache = ActiveSupport::Cache::MemCacheStore.new(Setting.plugin_redmine_dmsf['dmsf_memcached_servers'])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -32,24 +32,21 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
@jsmith = credentials 'jsmith' # Not a member of project1
|
||||
@project1 = Project.find_by_id 1 # DMSF enabled
|
||||
@project2 = Project.find_by_id 2 # DMSF disabled
|
||||
|
||||
# Folders in project1/
|
||||
# Folders in project1
|
||||
@folder1 = DmsfFolder.find_by_id 1
|
||||
@folder6 = DmsfFolder.find_by_id 6
|
||||
# Files in project1/
|
||||
# Files in project1
|
||||
@file1 = DmsfFile.find_by_id 1
|
||||
@file9 = DmsfFile.find_by_id 9
|
||||
@file10 = DmsfFile.find_by_id 10
|
||||
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1'
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
|
||||
|
||||
# Temporarily enable project names to generate names for project1
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
|
||||
@project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
|
||||
@project1_uri = Addressable::URI.escape(@project1_name)
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
|
||||
RedmineDmsf::Webdav::Cache.init_nullcache
|
||||
RedmineDmsf::Webdav::Cache.clear
|
||||
end
|
||||
|
||||
def test_truth
|
||||
@ -58,332 +55,201 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
end
|
||||
|
||||
def test_propfind_denied_for_anonymous
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
{:HTTP_DEPTH => '0'}
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil, {:HTTP_DEPTH => '0'}
|
||||
assert_response 401
|
||||
end
|
||||
|
||||
def test_propfind_depth0_on_root_for_non_member
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@jsmith.merge!({:HTTP_DEPTH => '0'})
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil, @jsmith.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match '<D:displayname>/</D:displayname>', response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project2.identifier}</D:displayname>", response.body
|
||||
assert response.body.include?('<D:href>http://www.example.com:80/dmsf/webdav/</D:href>')
|
||||
assert response.body.include?('<D:displayname>/</D:displayname>')
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_root_for_non_member
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@jsmith.merge!({:HTTP_DEPTH => '1'})
|
||||
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil, @jsmith.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match '<D:displayname>/</D:displayname>', response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project2.identifier}</D:displayname>", response.body
|
||||
assert response.body.include?('<D:href>http://www.example.com:80/dmsf/webdav/</D:href>')
|
||||
assert response.body.include?( '<D:displayname>/</D:displayname>')
|
||||
end
|
||||
|
||||
def test_propfind_depth0_on_root_for_admin
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '0'})
|
||||
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil, @admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match '<D:displayname>/</D:displayname>', response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project2.identifier}</D:displayname>", response.body
|
||||
assert response.body.include?('<D:href>http://www.example.com:80/dmsf/webdav/</D:href>')
|
||||
assert response.body.include?('<D:displayname>/</D:displayname>')
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_root_for_admin
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match 'D:displayname>/</D:displayname>', response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project2.identifier}</D:displayname>", response.body
|
||||
assert response.body.include?('<D:href>http://www.example.com:80/dmsf/webdav/</D:href>')
|
||||
assert response.body.include?('<D:displayname>/</D:displayname>')
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_root_for_admin_with_project_names
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
|
||||
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match '<D:displayname>/</D:displayname>', response.body
|
||||
assert response.body.include?('<D:href>http://www.example.com:80/dmsf/webdav/</D:href>')
|
||||
assert response.body.include?('<D:displayname>/</D:displayname>')
|
||||
# project.identifier should not match when using project names
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert !response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
assert !response.body.include?("<D:displayname>#{@project1.identifier}</D:displayname>")
|
||||
# but the project name should match
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
|
||||
end
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@project1_name}</D:displayname>")
|
||||
end
|
||||
|
||||
def test_propfind_depth0_on_project1_for_non_member
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@jsmith.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 404
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response :missing
|
||||
end
|
||||
|
||||
def test_propfind_depth0_on_project1_for_admin
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '0'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_no_match '<D:displayname>/</D:displayname>', response.body
|
||||
# Project
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
# Folders
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@folder1.title}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@folder6.title}</D:displayname>", response.body
|
||||
# Files
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@file1.name}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@file9.name}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@file10.name}</D:displayname>", response.body
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@project1.identifier}</D:displayname>")
|
||||
end
|
||||
|
||||
def test_propfind_depth0_on_project1_for_admin_with_project_names
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
|
||||
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 404
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '0'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response :missing
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_no_match '<D:displayname>/</D:displayname>', response.body
|
||||
# Project
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
|
||||
end
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@project1_name}</D:displayname>")
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_project1_for_admin
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_no_match '<D:displayname>/</D:displayname>', response.body
|
||||
# Project
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@project1.identifier}</D:displayname>")
|
||||
# Folders
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@folder1.title}</D:displayname>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@folder6.title}</D:displayname>", response.body
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@folder1.title}</D:displayname>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@folder6.title}</D:displayname>")
|
||||
# Files
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@file1.name}</D:displayname>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@file9.name}</D:displayname>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@file10.name}</D:displayname>", response.body
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@file1.name}</D:displayname>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@file9.name}</D:displayname>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@file10.name}</D:displayname>")
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_project1_for_admin_with_project_names
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
|
||||
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 404
|
||||
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response :missing
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
|
||||
assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_no_match '<D:displayname>/</D:displayname>', response.body
|
||||
|
||||
# Project
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
|
||||
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>")
|
||||
# Folders
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@folder1.title}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@folder6.title}</D:displayname>", response.body
|
||||
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@folder1.title}</D:displayname>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@folder6.title}</D:displayname>")
|
||||
# Files
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@file1.name}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@file9.name}</D:displayname>", response.body
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@file10.name}</D:displayname>", response.body
|
||||
end
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@file1.name}</D:displayname>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@file9.name}</D:displayname>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{@file10.name}</D:displayname>")
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_root_for_admin_with_project_names_and_cache
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
|
||||
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
|
||||
# PROPSTATS for / and project1 should be cached.
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +2 do
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
end
|
||||
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match '<D:displayname>/</D:displayname>', response.body
|
||||
|
||||
# project.identifier should not match when using project names
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
|
||||
# but the project name should match
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
|
||||
|
||||
# Rename project1
|
||||
@project1.name = 'Online Cookbook'
|
||||
@project1.save!
|
||||
project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
|
||||
project1_new_uri = Addressable::URI.escape(project1_new_name)
|
||||
|
||||
# PROPSTATS for / is already cached, but a new PROPSTATS should be cached for project1
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
|
||||
xml_http_request :propfind, '/dmsf/webdav/', nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
end
|
||||
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{project1_new_uri}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
|
||||
assert_match '<D:displayname>/</D:displayname>', response.body
|
||||
|
||||
# project.identifier should not match when using project names
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
|
||||
|
||||
# old project name should not match
|
||||
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
|
||||
assert_no_match "<D:displayname>#{@project1_uri}</D:displayname>", response.body
|
||||
|
||||
# but new project name should match
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</D:href>", response.body
|
||||
assert_match "<D:displayname>#{project1_new_name}</D:displayname>", response.body
|
||||
end
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</D:href>")
|
||||
assert response.body.include?("<D:displayname>#{project1_new_name}</D:displayname>")
|
||||
end
|
||||
|
||||
def test_propfind_depth0_on_project1_for_admin_with_cache
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '0'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
|
||||
# Response should be correct
|
||||
# Project
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
# A new PROPSTATS entry should have been created for project1
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}")
|
||||
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
# Replace the PROPSTATS cache entry and make sure that it is used
|
||||
RedmineDmsf::Webdav::Cache.write("PROPSTATS/#{@project1.identifier}", "Cached PROPSTATS/#{@project1.identifier}")
|
||||
|
||||
assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '0'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body
|
||||
assert response.body.include?("Cached PROPSTATS/#{@project1.identifier}")
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_project1_for_admin_with_cache
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +10 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
|
||||
# Project, a new PROPFIND and PROPSTATS should have been created for project1
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}")
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}")
|
||||
# Folders, new PROPSTATS should be created for each folder.
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}/#{@folder1.title}")
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}/#{@folder6.title}")
|
||||
# Files, new PROPSTATS should be created for each folder.
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", response.body
|
||||
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
|
||||
# Project
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>")
|
||||
# Folders
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}/#{@folder1.title}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}/#{@folder6.title}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/</D:href>")
|
||||
# Files
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}</D:href>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>")
|
||||
assert response.body.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
assert result
|
||||
assert result.include?("<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>")
|
||||
# Replace PROPFIND and verify that cached entry is used.
|
||||
RedmineDmsf::Webdav::Cache.write("PROPFIND/#{@project1.id}", "Cached PROPFIND/#{@project1.id}")
|
||||
assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
assert_match "Cached PROPFIND/#{@project1.id}", response.body
|
||||
end
|
||||
|
||||
assert response.body.include?("Cached PROPFIND/#{@project1.id}")
|
||||
# Delete PROPFIND, replace PROPSTATS for one entry and verify that it is used when creating the response and new cache
|
||||
RedmineDmsf::Webdav::Cache.invalidate_item("PROPFIND/#{@project1.id}")
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.write("PROPSTATS/#{@project1.identifier}", "Cached PROPSTATS/#{@project1.identifier}")
|
||||
# One PROPFIND entry is added and one .invalid entry is deleted, so no differenct.
|
||||
assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => "1"})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => "1"})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body
|
||||
assert_match "Cached PROPSTATS/#{@project1.identifier}", RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}")
|
||||
assert response.body.include?("Cached PROPSTATS/#{@project1.identifier}")
|
||||
result = RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}")
|
||||
assert result
|
||||
assert result.include?("Cached PROPSTATS/#{@project1.identifier}")
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
|
||||
end
|
||||
|
||||
def test_propfind_depth1_on_project1_for_admin_with_cache_and_locks
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
|
||||
log_user 'admin', 'admin' # login as admin
|
||||
assert !User.current.anonymous?, 'Current user is anonymous'
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +10 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
|
||||
# Verify that everything exists in the cache as it should
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@project1.identifier}")
|
||||
@ -392,7 +258,6 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
|
||||
# Lock a file and verify that the PROPSTATS for the file and the PROPFIND were deleted
|
||||
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
@ -403,16 +268,11 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
|
||||
# Unlock a file and verify that the PROPSTATS for the file and the PROPFIND were deleted
|
||||
assert @file1.unlock!, "File failed to be unlocked by #{User.current.name}"
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
@ -423,16 +283,11 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
|
||||
# Lock a folder and verify that the PROPSTATS for the file and the PROPFIND were deleted
|
||||
assert @folder1.lock!, "File failed to be locked by #{User.current.name}"
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
@ -443,16 +298,11 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@project1.identifier}/#{@folder1.title}")
|
||||
|
||||
# Unlock a folder and verify that the PROPSTATS for the file and the PROPFIND were deleted
|
||||
assert @folder1.unlock!, "File failed to be unlocked by #{User.current.name}"
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
@ -463,12 +313,8 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
|
||||
|
||||
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
|
||||
@admin.merge!({:HTTP_DEPTH => '1'})
|
||||
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
|
||||
assert_response 207 # MultiStatus
|
||||
end
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@project1.identifier}/#{@folder1.title}")
|
||||
|
||||
@ -102,7 +102,7 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
assert r1.save
|
||||
# Just make sure the file exists
|
||||
File.open(r1.disk_file, 'wb') do |f|
|
||||
f.write("1234")
|
||||
f.write('1234')
|
||||
end
|
||||
|
||||
# Directly after the file has been stored generate the r2 storage filename.
|
||||
@ -114,8 +114,7 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
def test_save_and_destroy_with_cache
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
|
||||
Rails.cache.clear
|
||||
# save
|
||||
cache_key = @revision1.propfind_cache_key
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
@ -125,7 +124,6 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.delete("#{cache_key}.invalid")
|
||||
|
||||
# destroy
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
@ -133,7 +131,6 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
@revision1.destroy
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
|
||||
# save!
|
||||
cache_key = @revision2.propfind_cache_key
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
@ -142,8 +139,6 @@ class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
|
||||
@revision2.save!
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
|
||||
RedmineDmsf::Webdav::Cache.init_nullcache
|
||||
end
|
||||
|
||||
def test_workflow_tooltip
|
||||
|
||||
@ -167,45 +167,39 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
def test_save_and_destroy_with_cache
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
|
||||
Rails.cache.clear
|
||||
# save
|
||||
cache_key = @file5.propfind_cache_key
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@file5.save
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.delete("#{cache_key}.invalid")
|
||||
|
||||
# destroy
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@file5.destroy
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
|
||||
# save!
|
||||
cache_key = @file6.propfind_cache_key
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@file6.save!
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.delete("#{cache_key}.invalid")
|
||||
|
||||
# destroy!
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@file6.destroy!
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
|
||||
RedmineDmsf::Webdav::Cache.init_nullcache
|
||||
end
|
||||
|
||||
def test_project_project
|
||||
|
||||
@ -138,46 +138,40 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
def test_save_and_destroy_with_cache
|
||||
RedmineDmsf::Webdav::Cache.init_testcache
|
||||
|
||||
Rails.cache.clear
|
||||
# save
|
||||
cache_key = @folder4.propfind_cache_key
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@folder4.save
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.delete("#{cache_key}.invalid")
|
||||
|
||||
# destroy
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@folder4.destroy
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.cache.clear
|
||||
|
||||
#RedmineDmsf::Webdav::Cache.cache.clear
|
||||
# save!
|
||||
cache_key = @folder5.propfind_cache_key
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@folder5.save!
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
RedmineDmsf::Webdav::Cache.delete("#{cache_key}.invalid")
|
||||
|
||||
# destroy!
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, "")
|
||||
RedmineDmsf::Webdav::Cache.write(cache_key, '')
|
||||
assert RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
@folder5.destroy!
|
||||
assert !RedmineDmsf::Webdav::Cache.exist?(cache_key)
|
||||
assert RedmineDmsf::Webdav::Cache.exist?("#{cache_key}.invalid")
|
||||
|
||||
RedmineDmsf::Webdav::Cache.init_nullcache
|
||||
end
|
||||
|
||||
def test_to_csv
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user