From 53236c682b95efa15d87f1bf1b5d7d2b810d77d5 Mon Sep 17 00:00:00 2001 From: Karel Picman Date: Mon, 20 Feb 2017 14:05:36 +0100 Subject: [PATCH] If plugin settings can't be aplied during tests --- .../webdav/dmsf_webdav_delete_test.rb | 78 +++-- .../webdav/dmsf_webdav_get_test.rb | 27 +- .../webdav/dmsf_webdav_head_test.rb | 64 ++-- .../webdav/dmsf_webdav_lock_test.rb | 116 +++---- .../webdav/dmsf_webdav_mkcol_test.rb | 27 +- .../webdav/dmsf_webdav_move_test.rb | 316 +++++++++--------- .../webdav/dmsf_webdav_options_test.rb | 57 ++-- .../webdav/dmsf_webdav_propfind_test.rb | 277 ++++++++------- .../webdav/dmsf_webdav_put_test.rb | 55 +-- 9 files changed, 526 insertions(+), 491 deletions(-) diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index e4274d90..ae2a17a9 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -172,19 +172,19 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest 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_project_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" + if 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_project_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 end def test_file_delete_by_administrator @@ -211,21 +211,23 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest 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_project_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" + if 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_project_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 end def test_locked_folder @@ -252,15 +254,17 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest def test_non_versioned_file Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '\.tmp$' - @project1.enable_module! :dmsf - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_delete - - file = @file1.copy_to_filename(@project1, nil, "delete_test.tmp") - - delete "/dmsf/webdav/#{@project1.identifier}/delete_test.tmp", nil, @jsmith - # The file should be destroyed - assert_nil DmsfFile.find_file_by_name(@project1, nil, "delete_test.tmp") + if Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] == '\.tmp$' + @project1.enable_module! :dmsf + @role.add_permission! :view_dmsf_folders + @role.add_permission! :file_delete + + file = @file1.copy_to_filename(@project1, nil, "delete_test.tmp") + + delete "/dmsf/webdav/#{@project1.identifier}/delete_test.tmp", nil, @jsmith + # The file should be destroyed + assert_nil DmsfFile.find_file_by_name(@project1, nil, 'delete_test.tmp') + end end end \ No newline at end of file diff --git a/test/integration/webdav/dmsf_webdav_get_test.rb b/test/integration/webdav/dmsf_webdav_get_test.rb index a06b3195..79cae62e 100644 --- a/test/integration/webdav/dmsf_webdav_get_test.rb +++ b/test/integration/webdav/dmsf_webdav_get_test.rb @@ -66,12 +66,13 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest 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_project_name(@project1) - - get '/dmsf/webdav', nil, @admin - assert_response :success - assert_no_match @project1.identifier, response.body - assert_match project1_uri, response.body + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + get '/dmsf/webdav', nil, @admin + assert_response :success + assert_no_match @project1.identifier, response.body + assert_match project1_uri, response.body + end end def test_should_not_list_non_dmsf_enabled_project @@ -96,13 +97,13 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest assert_response :success Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 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 5f38370b..e94cf5f5 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -58,30 +58,30 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest 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 + if 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 end def test_head_responds_anonymous_msoffice_user_agent - head "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + 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 + if 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 end def test_head_responds_anonymous_other_user_agent - head "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => "Other"} + head "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => 'Other'} assert_response 401 check_headers_dont_exist end @@ -97,30 +97,30 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest 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 + if 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 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"} + 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 + if 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 end def test_head_responds_to_file_anonymous_other_user_agent - head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, {:HTTP_USER_AGENT => "Other"} + head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, {:HTTP_USER_AGENT => 'Other'} assert_response 401 check_headers_dont_exist end @@ -132,13 +132,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest end def test_head_fails_when_file_not_found_anonymous_msoffice_user_agent - head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'} assert_response :missing check_headers_dont_exist end def test_head_fails_when_file_not_found_anonymous_other_user_agent - head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", nil, {:HTTP_USER_AGENT => "Other"} + head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", nil, {:HTTP_USER_AGENT => 'Other'} assert_response 401 check_headers_dont_exist end @@ -150,13 +150,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest end def test_head_fails_when_folder_not_found_anonymous_msoffice_user_agent - head '/dmsf/webdav/folder_not_here', nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + head '/dmsf/webdav/folder_not_here', nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'} assert_response :missing check_headers_dont_exist end def test_head_fails_when_folder_not_found_anonymous_other_user_agent - head '/dmsf/webdav/folder_not_here', nil, {:HTTP_USER_AGENT => "Other"} + head '/dmsf/webdav/folder_not_here', nil, {:HTTP_USER_AGENT => 'Other'} assert_response 401 check_headers_dont_exist end diff --git a/test/integration/webdav/dmsf_webdav_lock_test.rb b/test/integration/webdav/dmsf_webdav_lock_test.rb index e88cf4a8..ab007b70 100644 --- a/test/integration/webdav/dmsf_webdav_lock_test.rb +++ b/test/integration/webdav/dmsf_webdav_lock_test.rb @@ -44,33 +44,13 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest end def test_lock_file_already_locked_by_other - file = DmsfFile.find_by_id 1 - - log_user 'admin', 'admin' # login as admin - assert !User.current.anonymous?, 'Current user is anonymous' - assert file.lock!, "File failed to be locked by #{User.current.name}" - - xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", - " - - - - jsmith -", - @jsmith.merge!({:HTTP_DEPTH=>"infinity", - :HTTP_TIMEOUT=>"Infinite",}) - assert_response 423 # Locked - end - - def test_lock_file - file = DmsfFile.find_by_id 1 - - create_time = Time.utc(2000, 1, 2, 3, 4, 5) - refresh_time = Time.utc(2000, 1, 2, 6, 7, 8) - - # Time travel, will make the usec part of the time 0 - travel_to create_time do - # Lock file + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + file = DmsfFile.find_by_id 1 + + log_user 'admin', 'admin' # login as admin + assert !User.current.anonymous?, 'Current user is anonymous' + assert file.lock!, "File failed to be locked by #{User.current.name}" + xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", " @@ -78,40 +58,64 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest jsmith ", - @jsmith.merge!({:HTTP_DEPTH=>"infinity", - :HTTP_TIMEOUT=>"Infinite",}) - assert_response 200 - # Verify the response - assert_match "", response.body - assert_match "", response.body - assert_match "infinity", response.body - # 1.week = 7*24*3600=604800 seconds - assert_match "Second-604800", response.body - assert_match /([a-z0-9\-]+)<\/D:href><\/D:locktoken>/, response.body - # Extract the locktoken, needed when refreshing the lock - response.body.match(/([a-z0-9\-]+)<\/D:href><\/D:locktoken>/) - locktoken=$1 - # Verify the lock in the db - l = DmsfFile.find_by_id(1).lock.first - assert_equal l.created_at, create_time - assert_equal l.updated_at, create_time - assert_equal l.expires_at, create_time + 1.week - - travel_to refresh_time do - # Refresh lock + @jsmith.merge!({:HTTP_DEPTH => 'infinity', + :HTTP_TIMEOUT => 'Infinite',}) + assert_response 423 # Locked + end + end + + def test_lock_file + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + file = DmsfFile.find_by_id 1 + + create_time = Time.utc(2000, 1, 2, 3, 4, 5) + refresh_time = Time.utc(2000, 1, 2, 6, 7, 8) + + # Time travel, will make the usec part of the time 0 + travel_to create_time do + # Lock file xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", - nil, - @jsmith.merge!({:HTTP_DEPTH=>"infinity", - :HTTP_TIMEOUT=>"Infinite", - :HTTP_IF=>"(#{locktoken})"}) - assert_response 200 + " + + + + jsmith + ", + @jsmith.merge!({:HTTP_DEPTH => 'infinity', + :HTTP_TIMEOUT => 'Infinite',}) + assert_response :success + # Verify the response + assert_match '', response.body + assert_match '', response.body + assert_match 'infinity', response.body # 1.week = 7*24*3600=604800 seconds - assert_match "Second-604800", response.body + assert_match 'Second-604800', response.body + assert_match /([a-z0-9\-]+)<\/D:href><\/D:locktoken>/, response.body + # Extract the locktoken, needed when refreshing the lock + response.body.match(/([a-z0-9\-]+)<\/D:href><\/D:locktoken>/) + locktoken=$1 # Verify the lock in the db l = DmsfFile.find_by_id(1).lock.first assert_equal l.created_at, create_time - assert_equal l.updated_at, refresh_time - assert_equal l.expires_at, refresh_time + 1.week + assert_equal l.updated_at, create_time + assert_equal l.expires_at, create_time + 1.week + + travel_to refresh_time do + # Refresh lock + xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", + nil, + @jsmith.merge!({:HTTP_DEPTH => 'infinity', + :HTTP_TIMEOUT => 'Infinite', + :HTTP_IF => "(#{locktoken})"}) + assert_response :success + # 1.week = 7*24*3600=604800 seconds + assert_match 'Second-604800', response.body + # Verify the lock in the db + l = DmsfFile.find_by_id(1).lock.first + assert_equal l.created_at, create_time + assert_equal l.updated_at, refresh_time + assert_equal l.expires_at, refresh_time + 1.week + end end end end diff --git a/test/integration/webdav/dmsf_webdav_mkcol_test.rb b/test/integration/webdav/dmsf_webdav_mkcol_test.rb index bdaf4a67..ee49d7c6 100644 --- a/test/integration/webdav/dmsf_webdav_mkcol_test.rb +++ b/test/integration/webdav/dmsf_webdav_mkcol_test.rb @@ -99,19 +99,20 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest end def test_should_create_folder_for_non_admin_user_with_rights - @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_project_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 + 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 + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 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 96105fd7..6f43a405 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -79,26 +79,28 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest def test_move_to_new_filename_without_folder_manipulation_permission @role.remove_permission! :folder_manipulation file = DmsfFile.find_by_id 1 - new_name = "#{file.name}.moved" - assert_no_difference 'file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) - assert_response 403 + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + assert_no_difference 'file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) + assert_response 403 + end end end def test_move_to_new_filename_without_folder_manipulation_permission_as_admin - @role.remove_permission! :folder_manipulation - file = DmsfFile.find_by_id 1 - - new_name = "#{file.name}.moved" - assert_difference 'file.dmsf_file_revisions.count', +1 do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{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." + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + @role.remove_permission! :folder_manipulation + file = DmsfFile.find_by_id 1 + new_name = "#{file.name}.moved" + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{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 end @@ -121,42 +123,45 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest def test_move_to_new_filename file = DmsfFile.find_by_id 1 - - new_name = "#{file.name}.moved" - assert_difference 'file.dmsf_file_revisions.count', +1 do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{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." + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + new_name = "#{file.name}.moved" + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{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 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_project_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." + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 end def test_move_zero_sized_to_new_filename - file = DmsfFile.find_by_id 10 - - new_name = "#{file.name}.moved" - assert_no_difference 'file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{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." + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + file = DmsfFile.find_by_id 10 + new_name = "#{file.name}.moved" + assert_no_difference 'file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{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 end @@ -166,12 +171,14 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest 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.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"}) - assert_response 201 # Created - file2 = DmsfFile.find_by_id 1 - assert_equal folder.id, file2.dmsf_folder_id + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"}) + assert_response 201 # Created + file2 = DmsfFile.find_by_id 1 + assert_equal folder.id, file2.dmsf_folder_id + end end end @@ -179,16 +186,18 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest 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_project_name(@project1), /\W/) - assert_kind_of DmsfFile, file - assert_kind_of DmsfFolder, folder + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 + 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 end @@ -197,26 +206,28 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest folder = DmsfFolder.find_by_id 1 assert_kind_of DmsfFile, file assert_kind_of DmsfFolder, folder - - assert_no_difference 'file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"}) - assert_response 201 # Created - file2 = DmsfFile.find_by_id 10 - assert_equal folder.id, file2.dmsf_folder_id + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + assert_no_difference 'file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"}) + assert_response 201 # Created + file2 = DmsfFile.find_by_id 10 + assert_equal folder.id, file2.dmsf_folder_id + end end end def test_move_to_existing_filename - file = DmsfFile.find_by_id 1 - file2 = DmsfFile.find_by_id 9 - - new_name = "#{file2.name}" - assert_no_difference 'file2.dmsf_file_revisions.count' do - assert_no_difference 'file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) - assert_response 405 # MethodNotAllowed + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + file = DmsfFile.find_by_id 1 + file2 = DmsfFile.find_by_id 9 + new_name = "#{file2.name}" + assert_no_difference 'file2.dmsf_file_revisions.count' do + assert_no_difference 'file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) + assert_response 405 # MethodNotAllowed + end end end end @@ -257,90 +268,93 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest log_user 'jsmith', 'jsmith' # login as jsmith assert !User.current.anonymous?, 'Current user is anonymous' assert file.lock!, "File failed to be locked by #{User.current.name}" - - # Move once - new_name = "#{file.name}.m1" - assert_difference 'file.dmsf_file_revisions.count', +1 do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) - assert_response 201 # Created - end - - # Move twice, make sure that the MsOffice store sequence is not disrupting normal move - new_name2 = "#{new_name}.m2" - assert_difference 'file.dmsf_file_revisions.count', +1 do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{new_name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name2}"}) - assert_response 201 # Created + + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + # Move once + new_name = "#{file.name}.m1" + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) + assert_response 201 # Created + end + # Move twice, make sure that the MsOffice store sequence is not disrupting normal move + new_name2 = "#{new_name}.m2" + assert_difference 'file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{new_name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name2}"}) + assert_response 201 # Created + end end end def test_move_msoffice_save_locked_file - # When some versions of MsOffice saves a file it use the following sequence: - # 1. Save changes to a new temporary document, XXX.tmp - # 2. Rename (MOVE) document to YYY.tmp. History is lost here if original document is moved. - # 3. Rename (MOVE) XXX.tmp to document name. XXX.tmp must be merged to original document or else the history is lost. - # 4. Delete YYY.tmp. - # Verify that steps 2 and 3 works. - - original_file = DmsfFile.find_by_id 1 - - log_user 'jsmith', 'jsmith' # login as jsmith - assert !User.current.anonymous?, 'Current user is anonymous' - assert original_file.lock!, "File failed to be locked by #{User.current.name}" + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + # When some versions of MsOffice saves a file it use the following sequence: + # 1. Save changes to a new temporary document, XXX.tmp + # 2. Rename (MOVE) document to YYY.tmp. History is lost here if original document is moved. + # 3. Rename (MOVE) XXX.tmp to document name. XXX.tmp must be merged to original document or else the history is lost. + # 4. Delete YYY.tmp. + # Verify that steps 2 and 3 works. - # First save while file is locked, should create new revision - temp_file_name = "AAAAAAAA.tmp" - - # Make sure that the temp-file does not exist. - temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" - assert !temp_file, "File '#{temp_file_name}' should not exist yet." - - # Move the original file to AAAAAAAA.tmp. The original file should not change but a new file should be created. - assert_no_difference 'original_file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{original_file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"}) - assert_response 201 # Created - end - - # Verify that a new file acutally has been created - temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" - assert temp_file, "File '#{temp_file_name}' not found, move failed." - assert_equal temp_file.dmsf_file_revisions.count,1 - assert_not_equal temp_file.id, original_file.id - - # Move a temporary file (use AAAAAAAA.tmp) to the original file. - assert_difference 'original_file.dmsf_file_revisions.count', +1 do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{original_file.name}"}) - assert_response 201 # Created - end - - # Second save while file is locked, should NOT create new revision - temp_file_name = "BBBBBBBB.tmp" - - # Make sure that the temp-file does not exist. - temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" - assert !temp_file, "File '#{temp_file_name}' should not exist yet." - - # Move the original file to BBBBBBBB.tmp. The original file should not change but a new file should be created. - assert_no_difference 'original_file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{original_file.name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"}) - assert_response 201 # Created - end - - # Verify that a new file acutally has been created - temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" - assert temp_file, "File '#{temp_file_name}' not found, move failed." - assert_equal temp_file.dmsf_file_revisions.count,1 - assert_not_equal temp_file.id, original_file.id - - # Move a temporary file (use BBBBBBBB.tmp) to the original file. - assert_no_difference 'original_file.dmsf_file_revisions.count' do - xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", nil, - @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{original_file.name}"}) - assert_response 201 # Created + original_file = DmsfFile.find_by_id 1 + + log_user 'jsmith', 'jsmith' # login as jsmith + assert !User.current.anonymous?, 'Current user is anonymous' + assert original_file.lock!, "File failed to be locked by #{User.current.name}" + + # First save while file is locked, should create new revision + temp_file_name = 'AAAAAAAA.tmp' + + # Make sure that the temp-file does not exist. + temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" + assert !temp_file, "File '#{temp_file_name}' should not exist yet." + + # Move the original file to AAAAAAAA.tmp. The original file should not change but a new file should be created. + assert_no_difference 'original_file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{original_file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"}) + assert_response 201 # Created + end + + # Verify that a new file acutally has been created + temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" + assert temp_file, "File '#{temp_file_name}' not found, move failed." + assert_equal temp_file.dmsf_file_revisions.count,1 + assert_not_equal temp_file.id, original_file.id + + # Move a temporary file (use AAAAAAAA.tmp) to the original file. + assert_difference 'original_file.dmsf_file_revisions.count', +1 do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{original_file.name}"}) + assert_response 201 # Created + end + + # Second save while file is locked, should NOT create new revision + temp_file_name = "BBBBBBBB.tmp" + + # Make sure that the temp-file does not exist. + temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" + assert !temp_file, "File '#{temp_file_name}' should not exist yet." + + # Move the original file to BBBBBBBB.tmp. The original file should not change but a new file should be created. + assert_no_difference 'original_file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{original_file.name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"}) + assert_response 201 # Created + end + + # Verify that a new file acutally has been created + temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" + assert temp_file, "File '#{temp_file_name}' not found, move failed." + assert_equal temp_file.dmsf_file_revisions.count,1 + assert_not_equal temp_file.id, original_file.id + + # Move a temporary file (use BBBBBBBB.tmp) to the original file. + assert_no_difference 'original_file.dmsf_file_revisions.count' do + xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", nil, + @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{original_file.name}"}) + assert_response 201 # Created + end end end diff --git a/test/integration/webdav/dmsf_webdav_options_test.rb b/test/integration/webdav/dmsf_webdav_options_test.rb index f213b495..add44259 100644 --- a/test/integration/webdav/dmsf_webdav_options_test.rb +++ b/test/integration/webdav/dmsf_webdav_options_test.rb @@ -48,20 +48,24 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest def test_options_returns_expected_allow_header_for_ro Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY' - xml_http_request :options, '/dmsf/webdav' - 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' - assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND' + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_ONLY' + xml_http_request :options, '/dmsf/webdav' + 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' + assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND' + end end def test_options_returns_expected_allow_header_for_rw Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - xml_http_request :options, '/dmsf/webdav' - 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' - assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + xml_http_request :options, '/dmsf/webdav' + 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' + assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' + end end def test_options_returns_expected_dav_header @@ -107,11 +111,13 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest def test_authenticated_options_returns_expected_allow_header Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin - 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' - assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin + 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' + assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK' + end end def test_authenticated_options_returns_expected_dav_header @@ -130,31 +136,32 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest end def test_un_authenticated_options_for_msoffice_user_agent - xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"} + xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'} assert_response 405 end def test_authenticated_options_for_msoffice_user_agent - xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => "Microsoft Office Word 2014"}) + xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Microsoft Office Word 2014'}) assert_response :success end def test_un_authenticated_options_for_other_user_agent - xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => "Other"} + xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => 'Other'} assert_response 401 end def test_authenticated_options_for_other_user_agent - xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => "Other"}) + 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_project_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 + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 end def test_authenticated_options_returns_404_for_non_dmsf_enabled_items diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index 68c5d2ff..ce412ef0 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -58,19 +58,17 @@ 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 -# puts "\nPROPFIND response.body:\n#{response.body}" unless response.body.nil? 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 "http://www.example.com:80/dmsf/webdav/", response.body - assert_match "/", response.body + assert_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_match '/', response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body assert_no_match "#{@project1.identifier}", response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/", response.body @@ -78,12 +76,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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 "http://www.example.com:80/dmsf/webdav/", response.body - assert_match "/", response.body + assert_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_match '/', response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body assert_no_match "#{@project1.identifier}", response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/", response.body @@ -91,12 +89,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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 "http://www.example.com:80/dmsf/webdav/", response.body - assert_match "/", response.body + assert_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_match '/', response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body assert_no_match "#{@project1.identifier}", response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/", response.body @@ -104,12 +102,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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 "http://www.example.com:80/dmsf/webdav/", response.body - assert_match "/", response.body + assert_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_match 'D:displayname>/', response.body assert_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body assert_match "#{@project1.identifier}", response.body assert_no_match "http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/", response.body @@ -118,34 +116,33 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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 - assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body - assert_match "#{@project1_name}", response.body + if 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 + assert_match "http://www.example.com:80/dmsf/webdav/#{@project1_uri}/", response.body + assert_match "#{@project1_name}", response.body + end end def test_propfind_depth0_on_project1_for_non_member xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, - @jsmith.merge!({:HTTP_DEPTH => "0"}) + @jsmith.merge!({:HTTP_DEPTH => '0'}) assert_response 404 end def test_propfind_depth0_on_project1_for_admin xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, - @admin.merge!({:HTTP_DEPTH => "0"}) + @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 + assert_no_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_no_match '/', response.body # Project assert_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body assert_match "#{@project1.identifier}", response.body @@ -165,29 +162,29 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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 - - 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 - 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/#{@project1_uri}/", response.body - assert_match "#{@project1_name}", response.body + 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'}) + 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/#{@project1_uri}/", response.body + assert_match "#{@project1_name}", response.body + end end def test_propfind_depth1_on_project1_for_admin xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, - @admin.merge!({:HTTP_DEPTH => "1"}) + @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 + assert_no_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_no_match '/', response.body # Project assert_match "http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/", response.body assert_match "#{@project1.identifier}", response.body @@ -207,93 +204,95 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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 - - xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, - @admin.merge!({:HTTP_DEPTH => "1"}) - assert_response 207 # MultiStatus + 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 - 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/#{@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/#{@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/#{@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/#{@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/#{@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/#{@project1_uri}/#{@file10.name}", response.body - assert_match "#{@file10.name}", response.body + xml_http_request :propfind, "/dmsf/webdav/#{@project1_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/#{@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/#{@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/#{@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/#{@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/#{@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/#{@project1_uri}/#{@file10.name}", response.body + assert_match "#{@file10.name}", response.body + end 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 - # 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 + assert_response 207 # MultiStatus + assert_match 'http://www.example.com:80/dmsf/webdav/', response.body + assert_match '/', 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 + # 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 end def test_propfind_depth0_on_project1_for_admin_with_cache @@ -301,7 +300,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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"}) + @admin.merge!({:HTTP_DEPTH => '0'}) assert_response 207 # MultiStatus end @@ -316,7 +315,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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"}) + @admin.merge!({:HTTP_DEPTH => '0'}) assert_response 207 # MultiStatus end assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body @@ -327,7 +326,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +7 do xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, - @admin.merge!({:HTTP_DEPTH => "1"}) + @admin.merge!({:HTTP_DEPTH => '1'}) assert_response 207 # MultiStatus end @@ -352,7 +351,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest 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"}) + @admin.merge!({:HTTP_DEPTH => '1'}) assert_response 207 # MultiStatus assert_match "Cached PROPFIND/#{@project1.id}", response.body end diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index eb5b28fe..93d180f6 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -94,19 +94,21 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest end def test_put_as_admin_granted_on_dmsf_enabled_project - 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_project_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 + 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' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 + end end def test_put_failed_as_jsmith_on_non_dmsf_enabled_project @@ -147,18 +149,21 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest @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_project_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 + if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' + 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 + if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true + project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_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 + end end def test_put_writes_revision_successfully_for_unlocked_file