Unit tests

This commit is contained in:
Karel Picman 2017-06-20 09:19:50 +02:00
parent b5d9a0dd94
commit 668a738d7d
13 changed files with 187 additions and 222 deletions

View File

@ -718,7 +718,6 @@ class DmsfController < ApplicationController
@url_links = @folder.url_links.visible
@locked_for_user = @folder.locked_for_user?
else
Rails.logger.info ">>> #{@project.dmsf_folders.visible.to_sql}"
@subfolders = @project.dmsf_folders.visible.to_a
@files = @project.dmsf_files.visible
@dir_links = @project.folder_links.visible

View File

@ -110,7 +110,10 @@ class DmsfUploadController < ApplicationController
uploaded_files = attachments.select { |key, value| key == 'uploaded_file'}
uploaded_files.each_value do |uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, uploaded_file)
uploaded_file[:disk_filename] = upload.disk_filename if upload
if upload
uploaded_file[:disk_filename] = upload.disk_filename
uploaded_file[:tempfile_path] = upload.tempfile_path
end
end
commit_files_internal uploaded_files
end

View File

@ -119,7 +119,7 @@ class DmsfFile < ActiveRecord::Base
rescue Exception => e
Rails.logger.error e.message
end
@@storage_path = path
@@storage_path = Pathname.new(path)
end
def self.find_file_by_name(project, folder, name)

View File

@ -164,20 +164,12 @@ module RedmineDmsf
# Return instance of Project based on the path
def project
unless @project
use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
pinfo = @path.split('/').drop(1)
if pinfo.length > 0
if use_project_names
unless pinfo.first.match('(\[([0-9]+)\])$').nil?
pid = $2
begin
@project = Project.find_by_id(pid)
rescue Exception => e
Rails.logger.error e.message
end
end
if @project.nil?
Rails.logger.warn {"WebDAV ERROR: No project found on path '#{@path}'"}
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
if pinfo.first =~ /(\d)$/
@project = Project.find_by_id($1)
Rails.logger.warn {"WebDAV ERROR: No project found on path '#{@path}'"} unless @project
end
else
begin

View File

@ -107,7 +107,7 @@ module RedmineDmsf
raise BadRequest
end
end
if depth != 0
# Only use cache for requests with a depth>0, depth=0 responses are already fast.
pinfo = resource.path.split('/').drop(1)
@ -123,7 +123,7 @@ module RedmineDmsf
end
end
end
if propfind_key.nil?
# This PROPFIND is never cached so always create a new response
create_propfind_response(properties)
@ -131,8 +131,8 @@ module RedmineDmsf
response.body = RedmineDmsf::Webdav::Cache.read(propfind_key)
if !response.body.nil?
# Found cached PROPFIND, fill in Content-Type and Content-Length
response["Content-Type"] = 'text/xml; charset="utf-8"'
response["Content-Length"] = response.body.size.to_s
response['Content-Type'] = 'text/xml; charset="utf-8"'
response['Content-Length'] = response.body.size.to_s
else
# No cached PROPFIND found
# Remove .invalid entry for this propfind since we are now creating a new valid propfind
@ -223,7 +223,7 @@ module RedmineDmsf
xml2.response do
unless(resource.propstat_relative_path)
xml2.href "#{scheme}://#{host}:#{port}#{url_format(resource)}"
xml2.href "#{scheme}://#{host}:#{port}#{url_format(resource)}"
else
xml2.href url_format(resource)
end

View File

@ -72,7 +72,7 @@ module RedmineDmsf
# - 2012-06-15: Only if you're allowed to browse the project
# - 2012-06-18: Issue #5, ensure item is only listed if project is enabled for dmsf
def exist?
return project && project.module_enabled?('dmsf') && (folder || file) &&
project && project.module_enabled?('dmsf') && (folder || file) &&
(User.current.admin? || User.current.allowed_to?(:view_dmsf_folders, project))
end
@ -96,13 +96,11 @@ module RedmineDmsf
@folder
end
# Check if current entity exists as a file (DmsfFile), and returns corresponding object if found (nil otherwise)
# Check if the current entity exists as a file (DmsfFile), and returns corresponding object if found (nil otherwise)
def file
unless @file
return nil unless project # Again if entity project is nil, it cannot exist in context of this object
@file = DmsfFile.visible.joins('JOIN dmsf_file_revisions ON dmsf_files.id = dmsf_file_revisions.dmsf_file_id').where(
["dmsf_files.project_id = ? AND dmsf_files.dmsf_folder_id #{parent.folder ? '=' : 'IS'} ? AND dmsf_file_revisions.name = ?",
project.id, parent.folder ? parent.folder.id : nil, basename]).first
@file = DmsfFile.find_file_by_name(project, parent.folder, basename)
end
@file
end
@ -238,7 +236,7 @@ module RedmineDmsf
# Behavioural differences between collection and single entity
# TODO: Support overwrite between both types of entity, and implement better checking
def move(dest, overwrite)
# All of this should carry accrross the ResourceProxy frontend, we ensure this to
# All of this should carry across the ResourceProxy frontend, we ensure this to
# prevent unexpected errors
resource = dest.is_a?(ResourceProxy) ? dest.resource : dest

View File

@ -111,8 +111,7 @@ class DmsfConvertDocuments
document.attachments.each do |attachment|
begin
file = DmsfFile.new
file.container_type = 'Project'
file.container_id = project.id
file.project_id = project.id
file.dmsf_folder = folder
file.name = attachment.filename

View File

@ -45,12 +45,12 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
User.current = nil
end
def test_truth
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder6
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file1
assert_kind_of Role, @role
end
@ -58,7 +58,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
delete '/dmsf/webdav'
assert_response 401
end
def test_not_authenticated_project
delete "/dmsf/webdav/#{@project1.identifier}"
assert_response 401
@ -68,32 +68,32 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
delete '/dmsf/webdav', nil, credentials('admin', 'badpassword')
assert_response 401
end
def test_failed_authentication
delete "/dmsf/webdav/#{@project1.identifier}", nil, credentials('admin', 'badpassword')
assert_response 401
end
def test_root_folder
def test_root_folder
delete '/dmsf/webdav', nil, @admin
assert_response :error # 501
end
def test_delete_not_empty_folder
def test_delete_not_empty_folder
put "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", nil, @admin
assert_response :forbidden
end
def test_not_existed_project
def test_not_existed_project
delete '/dmsf/webdav/not_a_project/file.txt', nil, @admin
assert_response :missing # Item does not exist.
end
def test_dmsf_not_enabled
def test_dmsf_not_enabled
delete "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @jsmith
assert_response :missing # Item does not exist, as project is not enabled.
end
def test_delete_when_ro
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY'
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @admin
@ -109,14 +109,14 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
end
def test_unathorized_user
def test_unathorized_user
@project1.enable_module! :dmsf # Flag module enabled
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
assert_response :missing # Without folder_view permission, he will not even be aware of its existence.
@file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
end
def test_unathorized_user_forbidden
if Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] == 'WEBDAV_READ_WRITE'
@project1.enable_module! :dmsf # Flag module enabled
@ -128,9 +128,9 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
end
def test_view_folder_not_allowed
def test_view_folder_not_allowed
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :file_manipulation
@role.add_permission! :file_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", nil, @jsmith
assert_response :missing # Without folder_view permission, he will not even be aware of its existence.
@folder1.reload
@ -227,21 +227,21 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_locked_folder
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@role.add_permission! :folder_manipulation
@folder6.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith
assert_response 423 # Locked
assert_response 423 # Locked
@folder6.reload
assert !@folder6.deleted?, "Folder #{@folder6.title} is expected to exist"
assert !@folder6.deleted?, "Folder #{@folder6.title} is expected to exist"
end
def test_locked_file
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
@file1.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
assert_response 423 # Locked
assert_response 423 # Locked
@file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
end
@ -252,10 +252,10 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
@file1.copy_to_filename(@project1, nil, "delete_test.tmp")
delete "/dmsf/webdav/#{@project1.identifier}/delete_test.tmp", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
assert_response :success
# The file should be destroyed
assert_nil DmsfFile.find_file_by_name(@project1, nil, 'delete_test.tmp')
assert_nil DmsfFile.visible.find_by_id @file1.id
end
end

View File

@ -39,14 +39,14 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
DmsfFile.storage_path = File.expand_path '../../../fixtures/files', __FILE__
User.current = nil
end
def test_truth
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Role, @role
assert_kind_of DmsfFolder, @folder6
end
def test_mkcol_requires_authentication
xml_http_request :mkcol, '/dmsf/webdav/test1'
assert_response 401

View File

@ -33,12 +33,15 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
DmsfFile.storage_path = File.expand_path("./dmsf_test-#{timestamp}", DmsfHelper.temp_dir)
Dir.mkdir(DmsfFile.storage_path) unless File.directory?(DmsfFile.storage_path)
# Copy the physical files to the temporary storage
files = File.expand_path('../../../fixtures/files/.', __FILE__)
files = File.expand_path('../../../fixtures/files', __FILE__) + '/.'
FileUtils.cp_r files, DmsfFile.storage_path
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find_by_id 1
@file1 = DmsfFile.find_by_id 1
@file10 = DmsfFile.find_by_id 10
@folder1 = DmsfFolder.find_by_id 1
# Fix permissions for jsmith's role
@role = Role.find 1 #
@ -64,39 +67,38 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_truth
assert_kind_of Project, @project1
assert_kind_of Role, @role
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file10
assert_kind_of DmsfFolder, @folder1
end
def test_move_denied_for_anonymous
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,
def test_move_denied_for_anonymous
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
{:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}
assert_response 401
end
end
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"
new_name = "#{@file1.name}.moved"
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,
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.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
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,
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.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}"
@ -104,30 +106,27 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end
end
end
def test_move_non_existent_file
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/not_a_file.txt", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/moved_file.txt"})
assert_response 404 # NotFound
end
def test_move_wrong_destination
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,
def test_move_wrong_destination
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.wrong-url.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response 502 # BadGateway
end
end
def test_move_to_new_filename
file = DmsfFile.find_by_id 1
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,
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.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}"
@ -137,13 +136,12 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
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
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
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,
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{@file1.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}"
@ -151,13 +149,12 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end
end
end
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
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,
new_name = "#{@file10.name}.moved"
assert_no_difference '@file10.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file10.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}"
@ -165,122 +162,100 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end
end
end
def test_move_to_new_folder
file = DmsfFile.find_by_id 1
folder = DmsfFolder.find_by_id 1
assert_kind_of DmsfFile, file
assert_kind_of DmsfFolder, folder
def test_move_to_new_folder
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_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/#{@file1.name}"})
assert_response 201 # Created
file2 = DmsfFile.find_by_id 1
assert_equal folder.id, file2.dmsf_folder_id
@file1.reload
assert_equal @folder1.id, @file1.dmsf_folder_id
end
end
end
def test_move_to_new_folder_with_project_names
file = DmsfFile.find_by_id 1
folder = DmsfFolder.find_by_id 1
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
assert_kind_of DmsfFile, file
assert_kind_of DmsfFolder, folder
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{@folder1.title}/#{@file1.name}"})
assert_response 201 # Created
@file1.reload
assert_equal @folder1.id, @file1.dmsf_folder_id
end
end
end
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
def test_move_zero_sized_to_new_folder
file = DmsfFile.find_by_id 10
folder = DmsfFolder.find_by_id 1
assert_kind_of DmsfFile, file
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
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_no_difference '@file10.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/#{@file10.name}"})
assert_response 201 # Created
file2 = DmsfFile.find_by_id 10
assert_equal folder.id, file2.dmsf_folder_id
@file10.reload
assert_equal @folder1.id, @file10.dmsf_folder_id
end
end
end
def test_move_to_existing_filename
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,
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response 405 # MethodNotAllowed
end
end
end
end
def test_move_when_file_is_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}"
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,
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response 423 # Locked
end
end
def test_move_when_file_is_locked_by_other_and_user_is_admin
file = DmsfFile.find_by_id 1
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}"
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
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,
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response 423 # Locked
end
end
def test_move_when_file_is_locked_by_user
file = DmsfFile.find_by_id 1
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}"
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
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,
new_name = "#{@file1.name}.m1"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.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
assert_difference '@file1.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
@ -290,70 +265,67 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
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 save a file they 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.
# 2. Rename (MOVE) document to YYY.tmp. History is lost here if the original document is moved.
# 3. Rename (MOVE) XXX.tmp to document's name. XXX.tmp must be merged to the original document otherwise the history is lost.
# 4. Delete YYY.tmp.
# Verify that steps 2 and 3 works.
original_file = DmsfFile.find_by_id 1
# Verify that steps 2 and 3 work.
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}"
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
# First save while file is locked, should create new revision
# First save while the 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,
# Move the original file to AAAAAAAA.tmp. The original file should not changed but a new file should be created.
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.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
# Verify that a new file 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
assert_not_equal temp_file.id, @file1.id
# Move a temporary file (use AAAAAAAA.tmp) to the original file.
assert_difference 'original_file.dmsf_file_revisions.count', +1 do
assert_difference '@file1.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}"})
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@file1.name}"})
assert_response 201 # Created
end
# Second save while file is locked, should NOT create new revision
temp_file_name = "BBBBBBBB.tmp"
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,
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.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
# Verify that a new file 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
assert_not_equal temp_file.id, @file1.id
# Move a temporary file (use BBBBBBBB.tmp) to the original file.
assert_no_difference 'original_file.dmsf_file_revisions.count' do
assert_no_difference '@file1.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}"})
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@file1.name}"})
assert_response 201 # Created
end
end

View File

@ -46,7 +46,8 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
# Temporarily enable project names to generate names for project1
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
@project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
@project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
@project1_uri = Addressable::URI.escape(@project1_name)
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
RedmineDmsf::Webdav::Cache.init_nullcache
end
@ -55,13 +56,13 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_kind_of Project, @project1
assert_kind_of Project, @project2
end
def test_propfind_denied_for_anonymous
xml_http_request :propfind, '/dmsf/webdav/', nil,
{:HTTP_DEPTH => '0'}
assert_response 401
end
def test_propfind_depth0_on_root_for_non_member
xml_http_request :propfind, '/dmsf/webdav/', nil,
@jsmith.merge!({:HTTP_DEPTH => '0'})
@ -77,7 +78,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth1_on_root_for_non_member
xml_http_request :propfind, '/dmsf/webdav/', nil,
@jsmith.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match '<D:displayname>/</D:displayname>', response.body
@ -86,11 +87,11 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project2.identifier}</D:displayname>", response.body
end
def test_propfind_depth0_on_root_for_admin
xml_http_request :propfind, '/dmsf/webdav/', nil,
@admin.merge!({:HTTP_DEPTH => '0'})
assert_response 207 # MultiStatus
assert_match '<D:href>http://www.example.com:80/dmsf/webdav/</D:href>', response.body
assert_match '<D:displayname>/</D:displayname>', response.body
@ -112,7 +113,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project2.identifier}/</D:href>", response.body
assert_no_match "<D:displayname>#{@project2.identifier}</D:displayname>", response.body
end
def test_propfind_depth1_on_root_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
@ -126,10 +127,10 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_no_match "<D:displayname>#{@project1.identifier}</D:displayname>", response.body
# 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:displayname>#{@project1_uri}</D:displayname>", response.body
assert_match "<D:displayname>#{@project1_name}</D:displayname>", 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'})
@ -174,7 +175,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
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_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
assert_match "<D:displayname>#{@project1_uri}</D:displayname>", response.body
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
end
end
@ -200,7 +201,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", response.body
assert_match "<D:displayname>#{@file10.name}</D:displayname>", response.body
end
def test_propfind_depth1_on_project1_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
if Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] == true
@ -219,7 +220,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
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_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</D:href>", response.body
assert_match "<D:displayname>#{@project1_uri}</D:displayname>", response.body
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
# Folders
assert_no_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/</D:href>", response.body
@ -262,12 +263,13 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
# 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:displayname>#{@project1_uri}</D:displayname>", response.body
assert_match "<D:displayname>#{@project1_name}</D:displayname>", response.body
# Rename project1
@project1.name = 'Online Cookbook'
@project1.save!
project1_new_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_new_uri = Addressable::URI.escape(project1_new_name)
# 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
@ -289,28 +291,28 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
# but new project name should match
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</D:href>", response.body
assert_match "<D:displayname>#{project1_new_uri}</D:displayname>", response.body
assert_match "<D:displayname>#{project1_new_name}</D:displayname>", response.body
end
end
def test_propfind_depth0_on_project1_for_admin_with_cache
RedmineDmsf::Webdav::Cache.init_testcache
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'})
assert_response 207 # MultiStatus
end
# Response should be correct
# Project
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", response.body
# A new PROPSTATS entry should have been created for project1
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@project1.identifier}")
# Replace the PROPSTATS cache entry and make sure that it is used
RedmineDmsf::Webdav::Cache.write("PROPSTATS/#{@project1.identifier}", "Cached PROPSTATS/#{@project1.identifier}")
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'})
@ -318,16 +320,16 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end
assert_match "Cached PROPSTATS/#{@project1.identifier}", response.body
end
def test_propfind_depth1_on_project1_for_admin_with_cache
RedmineDmsf::Webdav::Cache.init_testcache
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +9 do
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +10 do
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus
end
# Project, a new PROPFIND and PROPSTATS should have been created for project1
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>", RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}")
@ -344,7 +346,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file9.name}</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", response.body
assert_match "<D:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/#{@file10.name}</D:href>", RedmineDmsf::Webdav::Cache.read("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
# Replace PROPFIND and verify that cached entry is used.
RedmineDmsf::Webdav::Cache.write("PROPFIND/#{@project1.id}", "Cached PROPFIND/#{@project1.id}")
assert_no_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count' do
@ -353,7 +355,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_response 207 # MultiStatus
assert_match "Cached PROPFIND/#{@project1.id}", response.body
end
# Delete PROPFIND, replace PROPSTATS for one entry and verify that it is used when creating the response and new cache
RedmineDmsf::Webdav::Cache.invalidate_item("PROPFIND/#{@project1.id}")
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
@ -369,19 +371,19 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert_match "Cached PROPSTATS/#{@project1.identifier}", RedmineDmsf::Webdav::Cache.read("PROPFIND/#{@project1.id}")
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
end
def test_propfind_depth1_on_project1_for_admin_with_cache_and_locks
RedmineDmsf::Webdav::Cache.init_testcache
log_user 'admin', 'admin' # login as admin
assert !User.current.anonymous?, 'Current user is anonymous'
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +9 do
assert_difference 'RedmineDmsf::Webdav::Cache.cache.instance_variable_get(:@data).count', +10 do
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_DEPTH => '1'})
assert_response 207 # MultiStatus
end
# Verify that everything exists in the cache as it should
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@project1.identifier}")
@ -401,7 +403,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert !RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
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 => '1'})
@ -410,7 +412,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
# Unlock a file and verify that the PROPSTATS for the file and the PROPFIND were deleted
assert @file1.unlock!, "File failed to be unlocked by #{User.current.name}"
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
@ -421,7 +423,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert !RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
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 => '1'})
@ -430,7 +432,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
# Lock a folder and verify that the PROPSTATS for the file and the PROPFIND were deleted
assert @folder1.lock!, "File failed to be locked by #{User.current.name}"
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
@ -441,7 +443,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
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 => '1'})
@ -450,7 +452,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}.invalid")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@project1.identifier}/#{@folder1.title}")
# Unlock a folder and verify that the PROPSTATS for the file and the PROPFIND were deleted
assert @folder1.unlock!, "File failed to be unlocked by #{User.current.name}"
assert !RedmineDmsf::Webdav::Cache.exist?("PROPFIND/#{@project1.id}")
@ -461,7 +463,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file1.id}-#{@file1.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file9.id}-#{@file9.last_revision.id}")
assert RedmineDmsf::Webdav::Cache.exist?("PROPSTATS/#{@file10.id}-#{@file10.last_revision.id}")
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 => '1'})

View File

@ -54,13 +54,13 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
# The role has got permissions
User.current = @manager
assert_equal 6, DmsfFolder.where(:project_id => 1).count
assert_equal 5, DmsfFolder.visible.where(:project_id => 1).count
assert_equal 6, DmsfFolder.visible.where(:project_id => 1).count
# The user has got permissions
User.current = @developer
assert_equal 5, DmsfFolder.visible.where(:project_id => 1).count
assert_equal 6, DmsfFolder.visible.where(:project_id => 1).count
# Hasn't got permissions for @folder7
@folder7.dmsf_folder_permissions.where(:object_type => 'User').delete_all
assert_equal 4, DmsfFolder.visible.where(:project_id => 1).count
assert_equal 5, DmsfFolder.visible.where(:project_id => 1).count
end
def test_permissions

View File

@ -67,8 +67,8 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest
def test_dmsf_count
hash = @project1.dmsf_count
assert_equal 8, hash[:files]
assert_equal 6, hash[:folders]
assert_equal 9, hash[:files]
assert_equal 7, hash[:folders]
end
def test_copy_approval_workflows
@ -80,7 +80,7 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest
def test_copy_dmsf
assert_equal 4, @project1.dmsf_files.visible.count
assert_equal 3, @project1.dmsf_folders.visible.count
assert_equal 4, @project1.dmsf_folders.visible.count
assert_equal 1, @project1.file_links.visible.count
assert_equal 1, @project1.folder_links.visible.count
assert_equal 1, @project1.url_links.visible.count
@ -91,7 +91,7 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest
assert_equal 0, @project3.url_links.visible.count
@project3.copy_dmsf(@project1)
assert_equal 4, @project3.dmsf_files.visible.count
assert_equal 3, @project3.dmsf_folders.count
assert_equal 4, @project3.dmsf_folders.count
assert_equal 1, @project3.file_links.visible.count
assert_equal 1, @project3.folder_links.visible.count
assert_equal 1, @project3.url_links.visible.count