unit tests fix & better locks' index
This commit is contained in:
parent
72843a1b03
commit
042855f428
@ -88,8 +88,8 @@ private
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_target_folder
|
def check_target_folder
|
||||||
if (@target_folder && @target_folder == @file.dmsf_folder) ||
|
if (@target_folder && (@target_folder == @file.dmsf_folder)) ||
|
||||||
(@target_folder.nil? && @file.dmsf_folder.nil? && @target_project == @file.project)
|
(@target_folder.nil? && @file.dmsf_folder.nil? && (@target_project == @file.project))
|
||||||
flash[:error] = l(:error_target_folder_same)
|
flash[:error] = l(:error_target_folder_same)
|
||||||
redirect_to action: :new, id: @file, target_project_id: @target_project.id, target_folder_id: @target_folder
|
redirect_to action: :new, id: @file, target_project_id: @target_project.id, target_folder_id: @target_folder
|
||||||
return
|
return
|
||||||
|
|||||||
@ -28,6 +28,7 @@ class DmsfFoldersCopyController < ApplicationController
|
|||||||
before_action :authorize
|
before_action :authorize
|
||||||
before_action :find_target_folder
|
before_action :find_target_folder
|
||||||
before_action :check_target_folder, only: [:copy, :move]
|
before_action :check_target_folder, only: [:copy, :move]
|
||||||
|
before_action :check_source_folder, only: [:copy, :move]
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@projects = DmsfFolder.allowed_target_projects_on_copy
|
@projects = DmsfFolder.allowed_target_projects_on_copy
|
||||||
@ -102,4 +103,8 @@ class DmsfFoldersCopyController < ApplicationController
|
|||||||
render_403
|
render_403
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_source_folder
|
||||||
|
render_403 if @folder.locked_for_user?
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :dmsf_folder
|
belongs_to :dmsf_folder
|
||||||
belongs_to :deleted_by_user, :class_name => 'User', :foreign_key => 'deleted_by_user_id'
|
belongs_to :deleted_by_user, class_name: 'User', foreign_key: 'deleted_by_user_id'
|
||||||
|
|
||||||
has_many :dmsf_file_revisions, -> { order(created_at: :desc, id: :desc) },
|
has_many :dmsf_file_revisions, -> { order(created_at: :desc, id: :desc) },
|
||||||
dependent: :destroy
|
dependent: :destroy
|
||||||
|
|||||||
@ -197,22 +197,21 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
|
|
||||||
def self.directory_tree(project, current_folder = nil)
|
def self.directory_tree(project, current_folder = nil)
|
||||||
tree = [[l(:link_documents), nil]]
|
tree = [[l(:link_documents), nil]]
|
||||||
project_id = (project.is_a?(Project)) ? project.id : project
|
project = Project.find(project) unless project.is_a?(Project)
|
||||||
folders = DmsfFolder.where(project_id: project_id, dmsf_folder_id: nil).visible(false).to_a
|
folders = project.dmsf_folders.visible(false).to_a
|
||||||
# TODO: This prevents copying folders into its sub-folders too. It should be allowed.
|
# TODO: This prevents copying folders into its sub-folders too. It should be allowed.
|
||||||
folders.delete(current_folder)
|
folders.delete(current_folder)
|
||||||
#
|
|
||||||
folders = folders.delete_if{ |f| f.locked_for_user? }
|
folders = folders.delete_if{ |f| f.locked_for_user? }
|
||||||
folders.each do |folder|
|
folders.each do |folder|
|
||||||
tree.push(["...#{folder.title}", folder.id])
|
tree.push ["...#{folder.title}", folder.id]
|
||||||
DmsfFolder.directory_subtree(tree, folder, 2, current_folder)
|
DmsfFolder.directory_subtree tree, folder, 2, current_folder
|
||||||
end
|
end
|
||||||
return tree
|
return tree
|
||||||
end
|
end
|
||||||
|
|
||||||
def folder_tree
|
def folder_tree
|
||||||
tree = [[title, id]]
|
tree = [[title, id]]
|
||||||
DmsfFolder.directory_subtree(tree, self, 1, nil)
|
DmsfFolder.directory_subtree tree, self, 1, nil
|
||||||
tree
|
tree
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -567,19 +566,19 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
classes.join(' ')
|
classes.join ' '
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def self.directory_subtree(tree, folder, level, current_folder)
|
def self.directory_subtree(tree, folder, level, current_folder)
|
||||||
folders = DmsfFolder.where(project_id: folder.project_id, dmsf_folder_id: folder.id).notsystem.visible(false).to_a
|
folders = folder.dmsf_folders.notsystem.visible(false).to_a
|
||||||
folders.delete(current_folder)
|
folders.delete current_folder
|
||||||
folders.delete_if { |f| f.locked_for_user? }
|
folders.delete_if { |f| f.locked_for_user? }
|
||||||
folders.each do |subfolder|
|
folders.each do |subfolder|
|
||||||
unless subfolder == current_folder
|
unless subfolder == current_folder
|
||||||
tree.push(["#{'...' * level}#{subfolder.title}", subfolder.id])
|
tree.push ["#{'...' * level}#{subfolder.title}", subfolder.id]
|
||||||
DmsfFolder.directory_subtree(tree, subfolder, level + 1, current_folder)
|
DmsfFolder.directory_subtree tree, subfolder, level + 1, current_folder
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
33
db/migrate/20200813075501_change_index_in_dmsf_locks.rb
Normal file
33
db/migrate/20200813075501_change_index_in_dmsf_locks.rb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
#
|
||||||
|
# Redmine plugin for Document Management System "Features"
|
||||||
|
#
|
||||||
|
# Copyright © 2011-20 Karel Pičman <karel.picman@kontron.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
class ChangeIndexInDmsfLocks < ActiveRecord::Migration[5.2]
|
||||||
|
|
||||||
|
def up
|
||||||
|
remove_index :dmsf_locks, :entity_id
|
||||||
|
add_index :dmsf_locks, [:entity_id, :entity_type]
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_index :dmsf_locks, [:entity_id, :entity_type]
|
||||||
|
add_index :dmsf_locks, :entity_id
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@ -74,6 +74,7 @@ module RedmineDmsf
|
|||||||
l.save!
|
l.save!
|
||||||
reload
|
reload
|
||||||
locks.reload
|
locks.reload
|
||||||
|
l.reload
|
||||||
l
|
l
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -109,7 +110,7 @@ module RedmineDmsf
|
|||||||
def unlock!(force_file_unlock_allowed = false)
|
def unlock!(force_file_unlock_allowed = false)
|
||||||
raise DmsfLockError.new(l(:warning_file_not_locked)) unless self.locked?
|
raise DmsfLockError.new(l(:warning_file_not_locked)) unless self.locked?
|
||||||
existing = self.lock(true)
|
existing = self.lock(true)
|
||||||
if existing.empty? || (!self.dmsf_folder.nil? && self.dmsf_folder.locked?) #If its empty its a folder thats locked (not root)
|
if existing.empty? || (!self.dmsf_folder.nil? && self.dmsf_folder.locked?) # If its empty its a folder that's locked (not root)
|
||||||
raise DmsfLockError.new(l(:error_unlock_parent_locked))
|
raise DmsfLockError.new(l(:error_unlock_parent_locked))
|
||||||
else
|
else
|
||||||
# If entity is locked to you, you aren't the lock originator (or named in a shared lock) so deny action
|
# If entity is locked to you, you aren't the lock originator (or named in a shared lock) so deny action
|
||||||
|
|||||||
@ -452,7 +452,7 @@ module RedmineDmsf
|
|||||||
|
|
||||||
# Lock
|
# Lock
|
||||||
def lock(args)
|
def lock(args)
|
||||||
if parent.nil? || ((parent.projectless_path != '/') && (!parent.exists?))
|
if parent.nil? || ((parent.projectless_path != '/') && (!parent.exist?))
|
||||||
e = DAV4Rack::LockFailure.new
|
e = DAV4Rack::LockFailure.new
|
||||||
e.add_failure @path, Conflict
|
e.add_failure @path, Conflict
|
||||||
raise e
|
raise e
|
||||||
@ -462,7 +462,7 @@ module RedmineDmsf
|
|||||||
e.add_failure @path, NotFound
|
e.add_failure @path, NotFound
|
||||||
raise e
|
raise e
|
||||||
end
|
end
|
||||||
lock_check(args[:scope])
|
lock_check args[:scope]
|
||||||
entity = file ? file : folder
|
entity = file ? file : folder
|
||||||
unless entity
|
unless entity
|
||||||
e = DAV4Rack::LockFailure.new
|
e = DAV4Rack::LockFailure.new
|
||||||
@ -502,7 +502,7 @@ module RedmineDmsf
|
|||||||
scope = "scope_#{(args[:scope] || 'exclusive')}".to_sym
|
scope = "scope_#{(args[:scope] || 'exclusive')}".to_sym
|
||||||
type = "type_#{(args[:type] || 'write')}".to_sym
|
type = "type_#{(args[:type] || 'write')}".to_sym
|
||||||
|
|
||||||
#l should be the instance of the lock we've just created
|
# l should be the instance of the lock we've just created
|
||||||
l = entity.lock!(scope, type, Time.current + 1.weeks)
|
l = entity.lock!(scope, type, Time.current + 1.weeks)
|
||||||
@response['Lock-Token'] = l.uuid
|
@response['Lock-Token'] = l.uuid
|
||||||
[1.week.to_i, l.uuid]
|
[1.week.to_i, l.uuid]
|
||||||
|
|||||||
4
test/fixtures/dmsf_folders.yml
vendored
4
test/fixtures/dmsf_folders.yml
vendored
@ -15,7 +15,7 @@ dmsf_folders_002:
|
|||||||
|
|
||||||
dmsf_folders_003:
|
dmsf_folders_003:
|
||||||
id: 3
|
id: 3
|
||||||
title: folder2.1
|
title: folder3
|
||||||
project_id: 2
|
project_id: 2
|
||||||
dmsf_folder_id: NULL
|
dmsf_folder_id: NULL
|
||||||
user_id: 1
|
user_id: 1
|
||||||
@ -29,7 +29,7 @@ dmsf_folders_004:
|
|||||||
|
|
||||||
dmsf_folders_005:
|
dmsf_folders_005:
|
||||||
id: 5
|
id: 5
|
||||||
title: folder3
|
title: folder5
|
||||||
project_id: 1
|
project_id: 1
|
||||||
dmsf_folder_id: 2
|
dmsf_folder_id: 2
|
||||||
user_id: 1
|
user_id: 1
|
||||||
|
|||||||
16
test/fixtures/dmsf_locks.yml
vendored
16
test/fixtures/dmsf_locks.yml
vendored
@ -2,23 +2,15 @@
|
|||||||
dmsf_locks_001:
|
dmsf_locks_001:
|
||||||
id: 1
|
id: 1
|
||||||
entity_id: 2
|
entity_id: 2
|
||||||
user_id: 1
|
user_id: 1 # admin
|
||||||
entity_type: 0
|
entity_type: 0 # DmsfFile
|
||||||
lock_type_cd: 0
|
lock_type_cd: 0
|
||||||
lock_scope_cd: 0
|
lock_scope_cd: 0
|
||||||
|
|
||||||
dmsf_locks_002:
|
dmsf_locks_002:
|
||||||
id: 2
|
id: 2
|
||||||
entity_id: 2
|
entity_id: 2
|
||||||
user_id: 1
|
user_id: 2 # jsmith
|
||||||
entity_type: 1
|
entity_type: 1 # DmsfFolder
|
||||||
lock_type_cd: 0
|
lock_type_cd: 0
|
||||||
lock_scope_cd: 0
|
lock_scope_cd: 0
|
||||||
|
|
||||||
dmsf_locks_003:
|
|
||||||
id: 3
|
|
||||||
entity_id: 2
|
|
||||||
user_id: 2
|
|
||||||
entity_type: 0
|
|
||||||
lock_type_cd: 0
|
|
||||||
lock_scope_cd: 0
|
|
||||||
@ -29,8 +29,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
:dmsf_files, :dmsf_file_revisions, :dmsf_folder_permissions, :dmsf_locks
|
:dmsf_files, :dmsf_file_revisions, :dmsf_folder_permissions, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@project = Project.find 1
|
@project1 = Project.find 1
|
||||||
@project.enable_module! :dmsf
|
@project1.enable_module! :dmsf
|
||||||
@folder1 = DmsfFolder.find 1
|
@folder1 = DmsfFolder.find 1
|
||||||
@folder2 = DmsfFolder.find 2
|
@folder2 = DmsfFolder.find 2
|
||||||
@folder3 = DmsfFolder.find 3
|
@folder3 = DmsfFolder.find 3
|
||||||
@ -62,7 +62,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_truth
|
def test_truth
|
||||||
assert_kind_of Project, @project
|
assert_kind_of Project, @project1
|
||||||
assert_kind_of DmsfFolder, @folder1
|
assert_kind_of DmsfFolder, @folder1
|
||||||
assert_kind_of DmsfFolder, @folder2
|
assert_kind_of DmsfFolder, @folder2
|
||||||
assert_kind_of DmsfFolder, @folder3
|
assert_kind_of DmsfFolder, @folder3
|
||||||
@ -79,7 +79,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
|
|
||||||
def test_edit_folder_forbidden
|
def test_edit_folder_forbidden
|
||||||
# Missing permissions
|
# Missing permissions
|
||||||
get :edit, params: { id: @project, folder_id: @folder1 }
|
get :edit, params: { id: @project1, folder_id: @folder1 }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
# Permissions OK
|
# Permissions OK
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
get :edit, params: { id: @project, folder_id: @folder1}
|
get :edit, params: { id: @project1, folder_id: @folder1}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_select 'label', { text: @custom_field.name }
|
assert_select 'label', { text: @custom_field.name }
|
||||||
assert_select 'option', { value: @custom_value.value }
|
assert_select 'option', { value: @custom_value.value }
|
||||||
@ -96,44 +96,44 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_edit_folder_redirection_to_the_parent_folder
|
def test_edit_folder_redirection_to_the_parent_folder
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
post :save, params: { id: @project, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
||||||
dmsf_folder: { title: @folder2.title, description: @folder2.description} }
|
dmsf_folder: { title: @folder2.title, description: @folder2.description} }
|
||||||
assert_redirected_to dmsf_folder_path(id: @project, folder_id: @folder2.dmsf_folder.id)
|
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.dmsf_folder.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_edit_folder_redirection_to_the_same_folder
|
def test_edit_folder_redirection_to_the_same_folder
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
post :save, params: { id: @project, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
||||||
dmsf_folder: { title: @folder2.title, description: @folder2.description,
|
dmsf_folder: { title: @folder2.title, description: @folder2.description,
|
||||||
redirect_to_folder_id: @folder2.id } }
|
redirect_to_folder_id: @folder2.id } }
|
||||||
assert_redirected_to dmsf_folder_path(id: @project, folder_id: @folder2.id)
|
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_trash_forbidden
|
def test_trash_forbidden
|
||||||
# Missing permissions
|
# Missing permissions
|
||||||
get :trash, params: { id: @project }
|
get :trash, params: { id: @project1 }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_trash_allowed
|
def test_trash_allowed
|
||||||
# Permissions OK
|
# Permissions OK
|
||||||
@role.add_permission! :file_delete
|
@role.add_permission! :file_delete
|
||||||
get :trash, params: { id: @project }
|
get :trash, params: { id: @project1 }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_select 'h2', { text: l(:link_trash_bin) }
|
assert_select 'h2', { text: l(:link_trash_bin) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_delete_forbidden
|
def test_delete_forbidden
|
||||||
# Missing permissions
|
# Missing permissions
|
||||||
get :delete, params: { id: @project, folder_id: @folder1.id, commit: false }
|
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_delete_with_parmission_but_not_empty
|
def test_delete_with_parmission_but_not_empty
|
||||||
# Permissions OK but the folder is not empty
|
# Permissions OK but the folder is not empty
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
get :delete, params: { id: @project, folder_id: @folder1.id, commit: false}
|
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false}
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_include l(:error_folder_is_not_empty), flash[:error]
|
assert_include l(:error_folder_is_not_empty), flash[:error]
|
||||||
end
|
end
|
||||||
@ -141,8 +141,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_delete_locked
|
def test_delete_locked
|
||||||
# Permissions OK but the folder is locked
|
# Permissions OK but the folder is locked
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project.id, folder_id: @folder2.id)
|
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder2.id)
|
||||||
get :delete, params: { id: @project, folder_id: @folder2.id, commit: false}
|
get :delete, params: { id: @project1, folder_id: @folder2.id, commit: false}
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_include l(:error_folder_is_locked), flash[:error]
|
assert_include l(:error_folder_is_locked), flash[:error]
|
||||||
end
|
end
|
||||||
@ -150,8 +150,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_delete_ok
|
def test_delete_ok
|
||||||
# Empty and not locked folder
|
# Empty and not locked folder
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project.id, folder_id: @folder1.id)
|
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder1.id)
|
||||||
get :delete, params: { id: @project, folder_id: @folder1.id, commit: false }
|
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false }
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -159,33 +159,33 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
# Missing permissions
|
# Missing permissions
|
||||||
@folder4.deleted = 1
|
@folder4.deleted = 1
|
||||||
@folder4.save
|
@folder4.save
|
||||||
get :restore, params: { id: @project, folder_id: @folder4.id }
|
get :restore, params: { id: @project1, folder_id: @folder4.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_restore_ok
|
def test_restore_ok
|
||||||
# Permissions OK
|
# Permissions OK
|
||||||
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project.id)
|
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id)
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@folder1.deleted = 1
|
@folder1.deleted = 1
|
||||||
@folder1.save
|
@folder1.save
|
||||||
get :restore, params: { id: @project, folder_id: @folder1.id }
|
get :restore, params: { id: @project1, folder_id: @folder1.id }
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_delete_entries_forbidden
|
def test_delete_entries_forbidden
|
||||||
# Missing permissions
|
# Missing permissions
|
||||||
get :entries_operation, params: { id: @project, delete_entries: 'Delete',
|
get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
|
||||||
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"] }
|
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"] }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_delete_not_empty
|
def test_delete_not_empty
|
||||||
# Permissions OK but the folder is not empty
|
# Permissions OK but the folder is not empty
|
||||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project.id)
|
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id)
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
get :entries_operation, params: { id: @project, delete_entries: 'Delete',
|
get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
|
||||||
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]}
|
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]}
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_equal flash[:error].to_s, l(:error_folder_is_not_empty)
|
assert_equal flash[:error].to_s, l(:error_folder_is_not_empty)
|
||||||
@ -193,12 +193,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
|
|
||||||
def test_delete_entries_ok
|
def test_delete_entries_ok
|
||||||
# Permissions OK
|
# Permissions OK
|
||||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project.id)
|
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id)
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@role.add_permission! :file_delete
|
@role.add_permission! :file_delete
|
||||||
flash[:error] = nil
|
flash[:error] = nil
|
||||||
get :entries_operation, params: { id: @project, delete_entries: 'Delete',
|
get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
|
||||||
ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
|
ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_nil flash[:error]
|
assert_nil flash[:error]
|
||||||
@ -207,9 +207,9 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_restore_entries
|
def test_restore_entries
|
||||||
# Restore
|
# Restore
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project.id)
|
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id)
|
||||||
flash[:error] = nil
|
flash[:error] = nil
|
||||||
get :entries_operation, params: { id: @project, restore_entries: 'Restore',
|
get :entries_operation, params: { id: @project1, restore_entries: 'Restore',
|
||||||
ids: ["file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
|
ids: ["file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_nil flash[:error]
|
assert_nil flash[:error]
|
||||||
@ -220,7 +220,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
@role.add_permission! :file_manipulation
|
@role.add_permission! :file_manipulation
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
get :show, params: { id: @project.id }
|
get :show, params: { id: @project1.id }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
# New file link
|
# New file link
|
||||||
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload'
|
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload'
|
||||||
@ -239,7 +239,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_show_without_file_manipulation
|
def test_show_without_file_manipulation
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
get :show, params: { id: @project.id }
|
get :show, params: { id: @project1.id }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
# New file link should be missing
|
# New file link should be missing
|
||||||
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload', count: 0
|
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload', count: 0
|
||||||
@ -248,7 +248,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_show_csv
|
def test_show_csv
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
get :show, params: { id: @project.id, format: 'csv' }
|
get :show, params: { id: @project1.id, format: 'csv' }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert @response.content_type.match?(/^text\/csv/)
|
assert @response.content_type.match?(/^text\/csv/)
|
||||||
end
|
end
|
||||||
@ -257,27 +257,27 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
# Despite the fact that project != @folder3.project
|
# Despite the fact that project != @folder3.project
|
||||||
assert @project != @folder3.project
|
assert @project1 != @folder3.project
|
||||||
get :show, params: { id: @project.id, folder_id: @folder3.id }
|
get :show, params: { id: @project1.id, folder_id: @folder3.id }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_new_forbidden
|
def test_new_forbidden
|
||||||
@role.remove_permission! :folder_manipulation
|
@role.remove_permission! :folder_manipulation
|
||||||
get :new, params: { id: @project, parent_id: nil }
|
get :new, params: { id: @project1, parent_id: nil }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_new
|
def test_new
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
get :new, params: { id: @project, parent_id: nil }
|
get :new, params: { id: @project1, parent_id: nil }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_email_entries_email_from_forbidden
|
def test_email_entries_email_from_forbidden
|
||||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
|
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
get :entries_operation, params: {id: @project, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
get :entries_operation, params: {id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
|
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :email_documents
|
@role.add_permission! :email_documents
|
||||||
get :entries_operation, params: { id: @project, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from']
|
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from']
|
||||||
end
|
end
|
||||||
@ -294,7 +294,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com'
|
Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com'
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :email_documents
|
@role.add_permission! :email_documents
|
||||||
get :entries_operation, params: { id: @project, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to']
|
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to']
|
||||||
end
|
end
|
||||||
@ -303,7 +303,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1'
|
Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1'
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
@role.add_permission! :email_documents
|
@role.add_permission! :email_documents
|
||||||
get :entries_operation, params: { id: @project, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only']
|
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only']
|
||||||
end
|
end
|
||||||
@ -311,47 +311,49 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
def test_entries_email
|
def test_entries_email
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
zip_file = Tempfile.new('test', DmsfHelper::temp_dir)
|
zip_file = Tempfile.new('test', DmsfHelper::temp_dir)
|
||||||
get :entries_email, params: { id: @project, email:
|
get :entries_email, params: { id: @project1, email:
|
||||||
{
|
{
|
||||||
to: 'to@test.com', from: 'from@test.com', subject: 'subject', body: 'body', expired_at: '2015-01-01',
|
to: 'to@test.com', from: 'from@test.com', subject: 'subject', body: 'body', expired_at: '2015-01-01',
|
||||||
folders: [], files: [@file1.id], zipped_content: zip_file.path
|
folders: [], files: [@file1.id], zipped_content: zip_file.path
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert_redirected_to dmsf_folder_path(id: @project)
|
assert_redirected_to dmsf_folder_path(id: @project1)
|
||||||
ensure
|
ensure
|
||||||
zip_file.unlink
|
zip_file.unlink
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_email_forbidden
|
def test_add_email_forbidden
|
||||||
get :add_email, params: { id: @project.id }, xhr: true
|
@role.remove_permission! :view_dmsf_files
|
||||||
|
get :add_email, params: { id: @project1.id }, xhr: true
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_email
|
def test_add_email
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
get :add_email, params: { id: @project.id }, xhr: true
|
get :add_email, params: { id: @project1.id }, xhr: true
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_append_email_forbidden
|
def test_append_email_forbidden
|
||||||
post :append_email, params: { id: @project, user_ids: @project.members.collect{ |m| m.user.id }, format: 'js'}
|
@role.remove_permission! :view_dmsf_files
|
||||||
|
post :append_email, params: { id: @project1, user_ids: @project1.members.collect{ |m| m.user.id }, format: 'js'}
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_append_email
|
def test_append_email
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
post :append_email, params: { id: @project, user_ids: @project.members.collect{ |m| m.user.id }, format: 'js'}
|
post :append_email, params: { id: @project1, user_ids: @project1.members.collect{ |m| m.user.id }, format: 'js'}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_autocomplete_for_user_forbidden
|
def test_autocomplete_for_user_forbidden
|
||||||
get :autocomplete_for_user, params: { id: @project.id }, xhr: true
|
get :autocomplete_for_user, params: { id: @project1.id }, xhr: true
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_autocomplete_for_user
|
def test_autocomplete_for_user
|
||||||
@role.add_permission! :view_dmsf_files
|
@role.add_permission! :view_dmsf_files
|
||||||
get :autocomplete_for_user, params: { id: @project }, xhr: true
|
get :autocomplete_for_user, params: { id: @project1 }, xhr: true
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -359,19 +361,19 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
assert_difference 'DmsfFolder.count', +1 do
|
assert_difference 'DmsfFolder.count', +1 do
|
||||||
post :create, params: { id: @project.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
post :create, params: { id: @project1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
||||||
end
|
end
|
||||||
assert_redirected_to dmsf_folder_path(id: @project, folder_id: nil)
|
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_create_folder
|
def test_create_folder
|
||||||
@role.add_permission! :folder_manipulation
|
@role.add_permission! :folder_manipulation
|
||||||
@role.add_permission! :view_dmsf_folders
|
@role.add_permission! :view_dmsf_folders
|
||||||
assert_difference 'DmsfFolder.count', +1 do
|
assert_difference 'DmsfFolder.count', +1 do
|
||||||
post :create, params: { id: @project.id, parent_id: @folder1.id,
|
post :create, params: { id: @project1.id, parent_id: @folder1.id,
|
||||||
dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
||||||
end
|
end
|
||||||
assert_redirected_to dmsf_folder_path(id: @project, folder_id: @folder1)
|
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -26,7 +26,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
|
|
||||||
fixtures :users, :email_addresses, :dmsf_files, :dmsf_file_revisions,
|
fixtures :users, :email_addresses, :dmsf_files, :dmsf_file_revisions,
|
||||||
:custom_fields, :custom_values, :projects, :roles, :members, :member_roles,
|
:custom_fields, :custom_values, :projects, :roles, :members, :member_roles,
|
||||||
:enabled_modules, :dmsf_file_revisions, :dmsf_folders
|
:enabled_modules, :dmsf_file_revisions, :dmsf_folders, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@project1 = Project.find 1
|
@project1 = Project.find 1
|
||||||
@ -34,17 +34,18 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
@project5 = Project.find 5
|
@project5 = Project.find 5
|
||||||
@project1.enable_module! :dmsf
|
@project1.enable_module! :dmsf
|
||||||
@file1 = DmsfFile.find 1
|
@file1 = DmsfFile.find 1
|
||||||
|
@file2 = DmsfFile.find 2
|
||||||
@folder1 = DmsfFolder.find 1
|
@folder1 = DmsfFolder.find 1
|
||||||
@user_admin = User.find 1
|
@folder2 = DmsfFolder.find 2
|
||||||
@user_member = User.find 2
|
@admin = User.find 1
|
||||||
|
@jsmith = User.find 2
|
||||||
@user_non_member = User.find 3
|
@user_non_member = User.find 3
|
||||||
@role_manager = Role.find_by(name: 'Manager')
|
@role_manager = Role.find_by(name: 'Manager')
|
||||||
User.current = nil
|
User.current = nil
|
||||||
@request.session[:user_id] = 2 # John Smith - manager
|
@request.session[:user_id] = @jsmith.id
|
||||||
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
|
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
|
||||||
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
|
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
|
||||||
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
|
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
|
||||||
@project1.enable_module!(:dmsf)
|
|
||||||
@role_manager.add_permission! :file_manipulation
|
@role_manager.add_permission! :file_manipulation
|
||||||
@role_manager.add_permission! :view_dmsf_folders
|
@role_manager.add_permission! :view_dmsf_folders
|
||||||
end
|
end
|
||||||
@ -64,15 +65,17 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
assert_kind_of Project, @project2
|
assert_kind_of Project, @project2
|
||||||
assert_kind_of Project, @project5
|
assert_kind_of Project, @project5
|
||||||
assert_kind_of DmsfFile, @file1
|
assert_kind_of DmsfFile, @file1
|
||||||
|
assert_kind_of DmsfFile, @file2
|
||||||
assert_kind_of DmsfFolder, @folder1
|
assert_kind_of DmsfFolder, @folder1
|
||||||
assert_kind_of User, @user_admin
|
assert_kind_of DmsfFolder, @folder2
|
||||||
assert_kind_of User, @user_member
|
assert_kind_of User, @admin
|
||||||
|
assert_kind_of User, @jsmith
|
||||||
assert_kind_of User, @user_non_member
|
assert_kind_of User, @user_non_member
|
||||||
assert_kind_of Role, @role_manager
|
assert_kind_of Role, @role_manager
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_authorize_admin
|
def test_authorize_admin
|
||||||
@request.session[:user_id] = @user_admin.id
|
@request.session[:user_id] = @admin.id
|
||||||
get :new, params: { id: @file1.id }
|
get :new, params: { id: @file1.id }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'new'
|
assert_template 'new'
|
||||||
@ -85,7 +88,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_authorize_member_no_module
|
def test_authorize_member_no_module
|
||||||
@project1.disable_module!(:dmsf)
|
@project1.disable_module! :dmsf
|
||||||
get :new, params: { id: @file1.id }
|
get :new, params: { id: @file1.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
@ -133,8 +136,11 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_copy_to_locked_folder
|
def test_copy_to_locked_folder
|
||||||
@folder1.lock!
|
User.current = @admin
|
||||||
post :copy, params: { id: @file1.id, target_project_id: @file1.project.id, target_folder_id: @folder1.id }
|
assert @folder2.locked_for_user?
|
||||||
|
User.current = nil
|
||||||
|
@request.session[:user_id] = @admin.id
|
||||||
|
post :copy, params: { id: @file1.id, target_project_id: @folder2.project.id, target_folder_id: @folder2.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -167,16 +173,21 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
assert_redirected_to action: 'new', target_project_id: @file1.project.id, target_folder_id: @file1.dmsf_folder
|
assert_redirected_to action: 'new', target_project_id: @file1.project.id, target_folder_id: @file1.dmsf_folder
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_locked
|
def test_move_locked_file
|
||||||
@file1.lock!
|
User.current = @jsmith
|
||||||
post :move, params: { id: @file1.id, target_project_id: @file1.project.id, target_folder_id: @folder1.id }
|
assert @file2.locked_for_user?
|
||||||
assert_response :redirect
|
User.current = nil
|
||||||
assert_equal l(:error_file_is_locked), flash[:error]
|
@request.session[:user_id] = @jsmith.id
|
||||||
|
post :move, params: { id: @file2.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
|
||||||
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_locked_folder
|
def test_move_to_locked_folder
|
||||||
@folder1.lock!
|
User.current = @admin
|
||||||
post :move, params: { id: @file1.id, target_project_id: @file1.project.id, target_folder_id: @folder1.id }
|
assert @folder2.locked_for_user?
|
||||||
|
User.current = nil
|
||||||
|
@request.session[:user_id] = @admin.id
|
||||||
|
post :move, params: { id: @file1.id, target_project_id: @folder2.project.id, target_folder_id: @folder2.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -24,8 +24,8 @@ require File.expand_path('../../test_helper', __FILE__)
|
|||||||
class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||||
include Redmine::I18n
|
include Redmine::I18n
|
||||||
|
|
||||||
fixtures :users, :projects, :roles, :members, :member_roles,:enabled_modules, :dmsf_folders,
|
fixtures :users, :projects, :roles, :members, :member_roles, :enabled_modules, :dmsf_folders,
|
||||||
:email_addresses
|
:email_addresses, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@project1 = Project.find 1
|
@project1 = Project.find 1
|
||||||
@ -35,16 +35,16 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
@folder1 = DmsfFolder.find 1
|
@folder1 = DmsfFolder.find 1
|
||||||
@folder2 = DmsfFolder.find 2
|
@folder2 = DmsfFolder.find 2
|
||||||
@folder6 = DmsfFolder.find 6
|
@folder6 = DmsfFolder.find 6
|
||||||
@user_admin = User.find 1
|
@admin = User.find 1
|
||||||
@user_member = User.find 2
|
@jsmith = User.find 2
|
||||||
@user_non_member = User.find 3
|
@user_non_member = User.find 3
|
||||||
@role_manager = Role.where(name: 'Manager').first
|
@role_manager = Role.find_by(name: 'Manager')
|
||||||
User.current = nil
|
User.current = nil
|
||||||
@request.session[:user_id] = @user_member.id # John Smith - manager
|
@request.session[:user_id] = @jsmith.id
|
||||||
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
|
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
|
||||||
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
|
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
|
||||||
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
|
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
|
||||||
@project1.enable_module!(:dmsf)
|
@project1.enable_module! :dmsf
|
||||||
@role_manager.add_permission! :folder_manipulation
|
@role_manager.add_permission! :folder_manipulation
|
||||||
@role_manager.add_permission! :view_dmsf_folders
|
@role_manager.add_permission! :view_dmsf_folders
|
||||||
end
|
end
|
||||||
@ -66,14 +66,14 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
assert_kind_of DmsfFolder, @folder1
|
assert_kind_of DmsfFolder, @folder1
|
||||||
assert_kind_of DmsfFolder, @folder2
|
assert_kind_of DmsfFolder, @folder2
|
||||||
assert_kind_of DmsfFolder, @folder6
|
assert_kind_of DmsfFolder, @folder6
|
||||||
assert_kind_of User, @user_admin
|
assert_kind_of User, @admin
|
||||||
assert_kind_of User, @user_member
|
assert_kind_of User, @jsmith
|
||||||
assert_kind_of User, @user_non_member
|
assert_kind_of User, @user_non_member
|
||||||
assert_kind_of Role, @role_manager
|
assert_kind_of Role, @role_manager
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_authorize_admin
|
def test_authorize_admin
|
||||||
@request.session[:user_id] = @user_admin.id
|
@request.session[:user_id] = @admin.id
|
||||||
get :new, params: { id: @folder1.id }
|
get :new, params: { id: @folder1.id }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'new'
|
assert_template 'new'
|
||||||
@ -128,7 +128,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_copy_to_another_project
|
def test_copy_to_another_project
|
||||||
@request.session[:user_id] = @user_admin.id
|
@request.session[:user_id] = @admin.id
|
||||||
@project2.enable_module!(:dmsf)
|
@project2.enable_module!(:dmsf)
|
||||||
assert_equal @project1.id, @folder1.project_id
|
assert_equal @project1.id, @folder1.project_id
|
||||||
post :copy, params: { id: @folder1.id, target_project_id: @project2.id }
|
post :copy, params: { id: @folder1.id, target_project_id: @project2.id }
|
||||||
@ -143,7 +143,11 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_copy_to_locked_folder
|
def test_copy_to_locked_folder
|
||||||
post :copy, params: { id: @folder1.id, target_project_id: @folder1.project.id, target_folder_id: @folder2.id }
|
User.current = @admin
|
||||||
|
assert @folder2.locked_for_user?
|
||||||
|
User.current = nil
|
||||||
|
@request.session[:user_id] = @admin.id
|
||||||
|
post :copy, params: { id: @folder6.id, target_project_id: @folder2.project.id, target_folder_id: @folder2.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -182,14 +186,21 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
assert_redirected_to action: 'new', target_project_id: @folder1.project.id, target_folder_id: @folder1.dmsf_folder
|
assert_redirected_to action: 'new', target_project_id: @folder1.project.id, target_folder_id: @folder1.dmsf_folder
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_locked
|
def test_move_locked_folder
|
||||||
@folder1.lock!
|
User.current = @admin
|
||||||
post :move, params: { id: @folder1.id, target_project_id: @folder1.project.id, target_folder_id: @folder2.id }
|
assert @folder2.locked_for_user?
|
||||||
|
User.current = nil
|
||||||
|
@request.session[:user_id] = @admin.id
|
||||||
|
post :move, params: { id: @folder2.id, target_project_id: @folder6.project.id, target_folder_id: @folder6.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_locked_folder
|
def test_move_to_locked_folder
|
||||||
post :move, params: { id: @folder1.id, target_project_id: @folder2.project.id, target_folder_id: @folder2.id }
|
User.current = @admin
|
||||||
|
assert @folder2.locked_for_user?
|
||||||
|
User.current = nil
|
||||||
|
@request.session[:user_id] = @admin.id
|
||||||
|
post :move, params: { id: @folder6.id, target_project_id: @folder2.project.id, target_folder_id: @folder2.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -199,20 +210,21 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_dmsf_enabled
|
def test_move_to_dmsf_enabled
|
||||||
@project5.enable_module!(:dmsf)
|
@project5.enable_module! :dmsf
|
||||||
post :move, params: { id: @folder1.id, target_project_id: @project5.id, target_folder_id: nil }
|
post :move, params: { id: @folder1.id, target_project_id: @project5.id, target_folder_id: nil }
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_nil flash[:error]
|
assert_nil flash[:error]
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_as_non_member
|
def test_move_to_as_non_member
|
||||||
post :move, params: { id: @folder1.id, target_project_id: @project2.id, target_folder_id: nil }
|
@request.session[:user_id] = @user_non_member.id
|
||||||
|
post :move, params: { id: @folder6.id, target_project_id: @folder2.project.id, target_folder_id: @folder2.id }
|
||||||
assert_response :forbidden
|
assert_response :forbidden
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_move_to_another_project
|
def test_move_to_another_project
|
||||||
@request.session[:user_id] = @user_admin.id
|
@request.session[:user_id] = @admin.id
|
||||||
@project2.enable_module!(:dmsf)
|
@project2.enable_module! :dmsf
|
||||||
assert_equal @project1.id, @folder1.project_id
|
assert_equal @project1.id, @folder1.project_id
|
||||||
post :move, params: { id: @folder1.id, target_project_id: @project2.id }
|
post :move, params: { id: @folder1.id, target_project_id: @project2.id }
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
|
|||||||
@ -29,19 +29,21 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
:dmsf_files, :dmsf_locks
|
:dmsf_files, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@user_member = User.find 2
|
@admin = User.find 1
|
||||||
|
@jsmith = User.find 2
|
||||||
User.current = nil
|
User.current = nil
|
||||||
@request.session[:user_id] = @user_member.id
|
@request.session[:user_id] = @jsmith.id
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_truth
|
def test_truth
|
||||||
assert_kind_of User, @user_member
|
assert_kind_of User, @admin
|
||||||
|
assert_kind_of User, @jsmith
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_page_with_open_approvals_one_approval
|
def test_page_with_open_approvals_one_approval
|
||||||
DmsfFileRevision.where(id: 5).delete_all
|
DmsfFileRevision.where(id: 5).delete_all
|
||||||
@user_member.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||||
@user_member.pref.save!
|
@jsmith.pref.save!
|
||||||
get :page
|
get :page
|
||||||
assert_response :success
|
assert_response :success
|
||||||
unless defined?(EasyExtensions)
|
unless defined?(EasyExtensions)
|
||||||
@ -52,8 +54,8 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_page_with_open_approvals_no_approval
|
def test_page_with_open_approvals_no_approval
|
||||||
@user_member.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||||
@user_member.pref.save!
|
@jsmith.pref.save!
|
||||||
get :page
|
get :page
|
||||||
assert_response :success
|
assert_response :success
|
||||||
unless defined?(EasyExtensions)
|
unless defined?(EasyExtensions)
|
||||||
@ -63,9 +65,10 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_page_with_open_locked_documents
|
def test_page_with_open_locked_documents
|
||||||
@user_member.pref[:my_page_layout] = { 'top' => ['locked_documents'] }
|
@request.session[:user_id] = @admin.id
|
||||||
@user_member.pref.save!
|
@admin.pref[:my_page_layout] = { 'top' => ['locked_documents'] }
|
||||||
|
@admin.pref.save!
|
||||||
get :page
|
get :page
|
||||||
assert_response :success
|
assert_response :success
|
||||||
unless defined?(EasyExtensions)
|
unless defined?(EasyExtensions)
|
||||||
|
|||||||
@ -26,7 +26,7 @@ require 'fileutils'
|
|||||||
class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||||
|
|
||||||
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
|
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
|
||||||
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
|
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@admin = credentials 'admin'
|
@admin = credentials 'admin'
|
||||||
@ -34,9 +34,13 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
|||||||
@admin_user = User.find_by(login: 'admin')
|
@admin_user = User.find_by(login: 'admin')
|
||||||
@project1 = Project.find 1
|
@project1 = Project.find 1
|
||||||
@project1.enable_module! 'dmsf'
|
@project1.enable_module! 'dmsf'
|
||||||
|
@project2 = Project.find 2
|
||||||
|
@project2.enable_module! 'dmsf'
|
||||||
@project3 = Project.find 3
|
@project3 = Project.find 3
|
||||||
@project3.enable_module! 'dmsf'
|
@project3.enable_module! 'dmsf'
|
||||||
@file1 = DmsfFile.find 1
|
@file1 = DmsfFile.find 1
|
||||||
|
@file2 = DmsfFile.find 2
|
||||||
|
@file9 = DmsfFile.find 9
|
||||||
@file12 = DmsfFile.find 12
|
@file12 = DmsfFile.find 12
|
||||||
@folder10 = DmsfFolder.find 10
|
@folder10 = DmsfFolder.find 10
|
||||||
# Fix permissions for jsmith's role
|
# Fix permissions for jsmith's role
|
||||||
@ -53,6 +57,7 @@ class DmsfWebdavLockTest < 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>}
|
||||||
|
User.current = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
@ -62,8 +67,11 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
|||||||
|
|
||||||
def test_truth
|
def test_truth
|
||||||
assert_kind_of Project, @project1
|
assert_kind_of Project, @project1
|
||||||
|
assert_kind_of Project, @project2
|
||||||
assert_kind_of Project, @project3
|
assert_kind_of Project, @project3
|
||||||
assert_kind_of DmsfFile, @file1
|
assert_kind_of DmsfFile, @file1
|
||||||
|
assert_kind_of DmsfFile, @file2
|
||||||
|
assert_kind_of DmsfFile, @file9
|
||||||
assert_kind_of DmsfFile, @file12
|
assert_kind_of DmsfFile, @file12
|
||||||
assert_kind_of DmsfFolder, @folder10
|
assert_kind_of DmsfFolder, @folder10
|
||||||
assert_kind_of Role, @role
|
assert_kind_of Role, @role
|
||||||
@ -71,12 +79,11 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_lock_file_already_locked_by_other
|
def test_lock_file_already_locked_by_other
|
||||||
log_user 'admin', 'admin' # login as admin
|
log_user 'jsmith', 'jsmith'
|
||||||
User.current = @admin_user
|
process :lock, "/dmsf/webdav/#{@project2.identifier}/#{@file2.name}", params: @xml,
|
||||||
assert @file1.lock!, "File failed to be locked by #{User.current}"
|
headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
|
||||||
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: @xml,
|
assert_response :multi_status
|
||||||
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
|
assert_match '<d:status>HTTP/1.1 409 Conflict</d:status>', response.body
|
||||||
assert_response :locked
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_lock_file
|
def test_lock_file
|
||||||
@ -87,7 +94,7 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
|||||||
# Time travel, will make the usec part of the time 0
|
# Time travel, will make the usec part of the time 0
|
||||||
travel_to create_time do
|
travel_to create_time do
|
||||||
# Lock file
|
# Lock file
|
||||||
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: @xml,
|
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file9.name}", params: @xml,
|
||||||
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
|
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
|
||||||
assert_response :success
|
assert_response :success
|
||||||
# Verify the response
|
# Verify the response
|
||||||
@ -115,7 +122,8 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
|||||||
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>/)
|
||||||
locktoken = $1
|
locktoken = $1
|
||||||
# Verify the lock in the db
|
# Verify the lock in the db
|
||||||
l = @file1.lock.first
|
@file9.reload
|
||||||
|
l = @file9.lock.first
|
||||||
assert_equal create_time, l.created_at
|
assert_equal create_time, l.created_at
|
||||||
assert_equal create_time, l.updated_at
|
assert_equal create_time, l.updated_at
|
||||||
assert_equal (create_time + 1.week), l.expires_at
|
assert_equal (create_time + 1.week), l.expires_at
|
||||||
@ -123,15 +131,15 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
|||||||
|
|
||||||
travel_to refresh_time do
|
travel_to refresh_time do
|
||||||
# Refresh lock
|
# Refresh lock
|
||||||
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}",
|
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file9.name}",
|
||||||
params: nil,
|
params: nil,
|
||||||
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: locktoken })
|
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: locktoken })
|
||||||
assert_response :success
|
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
|
||||||
@file1.reload
|
@file9.reload
|
||||||
l = @file1.lock.first
|
l = @file9.lock.first
|
||||||
assert_equal create_time, l.created_at
|
assert_equal create_time, l.created_at
|
||||||
assert_equal refresh_time, l.updated_at
|
assert_equal refresh_time, l.updated_at
|
||||||
assert_equal (refresh_time + 1.week), l.expires_at
|
assert_equal (refresh_time + 1.week), l.expires_at
|
||||||
|
|||||||
@ -285,15 +285,15 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
|
|||||||
def test_assigned
|
def test_assigned
|
||||||
assert !@file1.assigned?(@admin)
|
assert !@file1.assigned?(@admin)
|
||||||
assert !@file1.assigned?(@jsmith)
|
assert !@file1.assigned?(@jsmith)
|
||||||
@file7.last_revision.set_workflow(@wf1.id, nil)
|
@file7.last_revision.set_workflow @wf1.id, nil
|
||||||
@file7.last_revision.assign_workflow(@wf1.id)
|
@file7.last_revision.assign_workflow @wf1.id
|
||||||
assert @file7.assigned?(@admin)
|
assert @file7.assigned?(@admin)
|
||||||
assert @file7.assigned?(@jsmith)
|
assert @file7.assigned?(@jsmith)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_locked_by
|
def test_locked_by
|
||||||
# Locked file
|
# Locked file
|
||||||
assert_equal @jsmith.name, @file2.locked_by
|
assert_equal @admin.name, @file2.locked_by
|
||||||
# Unlocked file
|
# Unlocked file
|
||||||
assert_equal '', @file1.locked_by
|
assert_equal '', @file1.locked_by
|
||||||
end
|
end
|
||||||
|
|||||||
@ -24,7 +24,7 @@ require File.expand_path('../../test_helper', __FILE__)
|
|||||||
|
|
||||||
class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||||
fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles,
|
fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles,
|
||||||
:dmsf_folder_permissions
|
:dmsf_folder_permissions, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@project1 = Project.find 1
|
@project1 = Project.find 1
|
||||||
@ -33,40 +33,42 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
|||||||
@project2.enable_module! :dmsf
|
@project2.enable_module! :dmsf
|
||||||
@folder1 = DmsfFolder.find 1
|
@folder1 = DmsfFolder.find 1
|
||||||
@folder2 = DmsfFolder.find 2
|
@folder2 = DmsfFolder.find 2
|
||||||
|
@folder3 = DmsfFolder.find 3
|
||||||
@folder4 = DmsfFolder.find 4
|
@folder4 = DmsfFolder.find 4
|
||||||
@folder5 = DmsfFolder.find 5
|
@folder5 = DmsfFolder.find 5
|
||||||
@folder6 = DmsfFolder.find 6
|
@folder6 = DmsfFolder.find 6
|
||||||
@folder7 = DmsfFolder.find 7
|
@folder7 = DmsfFolder.find 7
|
||||||
@manager = User.find 2
|
@jsmith = User.find 2 # Manager
|
||||||
@developer = User.find 3
|
@dlopper = User.find 3 # Developer
|
||||||
@manager_role = Role.find 1
|
@manager_role = Role.find_by(name: 'Manager')
|
||||||
@manager_role.add_permission! :view_dmsf_folders
|
@manager_role.add_permission! :view_dmsf_folders
|
||||||
developer_role = Role.find 2
|
developer_role = Role.find 2
|
||||||
developer_role.add_permission! :view_dmsf_folders
|
developer_role.add_permission! :view_dmsf_folders
|
||||||
User.current = @manager
|
User.current = @jsmith
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_truth
|
def test_truth
|
||||||
assert_kind_of DmsfFolder, @folder1
|
assert_kind_of DmsfFolder, @folder1
|
||||||
assert_kind_of DmsfFolder, @folder1
|
assert_kind_of DmsfFolder, @folder2
|
||||||
|
assert_kind_of DmsfFolder, @folder3
|
||||||
assert_kind_of DmsfFolder, @folder4
|
assert_kind_of DmsfFolder, @folder4
|
||||||
assert_kind_of DmsfFolder, @folder5
|
assert_kind_of DmsfFolder, @folder5
|
||||||
assert_kind_of DmsfFolder, @folder6
|
assert_kind_of DmsfFolder, @folder6
|
||||||
assert_kind_of DmsfFolder, @folder7
|
assert_kind_of DmsfFolder, @folder7
|
||||||
assert_kind_of Project, @project1
|
assert_kind_of Project, @project1
|
||||||
assert_kind_of Project, @project2
|
assert_kind_of Project, @project2
|
||||||
assert_kind_of User, @manager
|
assert_kind_of User, @jsmith
|
||||||
assert_kind_of User, @developer
|
assert_kind_of User, @dlopper
|
||||||
assert_kind_of Role, @manager_role
|
assert_kind_of Role, @manager_role
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_visiblity
|
def test_visiblity
|
||||||
# The role has got permissions
|
# The role has got permissions
|
||||||
User.current = @manager
|
User.current = @jsmith
|
||||||
assert_equal 7, DmsfFolder.where(project_id: 1).all.size
|
assert_equal 7, DmsfFolder.where(project_id: 1).all.size
|
||||||
assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size
|
assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size
|
||||||
# The user has got permissions
|
# The user has got permissions
|
||||||
User.current = @developer
|
User.current = @dlopper
|
||||||
# Hasn't got permissions for @folder7
|
# Hasn't got permissions for @folder7
|
||||||
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
|
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
|
||||||
assert_equal 4, DmsfFolder.visible.where(project_id: 1).all.size
|
assert_equal 4, DmsfFolder.visible.where(project_id: 1).all.size
|
||||||
@ -77,7 +79,7 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_permissions
|
def test_permissions
|
||||||
User.current = @developer
|
User.current = @dlopper
|
||||||
assert DmsfFolder.permissions?(@folder7)
|
assert DmsfFolder.permissions?(@folder7)
|
||||||
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
|
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
|
||||||
@folder7.reload
|
@folder7.reload
|
||||||
@ -148,34 +150,45 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_directory_tree
|
def test_directory_tree
|
||||||
|
User.current = @admin
|
||||||
|
@folder7.lock!
|
||||||
|
User.current = @jsmith
|
||||||
|
assert @folder7.locked_for_user?
|
||||||
tree = DmsfFolder.directory_tree(@project1)
|
tree = DmsfFolder.directory_tree(@project1)
|
||||||
assert tree
|
assert tree
|
||||||
# [["Documents", nil],
|
# [["Documents", nil],
|
||||||
# ["...folder7", 7],
|
|
||||||
# ["...folder1", 1],
|
# ["...folder1", 1],
|
||||||
# ["......folder2", 2] - locked
|
# ["......folder2", 2]
|
||||||
|
# [".........folder5", 5],
|
||||||
# ["...folder6", 6]]
|
# ["...folder6", 6]]
|
||||||
assert tree.to_s.include?('...folder1'), "'...folder3' string in the folder tree expected."
|
# ["...folder7", 7] - locked
|
||||||
assert !tree.to_s.include?('......folder2'), "'......folder2' string in the folder tree not expected."
|
assert tree.to_s.include?('...folder1'), "'...folder1' string in the folder tree expected."
|
||||||
|
assert !tree.to_s.include?('...folder7'), "'...folder7' string in the folder tree not expected."
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_directory_tree_id
|
def test_directory_tree_id
|
||||||
|
User.current = @admin
|
||||||
|
@folder7.lock!
|
||||||
|
User.current = @jsmith
|
||||||
|
assert @folder7.locked_for_user?
|
||||||
tree = DmsfFolder.directory_tree(@project1.id)
|
tree = DmsfFolder.directory_tree(@project1.id)
|
||||||
assert tree
|
assert tree
|
||||||
# [["Documents", nil],
|
# [["Documents", nil],
|
||||||
# ["...folder7", 7],
|
|
||||||
# ["...folder1", 1],
|
# ["...folder1", 1],
|
||||||
# ["......folder2", 2] - locked
|
# ["......folder2", 2]
|
||||||
|
# [".........folder5", 5],
|
||||||
# ["...folder6", 6]]
|
# ["...folder6", 6]]
|
||||||
assert tree.to_s.include?('...folder1'), "'...folder3' string in the folder tree expected."
|
# ["...folder7", 7] - locked
|
||||||
assert !tree.to_s.include?('......folder2'), "'......folder2' string in the folder tree not expected."
|
assert tree.to_s.include?('...folder1'), "'...folder1' string in the folder tree expected."
|
||||||
|
assert !tree.to_s.include?('...folder7'), "'...folder7' string in the folder tree not expected."
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_folder_tree
|
def test_folder_tree
|
||||||
|
User.current = @admin
|
||||||
tree = @folder1.folder_tree
|
tree = @folder1.folder_tree
|
||||||
assert tree
|
assert tree
|
||||||
# [["folder1", 1],
|
# [["folder1", 1],
|
||||||
# ["...folder2", 2] - locked
|
# ["...folder2", 2] - locked for admin
|
||||||
assert tree.to_s.include?('folder1'), "'folder1' string in the folder tree expected."
|
assert tree.to_s.include?('folder1'), "'folder1' string in the folder tree expected."
|
||||||
assert !tree.to_s.include?('...folder2'), "'...folder2' string in the folder tree not expected."
|
assert !tree.to_s.include?('...folder2'), "'...folder2' string in the folder tree not expected."
|
||||||
end
|
end
|
||||||
|
|||||||
@ -28,9 +28,10 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
|||||||
:enumerations, :dmsf_locks
|
:enumerations, :dmsf_locks
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@lock = dmsf_locks(:dmsf_locks_001)
|
@lock = DmsfLock.find 1
|
||||||
@folder2 = dmsf_folders(:dmsf_folders_002)
|
@folder2 = DmsfFolder.find 2
|
||||||
@file4 = dmsf_files(:dmsf_files_004)
|
@folder7 = DmsfFolder.find 7
|
||||||
|
@file4 = DmsfFile.find 4
|
||||||
@jsmith = User.find 2
|
@jsmith = User.find 2
|
||||||
@admin = User.find 1
|
@admin = User.find 1
|
||||||
end
|
end
|
||||||
@ -44,9 +45,9 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_lock_type_is_enumerable
|
def test_lock_type_is_enumerable
|
||||||
assert DmsfLock.respond_to?(:lock_types),
|
assert DmsfLock.respond_to?(:lock_types),
|
||||||
"DmsfLock class hasn't got lock_types method"
|
"DmsfLock class hasn't got lock_types method"
|
||||||
assert DmsfLock.lock_types.is_a?(SimpleEnum::Enum),
|
assert DmsfLock.lock_types.is_a?(SimpleEnum::Enum),
|
||||||
'DmsfLock class is not enumerable'
|
'DmsfLock class is not enumerable'
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -58,7 +59,7 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_linked_to_either_file_or_folder
|
def test_linked_to_either_file_or_folder
|
||||||
assert_not_nil @lock.file || @lock.folder
|
assert_not_nil @lock.file || @lock.folder
|
||||||
if @lock.file
|
if @lock.file
|
||||||
assert_kind_of DmsfFile, @lock.file
|
assert_kind_of DmsfFile, @lock.file
|
||||||
else
|
else
|
||||||
@ -66,27 +67,29 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_locked_folder_reports_un_locked_child_file_as_locked
|
def test_locked_folder_reports_un_locked_child_file_as_locked
|
||||||
assert @folder2.locked?,
|
assert @folder2.locked?,
|
||||||
"Folder #{@folder2.title} should be locked by fixture"
|
"Folder #{@folder2.title} should be locked by fixture"
|
||||||
assert_equal 1, @folder2.lock.count # Check the folder lists 1 lock
|
assert_equal 1, @folder2.lock.count # Check the folder lists 1 lock
|
||||||
assert @file4.locked?,
|
assert @file4.locked?,
|
||||||
"File #{@file4.name} sits within #{@folder2.title} and should be locked"
|
"File #{@file4.name} sits within #{@folder2.title} and should be locked"
|
||||||
assert_equal 1, @file4.lock.count # Check the file lists 1 lock
|
assert_equal 1, @file4.lock.count # Check the file lists 1 lock
|
||||||
assert_equal 0, @file4.lock(false).count # Check the file does not list any entries for itself
|
assert_equal 0, @file4.lock(false).count # Check the file does not list any entries for itself
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_locked_folder_cannot_be_unlocked_by_someone_without_rights_or_anon
|
def test_locked_folder_cannot_be_unlocked_by_someone_without_rights_or_anon
|
||||||
|
User.current = @admin
|
||||||
|
@folder7.lock!
|
||||||
User.current = nil
|
User.current = nil
|
||||||
assert_no_difference('@folder2.lock.count') do
|
assert_no_difference('@folder7.lock.count') do
|
||||||
assert_raise DmsfLockError do
|
assert_raise DmsfLockError do
|
||||||
@folder2.unlock!
|
@folder7.unlock!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
User.current = @jsmith
|
User.current = @jsmith
|
||||||
assert_no_difference('@folder2.lock.count') do
|
assert_no_difference('@folder7.lock.count') do
|
||||||
assert_raise DmsfLockError do
|
assert_raise DmsfLockError do
|
||||||
@folder2.unlock!
|
@folder7.unlock!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -109,7 +112,7 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
|||||||
assert_nothing_raised do
|
assert_nothing_raised do
|
||||||
@folder2.unlock!
|
@folder2.unlock!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@folder2.lock!
|
@folder2.lock!
|
||||||
User.current = nil
|
User.current = nil
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user