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