If plugin settings can't be aplied during tests

This commit is contained in:
Karel Picman 2017-02-20 14:05:36 +01:00
parent 396aac077e
commit 53236c682b
9 changed files with 526 additions and 491 deletions

View File

@ -172,13 +172,12 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_folder_delete_by_user_with_project_names def test_folder_delete_by_user_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
@role.add_permission! :view_dmsf_folders @role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation @role.add_permission! :folder_manipulation
@project1.enable_module! :dmsf # Flag module enabled @project1.enable_module! :dmsf # Flag module enabled
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith
assert_response 404 assert_response 404
p1name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) p1name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
p1name_uri = URI.encode(p1name, /\W/) p1name_uri = URI.encode(p1name, /\W/)
delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", nil, @jsmith delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", nil, @jsmith
@ -186,6 +185,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@folder6.reload @folder6.reload
assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist" assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist"
end end
end
def test_file_delete_by_administrator def test_file_delete_by_administrator
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
@ -211,6 +211,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_file_delete_by_user_with_project_names def test_file_delete_by_user_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
@project1.enable_module! :dmsf @project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders @role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete @role.add_permission! :file_delete
@ -227,6 +228,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@file1.reload @file1.reload
assert @file1.deleted?, "File #{@file1.name} is not expected to exist" assert @file1.deleted?, "File #{@file1.name} is not expected to exist"
end end
end
def test_locked_folder def test_locked_folder
@project1.enable_module! :dmsf # Flag module enabled @project1.enable_module! :dmsf # Flag module enabled
@ -252,6 +254,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_non_versioned_file def test_non_versioned_file
Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '\.tmp$' Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '\.tmp$'
if Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] == '\.tmp$'
@project1.enable_module! :dmsf @project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders @role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete @role.add_permission! :file_delete
@ -260,7 +263,8 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
delete "/dmsf/webdav/#{@project1.identifier}/delete_test.tmp", nil, @jsmith delete "/dmsf/webdav/#{@project1.identifier}/delete_test.tmp", nil, @jsmith
# The file should be destroyed # The file should be destroyed
assert_nil DmsfFile.find_file_by_name(@project1, nil, "delete_test.tmp") assert_nil DmsfFile.find_file_by_name(@project1, nil, 'delete_test.tmp')
end
end end
end end

View File

@ -66,13 +66,14 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
assert !response.body.match(@project1.identifier).nil?, "Expected to find project #{@project1.identifier} 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 Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
get '/dmsf/webdav', nil, @admin get '/dmsf/webdav', nil, @admin
assert_response :success assert_response :success
assert_no_match @project1.identifier, response.body assert_no_match @project1.identifier, response.body
assert_match project1_uri, response.body assert_match project1_uri, response.body
end end
end
def test_should_not_list_non_dmsf_enabled_project def test_should_not_list_non_dmsf_enabled_project
get '/dmsf/webdav', nil, @jsmith get '/dmsf/webdav', nil, @jsmith
@ -96,14 +97,14 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
assert_response :success assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1), /\W/)
get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin
assert_response 404 assert_response 404
get "/dmsf/webdav/#{project1_uri}/test.txt", nil, @admin get "/dmsf/webdav/#{project1_uri}/test.txt", nil, @admin
assert_response :success assert_response :success
end end
end
def test_should_list_dmsf_contents_within_project def test_should_list_dmsf_contents_within_project
get "/dmsf/webdav/#{@project1.identifier}", nil, @admin get "/dmsf/webdav/#{@project1.identifier}", nil, @admin

View File

@ -58,30 +58,30 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
check_headers_exist check_headers_exist
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
head "/dmsf/webdav/#{@project1.identifier}", nil, @admin head "/dmsf/webdav/#{@project1.identifier}", nil, @admin
assert_response 404 assert_response 404
head "/dmsf/webdav/#{@project1_uri}", nil, @admin head "/dmsf/webdav/#{@project1_uri}", nil, @admin
assert_response :success assert_response :success
end end
end
def test_head_responds_anonymous_msoffice_user_agent 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 assert_response :success
check_headers_exist check_headers_exist
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
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 404 assert_response 404
head "/dmsf/webdav/#{@project1_uri}", nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'}
head "/dmsf/webdav/#{@project1_uri}", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"}
assert_response :success assert_response :success
end end
end
def test_head_responds_anonymous_other_user_agent 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 assert_response 401
check_headers_dont_exist check_headers_dont_exist
end 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 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 Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin
assert_response 404 assert_response 404
head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, @admin head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, @admin
assert_response :success assert_response :success
end end
end
def test_head_responds_to_file_anonymous_msoffice_user_agent 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 assert_response :success
check_headers_exist # Note it'll allow 1 out of the 3 expected to fail 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 Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
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"} head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'}
assert_response 404 assert_response 404
head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'}
head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, {:HTTP_USER_AGENT => "Microsoft Office Word 2014"}
assert_response :success assert_response :success
end end
end
def test_head_responds_to_file_anonymous_other_user_agent 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 assert_response 401
check_headers_dont_exist check_headers_dont_exist
end end
@ -132,13 +132,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
end end
def test_head_fails_when_file_not_found_anonymous_msoffice_user_agent 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 assert_response :missing
check_headers_dont_exist check_headers_dont_exist
end end
def test_head_fails_when_file_not_found_anonymous_other_user_agent 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 assert_response 401
check_headers_dont_exist check_headers_dont_exist
end end
@ -150,13 +150,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
end end
def test_head_fails_when_folder_not_found_anonymous_msoffice_user_agent 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 assert_response :missing
check_headers_dont_exist check_headers_dont_exist
end end
def test_head_fails_when_folder_not_found_anonymous_other_user_agent 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 assert_response 401
check_headers_dont_exist check_headers_dont_exist
end end

View File

@ -44,6 +44,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end end
def test_lock_file_already_locked_by_other def test_lock_file_already_locked_by_other
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
log_user 'admin', 'admin' # login as admin log_user 'admin', 'admin' # login as admin
@ -57,12 +58,14 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
<d:locktype><d:write/></d:locktype> <d:locktype><d:write/></d:locktype>
<d:owner>jsmith</d:owner> <d:owner>jsmith</d:owner>
</d:lockinfo>", </d:lockinfo>",
@jsmith.merge!({:HTTP_DEPTH=>"infinity", @jsmith.merge!({:HTTP_DEPTH => 'infinity',
:HTTP_TIMEOUT=>"Infinite",}) :HTTP_TIMEOUT => 'Infinite',})
assert_response 423 # Locked assert_response 423 # Locked
end end
end
def test_lock_file def test_lock_file
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
create_time = Time.utc(2000, 1, 2, 3, 4, 5) create_time = Time.utc(2000, 1, 2, 3, 4, 5)
@ -78,15 +81,15 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
<d:locktype><d:write/></d:locktype> <d:locktype><d:write/></d:locktype>
<d:owner>jsmith</d:owner> <d:owner>jsmith</d:owner>
</d:lockinfo>", </d:lockinfo>",
@jsmith.merge!({:HTTP_DEPTH=>"infinity", @jsmith.merge!({:HTTP_DEPTH => 'infinity',
:HTTP_TIMEOUT=>"Infinite",}) :HTTP_TIMEOUT => 'Infinite',})
assert_response 200 assert_response :success
# Verify the response # Verify the response
assert_match "<D:lockscope><D:exclusive/></D:lockscope>", response.body assert_match '<D:lockscope><D:exclusive/></D:lockscope>', response.body
assert_match "<D:locktype><D:write/></D:locktype>", response.body assert_match '<D:locktype><D:write/></D:locktype>', response.body
assert_match "<D:depth>infinity</D:depth>", response.body assert_match '<D:depth>infinity</D:depth>', response.body
# 1.week = 7*24*3600=604800 seconds # 1.week = 7*24*3600=604800 seconds
assert_match "<D:timeout>Second-604800</D:timeout>", response.body assert_match '<D:timeout>Second-604800</D:timeout>', response.body
assert_match /<D:locktoken><D:href>([a-z0-9\-]+)<\/D:href><\/D:locktoken>/, response.body assert_match /<D:locktoken><D:href>([a-z0-9\-]+)<\/D:href><\/D:locktoken>/, response.body
# Extract the locktoken, needed when refreshing the lock # Extract the locktoken, needed when refreshing the lock
response.body.match(/<D:locktoken><D:href>([a-z0-9\-]+)<\/D:href><\/D:locktoken>/) response.body.match(/<D:locktoken><D:href>([a-z0-9\-]+)<\/D:href><\/D:locktoken>/)
@ -101,12 +104,12 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
# Refresh lock # Refresh lock
xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{file.name}",
nil, nil,
@jsmith.merge!({:HTTP_DEPTH=>"infinity", @jsmith.merge!({:HTTP_DEPTH => 'infinity',
:HTTP_TIMEOUT=>"Infinite", :HTTP_TIMEOUT => 'Infinite',
:HTTP_IF => "(#{locktoken})"}) :HTTP_IF => "(#{locktoken})"})
assert_response 200 assert_response :success
# 1.week = 7*24*3600=604800 seconds # 1.week = 7*24*3600=604800 seconds
assert_match "<D:timeout>Second-604800</D:timeout>", response.body assert_match '<D:timeout>Second-604800</D:timeout>', response.body
# Verify the lock in the db # Verify the lock in the db
l = DmsfFile.find_by_id(1).lock.first l = DmsfFile.find_by_id(1).lock.first
assert_equal l.created_at, create_time assert_equal l.created_at, create_time
@ -116,3 +119,4 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end end
end end
end end
end

View File

@ -99,19 +99,20 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
end end
def test_should_create_folder_for_non_admin_user_with_rights 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 @project1.enable_module! :dmsf
@role.add_permission! :folder_manipulation @role.add_permission! :folder_manipulation
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", nil, @jsmith xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", nil, @jsmith
assert_response :success assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1), /\W/)
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", nil, @jsmith xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", nil, @jsmith
assert_response 404 assert_response 404
xml_http_request :mkcol, "/dmsf/webdav/#{project1_uri}/test3", nil, @jsmith xml_http_request :mkcol, "/dmsf/webdav/#{project1_uri}/test3", nil, @jsmith
assert_response :success assert_response :success
end end
end
end
end end

View File

@ -79,19 +79,20 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_to_new_filename_without_folder_manipulation_permission def test_move_to_new_filename_without_folder_manipulation_permission
@role.remove_permission! :folder_manipulation @role.remove_permission! :folder_manipulation
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
new_name = "#{file.name}.moved" new_name = "#{file.name}.moved"
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
assert_no_difference 'file.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, xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response 403 assert_response 403
end end
end end
end
def test_move_to_new_filename_without_folder_manipulation_permission_as_admin def test_move_to_new_filename_without_folder_manipulation_permission_as_admin
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
@role.remove_permission! :folder_manipulation @role.remove_permission! :folder_manipulation
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
new_name = "#{file.name}.moved" new_name = "#{file.name}.moved"
assert_difference 'file.dmsf_file_revisions.count', +1 do assert_difference 'file.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil,
@ -101,6 +102,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert f, "Moved file '#{new_name}' not found in project." assert f, "Moved file '#{new_name}' not found in project."
end end
end end
end
def test_move_non_existent_file def test_move_non_existent_file
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/not_a_file.txt", nil, xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/not_a_file.txt", nil,
@ -121,7 +123,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_to_new_filename def test_move_to_new_filename
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
new_name = "#{file.name}.moved" new_name = "#{file.name}.moved"
assert_difference 'file.dmsf_file_revisions.count', +1 do assert_difference 'file.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil,
@ -131,12 +133,13 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert f, "Moved file '#{new_name}' not found in project." assert f, "Moved file '#{new_name}' not found in project."
end end
end end
end
def test_move_to_new_filename_with_project_names def test_move_to_new_filename_with_project_names
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1), /\W/)
new_name = "#{file.name}.moved" new_name = "#{file.name}.moved"
assert_difference 'file.dmsf_file_revisions.count', +1 do assert_difference 'file.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{file.name}", nil, xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{file.name}", nil,
@ -146,10 +149,11 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert f, "Moved file '#{new_name}' not found in project." assert f, "Moved file '#{new_name}' not found in project."
end end
end end
end
def test_move_zero_sized_to_new_filename def test_move_zero_sized_to_new_filename
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
file = DmsfFile.find_by_id 10 file = DmsfFile.find_by_id 10
new_name = "#{file.name}.moved" new_name = "#{file.name}.moved"
assert_no_difference 'file.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, xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil,
@ -159,6 +163,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert f, "Moved file '#{new_name}' not found in project." assert f, "Moved file '#{new_name}' not found in project."
end end
end end
end
def test_move_to_new_folder def test_move_to_new_folder
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
@ -166,6 +171,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert_kind_of DmsfFile, file assert_kind_of DmsfFile, file
assert_kind_of DmsfFolder, folder assert_kind_of DmsfFolder, folder
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
assert_difference 'file.dmsf_file_revisions.count', +1 do assert_difference 'file.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{file.name}", nil, 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}"}) @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"})
@ -174,11 +180,13 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert_equal folder.id, file2.dmsf_folder_id assert_equal folder.id, file2.dmsf_folder_id
end end
end end
end
def test_move_to_new_folder_with_project_names def test_move_to_new_folder_with_project_names
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
folder = DmsfFolder.find_by_id 1 folder = DmsfFolder.find_by_id 1
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) project1_uri = URI.encode(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1), /\W/)
assert_kind_of DmsfFile, file assert_kind_of DmsfFile, file
assert_kind_of DmsfFolder, folder assert_kind_of DmsfFolder, folder
@ -191,13 +199,14 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert_equal folder.id, file2.dmsf_folder_id assert_equal folder.id, file2.dmsf_folder_id
end end
end end
end
def test_move_zero_sized_to_new_folder def test_move_zero_sized_to_new_folder
file = DmsfFile.find_by_id 10 file = DmsfFile.find_by_id 10
folder = DmsfFolder.find_by_id 1 folder = DmsfFolder.find_by_id 1
assert_kind_of DmsfFile, file assert_kind_of DmsfFile, file
assert_kind_of DmsfFolder, folder assert_kind_of DmsfFolder, folder
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
assert_no_difference 'file.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, 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}"}) @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{folder.title}/#{file.name}"})
@ -206,11 +215,12 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert_equal folder.id, file2.dmsf_folder_id assert_equal folder.id, file2.dmsf_folder_id
end end
end end
end
def test_move_to_existing_filename def test_move_to_existing_filename
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
file2 = DmsfFile.find_by_id 9 file2 = DmsfFile.find_by_id 9
new_name = "#{file2.name}" new_name = "#{file2.name}"
assert_no_difference 'file2.dmsf_file_revisions.count' do assert_no_difference 'file2.dmsf_file_revisions.count' do
assert_no_difference 'file.dmsf_file_revisions.count' do assert_no_difference 'file.dmsf_file_revisions.count' do
@ -220,6 +230,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end end
end end
end end
end
def test_move_when_file_is_locked_by_other def test_move_when_file_is_locked_by_other
file = DmsfFile.find_by_id 1 file = DmsfFile.find_by_id 1
@ -258,6 +269,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert !User.current.anonymous?, 'Current user is anonymous' assert !User.current.anonymous?, 'Current user is anonymous'
assert file.lock!, "File failed to be locked by #{User.current.name}" assert file.lock!, "File failed to be locked by #{User.current.name}"
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
# Move once # Move once
new_name = "#{file.name}.m1" new_name = "#{file.name}.m1"
assert_difference 'file.dmsf_file_revisions.count', +1 do assert_difference 'file.dmsf_file_revisions.count', +1 do
@ -265,7 +277,6 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}) @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response 201 # Created assert_response 201 # Created
end end
# Move twice, make sure that the MsOffice store sequence is not disrupting normal move # Move twice, make sure that the MsOffice store sequence is not disrupting normal move
new_name2 = "#{new_name}.m2" new_name2 = "#{new_name}.m2"
assert_difference 'file.dmsf_file_revisions.count', +1 do assert_difference 'file.dmsf_file_revisions.count', +1 do
@ -274,8 +285,10 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert_response 201 # Created assert_response 201 # Created
end end
end end
end
def test_move_msoffice_save_locked_file def test_move_msoffice_save_locked_file
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
# When some versions of MsOffice saves a file it use the following sequence: # When some versions of MsOffice saves a file it use the following sequence:
# 1. Save changes to a new temporary document, XXX.tmp # 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. # 2. Rename (MOVE) document to YYY.tmp. History is lost here if original document is moved.
@ -290,7 +303,7 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert original_file.lock!, "File failed to be locked by #{User.current.name}" assert original_file.lock!, "File failed to be locked by #{User.current.name}"
# First save while file is locked, should create new revision # First save while file is locked, should create new revision
temp_file_name = "AAAAAAAA.tmp" temp_file_name = 'AAAAAAAA.tmp'
# Make sure that the temp-file does not exist. # Make sure that the temp-file does not exist.
temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}" temp_file = DmsfFile.find_file_by_name @project1, nil, "#{temp_file_name}"
@ -343,5 +356,6 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert_response 201 # Created assert_response 201 # Created
end end
end end
end
end end

View File

@ -48,21 +48,25 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
def test_options_returns_expected_allow_header_for_ro def test_options_returns_expected_allow_header_for_ro
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY'
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_ONLY'
xml_http_request :options, '/dmsf/webdav' xml_http_request :options, '/dmsf/webdav'
assert_response :success assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty' assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Allow'] , 'Allow header is empty or does not exist' assert response.headers['Allow'] , 'Allow header is empty or does not exist'
assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND' assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND'
end end
end
def test_options_returns_expected_allow_header_for_rw def test_options_returns_expected_allow_header_for_rw
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
xml_http_request :options, '/dmsf/webdav' xml_http_request :options, '/dmsf/webdav'
assert_response :success assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty' assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Allow'] , 'Allow header is empty or does not exist' 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' assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK'
end end
end
def test_options_returns_expected_dav_header def test_options_returns_expected_dav_header
xml_http_request :options, '/dmsf/webdav' xml_http_request :options, '/dmsf/webdav'
@ -107,12 +111,14 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
def test_authenticated_options_returns_expected_allow_header def test_authenticated_options_returns_expected_allow_header
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin
assert_response :success assert_response :success
assert !(response.headers.nil? || response.headers.empty?), "Response headers are empty" assert !(response.headers.nil? || response.headers.empty?), "Response headers are empty"
assert response.headers['Allow'], 'Allow header is empty or does not exist' 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' assert_equal response.headers['Allow'], 'OPTIONS,HEAD,GET,PROPFIND,PUT,POST,DELETE,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK'
end end
end
def test_authenticated_options_returns_expected_dav_header def test_authenticated_options_returns_expected_dav_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin
@ -130,32 +136,33 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end end
def test_un_authenticated_options_for_msoffice_user_agent 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 assert_response 405
end end
def test_authenticated_options_for_msoffice_user_agent 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 assert_response :success
end end
def test_un_authenticated_options_for_other_user_agent 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 assert_response 401
end end
def test_authenticated_options_for_other_user_agent 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 assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) 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'})
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => "Other"})
assert_response 404 assert_response 404
xml_http_request :options, "/dmsf/webdav/#{project1_uri}", nil, @admin.merge!({:HTTP_USER_AGENT => "Other"}) xml_http_request :options, "/dmsf/webdav/#{project1_uri}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Other'})
assert_response :success assert_response :success
end end
end
def test_authenticated_options_returns_404_for_non_dmsf_enabled_items def test_authenticated_options_returns_404_for_non_dmsf_enabled_items
@project2.disable_module! :dmsf @project2.disable_module! :dmsf

View File

@ -58,19 +58,17 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end end
def test_propfind_denied_for_anonymous def test_propfind_denied_for_anonymous
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
{:HTTP_DEPTH => "0"} {:HTTP_DEPTH => '0'}
assert_response 401 assert_response 401
# puts "\nPROPFIND response.body:\n#{response.body}" unless response.body.nil?
end end
def test_propfind_depth0_on_root_for_non_member def test_propfind_depth0_on_root_for_non_member
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
@jsmith.merge!({:HTTP_DEPTH => "0"}) @jsmith.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match '<D:displayname>/</D:displayname>', response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
@ -78,12 +76,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end end
def test_propfind_depth1_on_root_for_non_member def test_propfind_depth1_on_root_for_non_member
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
@jsmith.merge!({:HTTP_DEPTH => "1"}) @jsmith.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match '<D:displayname>/</D:displayname>', response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
@ -91,12 +89,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end end
def test_propfind_depth0_on_root_for_admin def test_propfind_depth0_on_root_for_admin
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
@admin.merge!({:HTTP_DEPTH => "0"}) @admin.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match '<D:displayname>/</D:displayname>', response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
@ -104,12 +102,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end end
def test_propfind_depth1_on_root_for_admin def test_propfind_depth1_on_root_for_admin
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match 'D:displayname>/</D:displayname>', response.body
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
@ -118,34 +116,33 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth1_on_root_for_admin_with_project_names def test_propfind_depth1_on_root_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
xml_http_request :propfind, "/dmsf/webdav/", nil, if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
@admin.merge!({:HTTP_DEPTH => "1"}) xml_http_request :propfind, '/dmsf/webdav/', nil,
@admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match '<D:displayname>/</D:displayname>', response.body
# project.identifier should not match when using project names # project.identifier should not match when using project names
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
# but the project name should match # but the project name should match
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
end end
end
def test_propfind_depth0_on_project1_for_non_member def test_propfind_depth0_on_project1_for_non_member
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@jsmith.merge!({:HTTP_DEPTH => "0"}) @jsmith.merge!({:HTTP_DEPTH => '0'})
assert_response 404 assert_response 404
end end
def test_propfind_depth0_on_project1_for_admin def test_propfind_depth0_on_project1_for_admin
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "0"}) @admin.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_no_match "<D:displayname>/</D:displayname>", response.body assert_no_match '<D:displayname>/</D:displayname>', response.body
# Project # Project
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
@ -165,29 +162,29 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth0_on_project1_for_admin_with_project_names def test_propfind_depth0_on_project1_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "0"}) @admin.merge!({:HTTP_DEPTH => '0'})
assert_response 404 assert_response 404
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil,
@admin.merge!({:HTTP_DEPTH => "0"}) @admin.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_no_match "<D:displayname>/</D:displayname>", response.body assert_no_match '<D:displayname>/</D:displayname>', response.body
# Project # Project
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
end end
end
def test_propfind_depth1_on_project1_for_admin def test_propfind_depth1_on_project1_for_admin
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_no_match "<D:displayname>/</D:displayname>", response.body assert_no_match '<D:displayname>/</D:displayname>', response.body
# Project # Project
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body assert_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
@ -207,17 +204,17 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth1_on_project1_for_admin_with_project_names def test_propfind_depth1_on_project1_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
assert_response 404 assert_response 404
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_no_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_no_match "<D:displayname>/</D:displayname>", response.body assert_no_match '<D:displayname>/</D:displayname>', response.body
# Project # Project
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
@ -244,20 +241,21 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/#{@file10.name}</D:href>", response.body
assert_match "<D:displayname>#{@file10.name}</D:displayname>", response.body assert_match "<D:displayname>#{@file10.name}</D:displayname>", response.body
end end
end
def test_propfind_depth1_on_root_for_admin_with_project_names_and_cache def test_propfind_depth1_on_root_for_admin_with_project_names_and_cache
RedmineDmsf::Webdav::Cache.init_testcache RedmineDmsf::Webdav::Cache.init_testcache
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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. # PROPSTATS for / and project1 should be cached.
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +2 do assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +2 do
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
end end
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match '<D:displayname>/</D:displayname>', response.body
# project.identifier should not match when using project names # project.identifier should not match when using project names
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
@ -268,20 +266,20 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
# Rename project1 # Rename project1
@project1.name = "Online Cookbook" @project1.name = 'Online Cookbook'
@project1.save! @project1.save!
project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_new_uri = URI.encode(project1_new_name, /\W/) project1_new_uri = URI.encode(project1_new_name, /\W/)
# PROPSTATS for / is already cached, but a new PROPSTATS should be cached for project1 # 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 assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
xml_http_request :propfind, "/dmsf/webdav/", nil, xml_http_request :propfind, '/dmsf/webdav/', nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
end end
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/</D:href>", response.body assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match "<D:displayname>/</D:displayname>", response.body assert_match '<D:displayname>/</D:displayname>', response.body
# project.identifier should not match when using project names # project.identifier should not match when using project names
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
@ -295,13 +293,14 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</D:href>", response.body assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</D:href>", response.body
assert_match "<D:displayname>#{project1_new_name}</D:displayname>", response.body assert_match "<D:displayname>#{project1_new_name}</D:displayname>", response.body
end end
end
def test_propfind_depth0_on_project1_for_admin_with_cache def test_propfind_depth0_on_project1_for_admin_with_cache
RedmineDmsf::Webdav::Cache.init_testcache RedmineDmsf::Webdav::Cache.init_testcache
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +1 do
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "0"}) @admin.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
end end
@ -316,7 +315,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "0"}) @admin.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
end end
assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body 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 assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +7 do
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
end end
@ -352,7 +351,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
RedmineDmsf::Webdav::Cache.write("PROPFIND/#{@project1.id}", "Cached PROPFIND/#{@project1.id}") RedmineDmsf::Webdav::Cache.write("PROPFIND/#{@project1.id}", "Cached PROPFIND/#{@project1.id}")
assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => "1"}) @admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus assert_response 207 # MultiStatus
assert_match "Cached PROPFIND/#{@project1.id}", response.body assert_match "Cached PROPFIND/#{@project1.id}", response.body
end end

View File

@ -94,20 +94,22 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
end end
def test_put_as_admin_granted_on_dmsf_enabled_project 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}) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text})
assert_response :success # 201 Created assert_response :success # 201 Created
# Lets check for our file # Lets check for our file
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
assert file, 'Check for files existance' assert file, 'Check for files existance'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) 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}) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text})
assert_response 409 assert_response 409
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @admin.merge!({:content_type => :text}) put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @admin.merge!({:content_type => :text})
assert_response :success # 201 Created assert_response :success # 201 Created
end end
end
end
def test_put_failed_as_jsmith_on_non_dmsf_enabled_project def test_put_failed_as_jsmith_on_non_dmsf_enabled_project
put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
@ -147,19 +149,22 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf # Flag module enabled @project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders @role.add_permission! :view_dmsf_folders
@role.add_permission! :file_manipulation @role.add_permission! :file_manipulation
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}) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
assert_response :success # 201 - Now we have permissions assert_response :success # 201 - Now we have permissions
# Lets check for our file # Lets check for our file
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
assert file, 'File test-1234 was not found in projects dmsf folder.' assert file, 'File test-1234 was not found in projects dmsf folder.'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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/) 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}) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
assert_response 409 assert_response 409
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text}) put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
assert_response :success # 201 - Now we have permissions assert_response :success # 201 - Now we have permissions
end end
end
end
def test_put_writes_revision_successfully_for_unlocked_file def test_put_writes_revision_successfully_for_unlocked_file
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE' if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'