diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb
index 9eb86771..68c5d2ff 100644
--- a/test/integration/webdav/dmsf_webdav_propfind_test.rb
+++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb
@@ -43,6 +43,11 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
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 = URI.encode(@project1_name, /\W/)
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
RedmineDmsf::Webdav::Cache.init_nullcache
end
@@ -125,10 +130,8 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_no_match "#{@project1.identifier}", response.body
# but the project name should match
- p1name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
- p1name_uri = URI.encode(p1name, RedmineDmsf::Webdav::ProjectResource::PROJECT_NAME_FILTER)
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/", response.body
- assert_match "#{p1name}", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body
+ assert_match "#{@project1_name}", response.body
end
def test_propfind_depth0_on_project1_for_non_member
@@ -167,10 +170,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
@admin.merge!({:HTTP_DEPTH => "0"})
assert_response 404
- p1name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
- p1name_uri = URI.encode(p1name, RedmineDmsf::Webdav::ProjectResource::PROJECT_NAME_FILTER)
-
- xml_http_request :propfind, "/dmsf/webdav/#{p1name_uri}", nil,
+ xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil,
@admin.merge!({:HTTP_DEPTH => "0"})
assert_response 207 # MultiStatus
assert_no_match "http://www.example.com:80/dmsf/webdav/", response.body
@@ -178,8 +178,8 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
# Project
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body
assert_no_match "#{@project1.identifier}", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/", response.body
- assert_match "#{p1name}", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body
+ assert_match "#{@project1_name}", response.body
end
def test_propfind_depth1_on_project1_for_admin
@@ -212,10 +212,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
@admin.merge!({:HTTP_DEPTH => "1"})
assert_response 404
- p1name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
- p1name_uri = URI.encode(p1name, RedmineDmsf::Webdav::ProjectResource::PROJECT_NAME_FILTER)
-
- xml_http_request :propfind, "/dmsf/webdav/#{p1name_uri}", nil,
+ xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil,
@admin.merge!({:HTTP_DEPTH => "1"})
assert_response 207 # MultiStatus
@@ -225,29 +222,80 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
# Project
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body
assert_no_match "#{@project1.identifier}", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/", response.body
- assert_match "#{p1name}", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body
+ assert_match "#{@project1_name}", response.body
# Folders
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/#{@folder1.title}/", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder1.title}/", response.body
assert_match "#{@folder1.title}", response.body
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/#{@folder6.title}/", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@folder6.title}/", response.body
assert_match "#{@folder6.title}", response.body
# Files
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/#{@file1.name}", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file1.name}", response.body
assert_match "#{@file1.name}", response.body
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/#{@file9.name}", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file9.name}", response.body
assert_match "#{@file9.name}", response.body
assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", response.body
- assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/#{@file10.name}", response.body
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}", response.body
assert_match "#{@file10.name}", response.body
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
+
+ # 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 "http://www.example.com:80/dmsf/webdav/", response.body
+ assert_match "/", response.body
+
+ # project.identifier should not match when using project names
+ assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body
+ assert_no_match "#{@project1.identifier}", response.body
+
+ # but the project name should match
+ assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body
+ assert_match "#{@project1_name}", response.body
+
+ # Rename project1
+ @project1.name = "Online Cookbook"
+ @project1.save!
+ project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
+ project1_new_uri = URI.encode(project1_new_name, /\W/)
+
+ # 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
+
+ assert_response 207 # MultiStatus
+ assert_match "http://www.example.com:80/dmsf/webdav/", response.body
+ assert_match "/", response.body
+
+ # project.identifier should not match when using project names
+ assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body
+ assert_no_match "#{@project1.identifier}", response.body
+
+ # old project name should not match
+ assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body
+ assert_no_match "#{@project1_name}", response.body
+
+ # but new project name should match
+ assert_match "http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/", response.body
+ assert_match "#{project1_new_name}", response.body
+ end
+
def test_propfind_depth0_on_project1_for_admin_with_cache
RedmineDmsf::Webdav::Cache.init_testcache