From f4ca9a62730b35312276c17d804b4cbffce9c84f Mon Sep 17 00:00:00 2001 From: "COLA@Redmine.local" Date: Tue, 14 Feb 2017 21:41:40 +0100 Subject: [PATCH] Updated tests for using project names. --- .../webdav/dmsf_webdav_delete_test.rb | 37 ++++++++ .../webdav/dmsf_webdav_get_test.rb | 22 ++++- .../webdav/dmsf_webdav_head_test.rb | 38 +++++++- .../webdav/dmsf_webdav_mkcol_test.rb | 20 ++-- .../webdav/dmsf_webdav_move_test.rb | 33 +++++++ .../webdav/dmsf_webdav_options_test.rb | 36 ++++--- .../webdav/dmsf_webdav_propfind_test.rb | 93 ++++++++++++++++++- .../webdav/dmsf_webdav_put_test.rb | 46 +++++---- 8 files changed, 280 insertions(+), 45 deletions(-) diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 562533fc..c3aee556 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -40,6 +40,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest @file1 = DmsfFile.find_by_id 1 Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false DmsfFile.storage_path = File.expand_path '../../../fixtures/files', __FILE__ User.current = nil end @@ -169,6 +170,23 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end end + def test_folder_delete_by_user_with_project_names + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + @role.add_permission! :view_dmsf_folders + @role.add_permission! :folder_manipulation + @project1.enable_module! :dmsf # Flag module enabled + + delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith + assert_response 404 + + p1name = RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1) + p1name_uri = URI.encode(p1name, /\W/) + delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", nil, @jsmith + assert_response :success + @folder6.reload + assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist" + end + def test_file_delete_by_administrator if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' @project1.enable_module! :dmsf @@ -191,6 +209,25 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end end + def test_file_delete_by_user_with_project_names + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + @project1.enable_module! :dmsf + @role.add_permission! :view_dmsf_folders + @role.add_permission! :file_delete + + delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith + assert_response 404 + + p1name = RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1) + p1name_uri = URI.encode(p1name, /\W/) + + delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", nil, @jsmith + assert_response :success + + @file1.reload + assert @file1.deleted?, "File #{@file1.name} is not expected to exist" + end + def test_locked_folder @project1.enable_module! :dmsf # Flag module enabled @role.add_permission! :view_dmsf_folders diff --git a/test/integration/webdav/dmsf_webdav_get_test.rb b/test/integration/webdav/dmsf_webdav_get_test.rb index 87b0f250..11217b17 100644 --- a/test/integration/webdav/dmsf_webdav_get_test.rb +++ b/test/integration/webdav/dmsf_webdav_get_test.rb @@ -34,6 +34,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest @role = Role.find_by_id 1 # Manager Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false DmsfFile.storage_path = File.expand_path '../../../fixtures/files', __FILE__ User.current = nil end @@ -62,13 +63,21 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest def test_should_list_dmsf_enabled_project get '/dmsf/webdav', nil, @admin assert_response :success - assert !response.body.match(@project1.name).nil?, "Expected to find project #{@project1.name} in return data" + assert !response.body.match(@project1.identifier).nil?, "Expected to find project #{@project1.identifier} in return data" + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1) + + get '/dmsf/webdav', nil, @admin + assert_response :success + assert_no_match @project1.identifier, response.body + assert_match project1_uri, response.body end def test_should_not_list_non_dmsf_enabled_project get '/dmsf/webdav', nil, @jsmith assert_response :success - assert response.body.match(@project2.name).nil?, "Unexpected find of project #{@project2.name} in return data" + assert response.body.match(@project2.identifier).nil?, "Unexpected find of project #{@project2.identifier} in return data" end def test_should_return_status_404_when_project_does_not_exist @@ -85,6 +94,15 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest def test_download_file_from_dmsf_enabled_project get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin assert_response :success + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + + get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin + assert_response 404 + + get "/dmsf/webdav/#{project1_uri}/test.txt", nil, @admin + assert_response :success end def test_should_list_dmsf_contents_within_project diff --git a/test/integration/webdav/dmsf_webdav_head_test.rb b/test/integration/webdav/dmsf_webdav_head_test.rb index 9c4e6ec9..211911af 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -32,7 +32,11 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest @project1 = Project.find_by_id 1 @project2 = Project.find_by_id 2 Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + # Temporarily enable project names + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + @project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false DmsfFile.storage_path = File.expand_path '../../../fixtures/files', __FILE__ User.current = nil end @@ -52,12 +56,28 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest head "/dmsf/webdav/#{@project1.identifier}", nil, @admin assert_response :success check_headers_exist + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + + head "/dmsf/webdav/#{@project1.identifier}", nil, @admin + assert_response 404 + + head "/dmsf/webdav/#{@project1_uri}", nil, @admin + assert_response :success end def test_head_responds_anonymous_msoffice_user_agent head "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} assert_response :success check_headers_exist + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + + head "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + assert_response 404 + + head "/dmsf/webdav/#{@project1_uri}", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + assert_response :success end def test_head_responds_anonymous_other_user_agent @@ -75,12 +95,28 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin assert_response :success check_headers_exist # Note it'll allow 1 out of the 3 expected to fail + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + + head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin + assert_response 404 + + head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, @admin + assert_response :success end def test_head_responds_to_file_anonymous_msoffice_user_agent head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} assert_response :success check_headers_exist # Note it'll allow 1 out of the 3 expected to fail + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + + head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + assert_response 404 + + head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + assert_response :success end def test_head_responds_to_file_anonymous_other_user_agent diff --git a/test/integration/webdav/dmsf_webdav_mkcol_test.rb b/test/integration/webdav/dmsf_webdav_mkcol_test.rb index ac571671..ebe5751d 100644 --- a/test/integration/webdav/dmsf_webdav_mkcol_test.rb +++ b/test/integration/webdav/dmsf_webdav_mkcol_test.rb @@ -35,6 +35,7 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest @folder6 = DmsfFolder.find_by_id 6 Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false DmsfFile.storage_path = File.expand_path '../../../fixtures/files', __FILE__ User.current = nil end @@ -98,12 +99,19 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest end def test_should_create_folder_for_non_admin_user_with_rights - if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' - @project1.enable_module! :dmsf - @role.add_permission! :folder_manipulation - xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", nil, @jsmith - assert_response :success - end + @project1.enable_module! :dmsf + @role.add_permission! :folder_manipulation + xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", nil, @jsmith + assert_response :success + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + + xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", nil, @jsmith + assert_response 404 + + xml_http_request :mkcol, "/dmsf/webdav/#{project1_uri}/test3", nil, @jsmith + assert_response :success end end \ No newline at end of file diff --git a/test/integration/webdav/dmsf_webdav_move_test.rb b/test/integration/webdav/dmsf_webdav_move_test.rb index 2aa781ae..aeaf4678 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -46,6 +46,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false super end @@ -130,6 +131,21 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest assert f, "Moved file '#{new_name}' not found in project." end end + + def test_move_to_new_filename_with_project_names + file = DmsfFile.find_by_id 1 + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + + new_name = "#{file.name}.moved" + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{new_name}"}) + assert_response 201 # Created + f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}" + assert f, "Moved file '#{new_name}' not found in project." + end + end def test_move_zero_sized_to_new_filename file = DmsfFile.find_by_id 10 @@ -158,6 +174,23 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest assert_equal folder.id, file2.dmsf_folder_id end end + + def test_move_to_new_folder_with_project_names + file = DmsfFile.find_by_id 1 + folder = DmsfFolder.find_by_id 1 + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + assert_kind_of DmsfFile, file + assert_kind_of DmsfFolder, folder + + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{folder.title}/#{file.name}"}) + assert_response 201 # Created + file2 = DmsfFile.find_by_id 1 + assert_equal folder.id, file2.dmsf_folder_id + end + end def test_move_zero_sized_to_new_folder file = DmsfFile.find_by_id 10 diff --git a/test/integration/webdav/dmsf_webdav_options_test.rb b/test/integration/webdav/dmsf_webdav_options_test.rb index 069b2ed4..ae732d97 100644 --- a/test/integration/webdav/dmsf_webdav_options_test.rb +++ b/test/integration/webdav/dmsf_webdav_options_test.rb @@ -33,6 +33,7 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest @project2 = Project.find_by_id 2 Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false end def test_truth @@ -60,8 +61,7 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest assert_response :success assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty' assert response.headers['Allow'] , 'Allow header is empty or does not exist' - # TODO: Unable to set the 'WEBDAV_READ_WRITE' mode - #assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' + assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' end def test_options_returns_expected_dav_header @@ -111,8 +111,7 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest assert_response :success assert !(response.headers.nil? || response.headers.empty?), "Response headers are empty" assert response.headers['Allow'], 'Allow header is empty or does not exist' - # TODO: Unable to set the 'WEBDAV_READ_WRITE' mode - #assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' + assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' end def test_authenticated_options_returns_expected_dav_header @@ -148,18 +147,25 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest def test_authenticated_options_for_other_user_agent xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => "Other"}) assert_response :success + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + + xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => "Other"}) + assert_response 404 + xml_http_request :options, "/dmsf/webdav/#{project1_uri}", nil, @admin.merge!({:HTTP_USER_AGENT => "Other"}) + assert_response :success end - # TODO: It doesn't work - # def test_authenticated_options_returns_401_for_non_dmsf_enabled_items - # @project2.disable_module! :dmsf - # xml_http_request :options, "/dmsf/webdav/#{@project2.identifier}", nil, @jsmith - # assert_response 401 # refused - # end - # - # def test_authenticated_options_returns_401_for_not_found - # xml_http_request :options, '/dmsf/webdav/does-not-exist', nil, @jsmith - # assert_response 401 # refused - # end + def test_authenticated_options_returns_404_for_non_dmsf_enabled_items + @project2.disable_module! :dmsf + xml_http_request :options, "/dmsf/webdav/#{@project2.identifier}", nil, @jsmith + assert_response 404 + end + + def test_authenticated_options_returns_404_for_not_found + xml_http_request :options, '/dmsf/webdav/does-not-exist', nil, @jsmith + assert_response 404 + end end diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index ef997ada..54f51779 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -20,6 +20,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require File.expand_path('../../../test_helper', __FILE__) +require 'uri' class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest @@ -42,6 +43,8 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false + RedmineDmsf::Webdav::Cache.init_nullcache end def test_truth @@ -108,6 +111,26 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert_no_match "#{@project2.identifier}", response.body end + def test_propfind_depth1_on_root_for_admin_with_project_names + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + xml_http_request :propfind, "/dmsf/webdav/", nil, + @admin.merge!({:HTTP_DEPTH => "1"}) + + 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 + p1name = RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1) + p1name_uri = URI.encode(p1name, /\W/) + assert_match "http://www.example.com:80/dmsf/webdav/#{p1name_uri}/", response.body + assert_match "#{p1name}", response.body + end + def test_propfind_depth0_on_project1_for_non_member xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith.merge!({:HTTP_DEPTH => "0"}) @@ -136,6 +159,28 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", response.body assert_no_match "#{@file10.name}", response.body end + + def test_propfind_depth0_on_project1_for_admin_with_project_names + 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 + + p1name = RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1) + p1name_uri = URI.encode(p1name, /\W/) + + xml_http_request :propfind, "/dmsf/webdav/#{p1name_uri}", nil, + @admin.merge!({:HTTP_DEPTH => "0"}) + assert_response 207 # MultiStatus + assert_no_match "http://www.example.com:80/dmsf/webdav/", response.body + assert_no_match "/", response.body + # 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 + end def test_propfind_depth1_on_project1_for_admin xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @@ -160,6 +205,50 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert_match "#{@file10.name}", response.body end + def test_propfind_depth1_on_project1_for_admin_with_project_names + 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 + + p1name = RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1) + p1name_uri = URI.encode(p1name, /\W/) + + xml_http_request :propfind, "/dmsf/webdav/#{p1name_uri}", nil, + @admin.merge!({:HTTP_DEPTH => "1"}) + assert_response 207 # MultiStatus + + assert_no_match "http://www.example.com:80/dmsf/webdav/", response.body + assert_no_match "/", response.body + + # 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 + + # 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 "#{@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 "#{@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 "#{@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 "#{@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 "#{@file10.name}", response.body + end + + def test_propfind_depth0_on_project1_for_admin_with_cache RedmineDmsf::Webdav::Cache.init_testcache @@ -184,8 +273,6 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert_response 207 # MultiStatus end assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body - - RedmineDmsf::Webdav::Cache.init_nullcache end def test_propfind_depth1_on_project1_for_admin_with_cache @@ -237,8 +324,6 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body assert_match "Cached PROPSTATS/#{@project1.identifier}", RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}") assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid") - - RedmineDmsf::Webdav::Cache.init_nullcache end end \ No newline at end of file diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index 38a11fbf..b111debb 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -39,6 +39,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest @role = Role.find 1 # Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false super end @@ -93,13 +94,19 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_put_as_admin_granted_on_dmsf_enabled_project - if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' - put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) - assert_response :success # 201 Created - # Lets check for our file - file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' - assert file, 'Check for files existance' - end + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) + assert_response :success # 201 Created + # Lets check for our file + file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' + assert file, 'Check for files existance' + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) + assert_response 409 + put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) + assert_response :success # 201 Created end def test_put_failed_as_jsmith_on_non_dmsf_enabled_project @@ -137,16 +144,21 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_put_succeeds_for_non_admin_with_correct_permissions - if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' - @project1.enable_module! :dmsf # Flag module enabled - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_manipulation - put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) - assert_response :success # 201 - Now we have permissions - # Lets check for our file - file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' - assert file, 'File test-1234 was not found in projects dmsf folder.' - end + @project1.enable_module! :dmsf # Flag module enabled + @role.add_permission! :view_dmsf_folders + @role.add_permission! :file_manipulation + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) + assert_response :success # 201 - Now we have permissions + # Lets check for our file + file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' + assert file, 'File test-1234 was not found in projects dmsf folder.' + + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_display_name(@project1), /\W/) + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) + assert_response 409 + put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) + assert_response :success # 201 - Now we have permissions end def test_put_writes_revision_successfully_for_unlocked_file