Zeitwerk
This commit is contained in:
parent
a29574e92a
commit
c7fd1c0a02
@ -192,9 +192,9 @@ class DmsfController < ApplicationController
|
||||
else
|
||||
download_entries @selected_folders, @selected_files
|
||||
end
|
||||
rescue RedmineDmsf::Errors::DmsfFileNotFoundError
|
||||
rescue DmsfFileNotFoundError
|
||||
render_404
|
||||
rescue RedmineDmsf::Errors::DmsfAccessError
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
rescue StandardError => e
|
||||
flash[:error] = e.message
|
||||
@ -497,16 +497,14 @@ class DmsfController < ApplicationController
|
||||
end
|
||||
|
||||
def email_entries(selected_folders, selected_files)
|
||||
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:email_documents, @project)
|
||||
raise DmsfAccessError unless User.current.allowed_to?(:email_documents, @project)
|
||||
|
||||
zip = Zip.new
|
||||
zip_entries(zip, selected_folders, selected_files)
|
||||
zipped_content = zip.finish
|
||||
|
||||
max_filesize = RedmineDmsf.dmsf_max_email_filesize
|
||||
if max_filesize.positive? && File.size(zipped_content) > max_filesize * 1_048_576
|
||||
raise RedmineDmsf::Errors::DmsfEmailMaxFileSizeError
|
||||
end
|
||||
raise DmsfEmailMaxFileSizeError if max_filesize.positive? && File.size(zipped_content) > max_filesize * 1_048_576
|
||||
|
||||
zip.dmsf_files.each do |f|
|
||||
# Action
|
||||
@ -569,23 +567,22 @@ class DmsfController < ApplicationController
|
||||
member = Member.find_by(user_id: User.current.id, project_id: @project.id)
|
||||
selected_folders.each do |selected_folder_id|
|
||||
folder = DmsfFolder.visible.find_by(id: selected_folder_id)
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless folder
|
||||
raise DmsfFileNotFoundError unless folder
|
||||
|
||||
zip.add_dmsf_folder folder, member, folder&.dmsf_folder&.dmsf_path_str
|
||||
end
|
||||
selected_files.each do |selected_file_id|
|
||||
file = DmsfFile.visible.find_by(id: selected_file_id)
|
||||
unless file&.last_revision && File.exist?(file.last_revision&.disk_file)
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError
|
||||
end
|
||||
raise DmsfFileNotFoundError unless file&.last_revision && File.exist?(file.last_revision&.disk_file)
|
||||
|
||||
unless (file.project == @project) || User.current.allowed_to?(:view_dmsf_files, file.project)
|
||||
raise RedmineDmsf::Errors::DmsfAccessError
|
||||
raise DmsfAccessError
|
||||
end
|
||||
|
||||
zip.add_dmsf_file file, member, file.dmsf_folder&.dmsf_path_str
|
||||
end
|
||||
max_files = RedmineDmsf.dmsf_max_file_download
|
||||
raise RedmineDmsf::Errors::DmsfZipMaxFilesError if max_files.positive? && zip.dmsf_files.length > max_files
|
||||
raise DmsfZipMaxFilesError if max_files.positive? && zip.dmsf_files.length > max_files
|
||||
|
||||
zip
|
||||
end
|
||||
@ -595,19 +592,19 @@ class DmsfController < ApplicationController
|
||||
selected_folders.each do |id|
|
||||
folder = DmsfFolder.find_by(id: id)
|
||||
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless folder
|
||||
raise DmsfFileNotFoundError unless folder
|
||||
end
|
||||
# Files
|
||||
selected_files.each do |id|
|
||||
file = DmsfFile.find_by(id: id)
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless file
|
||||
raise DmsfFileNotFoundError unless file
|
||||
|
||||
flash[:error] = file.errors.full_messages.to_sentence unless file.restore
|
||||
end
|
||||
# Links
|
||||
selected_links.each do |id|
|
||||
link = DmsfLink.find_by(id: id)
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless link
|
||||
raise DmsfFileNotFoundError unless link
|
||||
|
||||
flash[:error] = link.errors.full_messages.to_sentence unless link.restore
|
||||
end
|
||||
@ -616,20 +613,20 @@ class DmsfController < ApplicationController
|
||||
def delete_entries(selected_folders, selected_files, selected_links, commit)
|
||||
# Folders
|
||||
selected_folders.each do |id|
|
||||
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project)
|
||||
raise DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project)
|
||||
|
||||
folder = DmsfFolder.find_by(id: id)
|
||||
if folder
|
||||
raise StandardError, folder.errors.full_messages.to_sentence unless folder.delete(commit: commit)
|
||||
elsif !commit
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError
|
||||
raise DmsfFileNotFoundError
|
||||
end
|
||||
end
|
||||
# Files
|
||||
deleted_files = []
|
||||
not_deleted_files = []
|
||||
if selected_files.any?
|
||||
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:file_delete, @project)
|
||||
raise DmsfAccessError unless User.current.allowed_to?(:file_delete, @project)
|
||||
|
||||
selected_files.each do |id|
|
||||
file = DmsfFile.find_by(id: id)
|
||||
@ -640,7 +637,7 @@ class DmsfController < ApplicationController
|
||||
not_deleted_files << file
|
||||
end
|
||||
elsif !commit
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError
|
||||
raise DmsfFileNotFoundError
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -665,7 +662,7 @@ class DmsfController < ApplicationController
|
||||
end
|
||||
# Links
|
||||
if selected_links.any?
|
||||
raise RedmineDmsf::Errors::DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project)
|
||||
raise DmsfAccessError unless User.current.allowed_to?(:folder_manipulation, @project)
|
||||
|
||||
selected_links.each do |id|
|
||||
link = DmsfLink.find_by(id: id)
|
||||
@ -699,11 +696,10 @@ class DmsfController < ApplicationController
|
||||
|
||||
def move_entries(selected_folders, selected_files, selected_links)
|
||||
# Permissions
|
||||
if selected_folders.any? && !User.current.allowed_to?(:folder_manipulation, @project)
|
||||
raise RedmineDmsf::Errors::DmsfAccessError
|
||||
end
|
||||
raise DmsfAccessError if selected_folders.any? && !User.current.allowed_to?(:folder_manipulation, @project)
|
||||
|
||||
if (selected_folders.any? || selected_links.any?) && !User.current.allowed_to?(:file_manipulation, @project)
|
||||
raise RedmineDmsf::Errors::DmsfAccessError
|
||||
raise DmsfAccessError
|
||||
end
|
||||
|
||||
# Folders
|
||||
@ -826,27 +822,27 @@ class DmsfController < ApplicationController
|
||||
links = DmsfLink.where(id: @selected_links).to_a
|
||||
(folders + files + links).each do |entry|
|
||||
if entry.dmsf_folder
|
||||
raise RedmineDmsf::Errors::DmsfParentError if entry.dmsf_folder == @target_folder || entry == @target_folder
|
||||
raise DmsfParentError if entry.dmsf_folder == @target_folder || entry == @target_folder
|
||||
elsif @target_folder.nil?
|
||||
raise RedmineDmsf::Errors::DmsfParentError if entry.project == @target_project
|
||||
raise DmsfParentError if entry.project == @target_project
|
||||
end
|
||||
end
|
||||
# Prevent recursion
|
||||
if params[:move_entries].present?
|
||||
folders.each do |entry|
|
||||
raise RedmineDmsf::Errors::DmsfParentError if entry.any_child?(@target_folder)
|
||||
raise DmsfParentError if entry.any_child?(@target_folder)
|
||||
end
|
||||
end
|
||||
# Check permissions
|
||||
if (@target_folder && (@target_folder.locked_for_user? ||
|
||||
!DmsfFolder.permissions?(@target_folder, allow_system: false))) ||
|
||||
!@target_project.allows_to?(:folder_manipulation)
|
||||
raise RedmineDmsf::Errors::DmsfAccessError
|
||||
raise DmsfAccessError
|
||||
end
|
||||
rescue RedmineDmsf::Errors::DmsfParentError
|
||||
rescue DmsfParentError
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_back_or_default dmsf_folder_path(id: @project, folder_id: @folder)
|
||||
rescue RedmineDmsf::Errors::DmsfAccessError
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
@ -49,7 +49,7 @@ class DmsfFilesController < ApplicationController
|
||||
@revision = @file.last_revision
|
||||
else
|
||||
@revision = DmsfFileRevision.find(params[:download].to_i)
|
||||
raise RedmineDmsf::Errors::DmsfAccessError if @revision.dmsf_file != @file
|
||||
raise DmsfAccessError if @revision.dmsf_file != @file
|
||||
end
|
||||
|
||||
check_project @revision.dmsf_file
|
||||
@ -93,7 +93,7 @@ class DmsfFilesController < ApplicationController
|
||||
type: @revision.detect_content_type,
|
||||
disposition: params[:disposition].presence || @revision.dmsf_file.disposition
|
||||
end
|
||||
rescue RedmineDmsf::Errors::DmsfAccessError => e
|
||||
rescue DmsfAccessError => e
|
||||
Rails.logger.error e.message
|
||||
render_403
|
||||
rescue StandardError => e
|
||||
@ -378,6 +378,6 @@ class DmsfFilesController < ApplicationController
|
||||
def check_project(entry)
|
||||
return unless entry && entry.project != @project
|
||||
|
||||
raise RedmineDmsf::Errors::DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
|
||||
raise DmsfAccessError, l(:error_entry_project_does_not_match_current_project)
|
||||
end
|
||||
end
|
||||
|
||||
@ -66,7 +66,7 @@ class DmsfFolderPermissionsController < ApplicationController
|
||||
|
||||
def find_project
|
||||
@project = Project.visible.find_by_param(params[:project_id])
|
||||
rescue RedmineDmsf::Errors::DmsfAccessError
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
@ -74,7 +74,7 @@ class DmsfFolderPermissionsController < ApplicationController
|
||||
|
||||
def find_folder
|
||||
@dmsf_folder = DmsfFolder.visible.find(params[:dmsf_folder_id])
|
||||
rescue RedmineDmsf::Errors::DmsfAccessError
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
|
||||
@ -150,7 +150,7 @@ class DmsfUploadController < ApplicationController
|
||||
|
||||
def find_folder
|
||||
@folder = DmsfFolder.visible.find(params[:folder_id]) if params.key?('folder_id')
|
||||
rescue RedmineDmsf::Errors::DmsfAccessError
|
||||
rescue DmsfAccessError
|
||||
render_403
|
||||
end
|
||||
end
|
||||
|
||||
@ -81,7 +81,7 @@ class DmsfWorkflowsController < ApplicationController
|
||||
if revision.dmsf_file
|
||||
begin
|
||||
revision.dmsf_file.unlock!(force_file_unlock_allowed: true) unless RedmineDmsf.dmsf_keep_documents_locked?
|
||||
rescue RedmineDmsf::Errors::DmsfLockError => e
|
||||
rescue DmsfLockError => e
|
||||
flash[:info] = e.message
|
||||
end
|
||||
end
|
||||
@ -225,7 +225,7 @@ class DmsfWorkflowsController < ApplicationController
|
||||
if file
|
||||
begin
|
||||
file.lock!
|
||||
rescue RedmineDmsf::Errors::DmsfLockError => e
|
||||
rescue DmsfLockError => e
|
||||
Rails.logger.warn e.message
|
||||
end
|
||||
flash[:notice] = l(:notice_successful_update)
|
||||
|
||||
@ -18,11 +18,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
module RedmineDmsf
|
||||
module Errors
|
||||
# Access error
|
||||
class DmsfAccessError < StandardError
|
||||
# Nothing to do
|
||||
end
|
||||
end
|
||||
# Access error
|
||||
class DmsfAccessError < StandardError
|
||||
# Nothing to do
|
||||
end
|
||||
@ -18,19 +18,15 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
module RedmineDmsf
|
||||
module Errors
|
||||
# max file size error
|
||||
class DmsfEmailMaxFileSizeError < StandardError
|
||||
include Redmine::I18n
|
||||
# Max file size error
|
||||
class DmsfEmailMaxFileSizeError < StandardError
|
||||
include Redmine::I18n
|
||||
|
||||
def initialize(message = nil)
|
||||
if message.present?
|
||||
super
|
||||
else
|
||||
super(l(:error_max_email_filesize_exceeded, number: RedmineDmsf.dmsf_max_email_filesize))
|
||||
end
|
||||
end
|
||||
def initialize(message = nil)
|
||||
if message.present?
|
||||
super
|
||||
else
|
||||
super(l(:error_max_email_filesize_exceeded, number: RedmineDmsf.dmsf_max_email_filesize))
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -18,11 +18,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
module RedmineDmsf
|
||||
module Errors
|
||||
# Not found error
|
||||
class DmsfFileNotFoundError < StandardError
|
||||
# nothing to do
|
||||
end
|
||||
end
|
||||
# Not found error
|
||||
class DmsfFileNotFoundError < StandardError
|
||||
# nothing to do
|
||||
end
|
||||
@ -18,11 +18,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
module RedmineDmsf
|
||||
module Errors
|
||||
# Lock error
|
||||
class DmsfLockError < StandardError
|
||||
# Nothing to do
|
||||
end
|
||||
end
|
||||
# Lock error
|
||||
class DmsfLockError < StandardError
|
||||
# Nothing to do
|
||||
end
|
||||
@ -18,11 +18,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
module RedmineDmsf
|
||||
module Errors
|
||||
# Parent error
|
||||
class DmsfParentError < StandardError
|
||||
# Nothing to do
|
||||
end
|
||||
end
|
||||
# Parent error
|
||||
class DmsfParentError < StandardError
|
||||
# Nothing to do
|
||||
end
|
||||
@ -18,19 +18,15 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
module RedmineDmsf
|
||||
module Errors
|
||||
# File count exceeded
|
||||
class DmsfZipMaxFilesError < StandardError
|
||||
include Redmine::I18n
|
||||
# File count exceeded
|
||||
class DmsfZipMaxFilesError < StandardError
|
||||
include Redmine::I18n
|
||||
|
||||
def initialize(message = nil)
|
||||
if message.present?
|
||||
super
|
||||
else
|
||||
super(l(:error_max_files_exceeded, number: RedmineDmsf.dmsf_max_file_download))
|
||||
end
|
||||
end
|
||||
def initialize(message = nil)
|
||||
if message.present?
|
||||
super
|
||||
else
|
||||
super(l(:error_max_files_exceeded, number: RedmineDmsf.dmsf_max_file_download))
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -130,7 +130,7 @@ module DmsfUploadHelper
|
||||
wf.notify_users project, new_revision, controller
|
||||
begin
|
||||
file.lock!
|
||||
rescue RedmineDmsf::Errors::DmsfLockError => e
|
||||
rescue DmsfLockError => e
|
||||
Rails.logger.warn e.message
|
||||
end
|
||||
else
|
||||
|
||||
@ -196,7 +196,7 @@ class DmsfFileRevision < ApplicationRecord
|
||||
end
|
||||
|
||||
def new_storage_filename
|
||||
raise RedmineDmsf::Errors::DmsfAccessError, 'File id is not set' unless dmsf_file&.id
|
||||
raise DmsfAccessError, 'File id is not set' unless dmsf_file&.id
|
||||
|
||||
filename = DmsfHelper.sanitize_filename(name)
|
||||
timestamp = DateTime.current.strftime('%y%m%d%H%M%S')
|
||||
|
||||
@ -277,15 +277,6 @@ after_easy_init do
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/webdav/resource_proxy"
|
||||
end
|
||||
|
||||
# Errors
|
||||
after_easy_init do
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_access_error"
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_email_max_file_size_error"
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_file_not_found_error"
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_lock_error"
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/errors/dmsf_zip_max_files_error"
|
||||
end
|
||||
|
||||
# Hooks
|
||||
def require_hooks
|
||||
require "#{File.dirname(__FILE__)}/redmine_dmsf/hooks/controllers/account_controller_hooks"
|
||||
|
||||
@ -48,9 +48,7 @@ module RedmineDmsf
|
||||
end
|
||||
|
||||
def add_dmsf_file(dmsf_file, member = nil, root_path = nil, path = nil)
|
||||
unless dmsf_file&.last_revision && File.exist?(dmsf_file.last_revision.disk_file)
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError
|
||||
end
|
||||
raise DmsfFileNotFoundError unless dmsf_file&.last_revision && File.exist?(dmsf_file.last_revision.disk_file)
|
||||
|
||||
if path
|
||||
string_path = path
|
||||
@ -77,7 +75,7 @@ module RedmineDmsf
|
||||
def add_attachment(attachment, path)
|
||||
return if @files.include?(path)
|
||||
|
||||
raise RedmineDmsf::Errors::DmsfFileNotFoundError unless File.exist?(attachment.diskfile)
|
||||
raise DmsfFileNotFoundError unless File.exist?(attachment.diskfile)
|
||||
|
||||
zip_entry = ::Zip::Entry.new(@zip_file, path, nil, nil, nil, nil, nil, nil,
|
||||
::Zip::DOSTime.at(attachment.created_on))
|
||||
|
||||
@ -206,7 +206,7 @@ module RedmineDmsf
|
||||
wf.notify_users issue.project, revision, context[:controller]
|
||||
begin
|
||||
file.lock!
|
||||
rescue RedmineDmsf::Errors::DmsfLockError => e
|
||||
rescue DmsfLockError => e
|
||||
Rails.logger.warn e.message
|
||||
end
|
||||
else
|
||||
|
||||
@ -44,15 +44,15 @@ module RedmineDmsf
|
||||
def lock!(scope = :scope_exclusive, type = :type_write, expire = nil, owner = nil)
|
||||
# Raise a lock error if entity is locked, but its not at resource level
|
||||
existing = lock(tree: false)
|
||||
raise RedmineDmsf::Errors::DmsfLockError, l(:error_resource_or_parent_locked) if locked? && existing.empty?
|
||||
raise DmsfLockError, l(:error_resource_or_parent_locked) if locked? && existing.empty?
|
||||
|
||||
unless existing.empty?
|
||||
if (existing[0].lock_scope == :scope_shared) && (scope == :scope_shared)
|
||||
# RFC states if an item is exclusively locked and another lock is attempted we reject
|
||||
# if the item is shared locked however, we can always add another lock to it
|
||||
raise RedmineDmsf::Errors::DmsfLockError, l(:error_parent_locked) if dmsf_folder.locked?
|
||||
raise DmsfLockError, l(:error_parent_locked) if dmsf_folder.locked?
|
||||
elsif scope == :scope_exclusive
|
||||
raise RedmineDmsf::Errors::DmsfLockError, l(:error_lock_exclusively)
|
||||
raise DmsfLockError, l(:error_lock_exclusively)
|
||||
end
|
||||
end
|
||||
l = DmsfLock.new
|
||||
@ -107,19 +107,19 @@ module RedmineDmsf
|
||||
end
|
||||
|
||||
def unlock!(force_file_unlock_allowed: false, owner: nil)
|
||||
raise RedmineDmsf::Errors::DmsfLockError, l(:warning_file_not_locked) unless locked?
|
||||
raise DmsfLockError, l(:warning_file_not_locked) unless locked?
|
||||
|
||||
existing = lock(tree: true)
|
||||
destroyed = false
|
||||
# If its empty its a folder that's locked (not root)
|
||||
if existing.empty? || (!dmsf_folder.nil? && dmsf_folder.locked?)
|
||||
raise RedmineDmsf::Errors::DmsfLockError, l(:error_unlock_parent_locked)
|
||||
raise DmsfLockError, l(:error_unlock_parent_locked)
|
||||
end
|
||||
|
||||
# If entity is locked to you, you aren't the lock originator (or named in a shared lock) so deny action
|
||||
# Unless of course you have the rights to force an unlock
|
||||
if locked_for_user? && !User.current.allowed_to?(:force_file_unlock, project) && !force_file_unlock_allowed
|
||||
raise RedmineDmsf::Errors::DmsfLockError, l(:error_only_user_that_locked_file_can_unlock_it)
|
||||
raise DmsfLockError, l(:error_only_user_that_locked_file_can_unlock_it)
|
||||
end
|
||||
|
||||
# Now we need to determine lock type and do the needful
|
||||
|
||||
@ -493,7 +493,7 @@ module RedmineDmsf
|
||||
l = entity.lock!(scope, type, 1.week.from_now, args[:owner])
|
||||
@response['Lock-Token'] = l.uuid
|
||||
[1.week.to_i, l.uuid]
|
||||
rescue RedmineDmsf::Errors::DmsfLockError => exception
|
||||
rescue DmsfLockError => exception
|
||||
e = Dav4rack::LockFailure.new(exception.message)
|
||||
e.add_failure @path, Conflict
|
||||
raise e
|
||||
|
||||
@ -81,7 +81,7 @@ module RedmineDmsf
|
||||
wf.notify_users easy_crm_case.project, revision, self
|
||||
begin
|
||||
file.lock!
|
||||
rescue RedmineDmsf::Errors::DmsfLockError => e
|
||||
rescue DmsfLockError => e
|
||||
Rails.logger.warn e.message
|
||||
end
|
||||
else
|
||||
|
||||
@ -61,13 +61,13 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
||||
@folder7.lock!
|
||||
User.current = nil
|
||||
assert_no_difference('@folder7.lock.count') do
|
||||
assert_raise RedmineDmsf::Errors::DmsfLockError do
|
||||
assert_raise DmsfLockError do
|
||||
@folder7.unlock!
|
||||
end
|
||||
end
|
||||
User.current = @jsmith
|
||||
assert_no_difference('@folder7.lock.count') do
|
||||
assert_raise RedmineDmsf::Errors::DmsfLockError do
|
||||
assert_raise DmsfLockError do
|
||||
@folder7.unlock!
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user