unit tests fix & better locks' index
This commit is contained in:
parent
72843a1b03
commit
042855f428
@ -88,8 +88,8 @@ private
|
||||
end
|
||||
|
||||
def check_target_folder
|
||||
if (@target_folder && @target_folder == @file.dmsf_folder) ||
|
||||
(@target_folder.nil? && @file.dmsf_folder.nil? && @target_project == @file.project)
|
||||
if (@target_folder && (@target_folder == @file.dmsf_folder)) ||
|
||||
(@target_folder.nil? && @file.dmsf_folder.nil? && (@target_project == @file.project))
|
||||
flash[:error] = l(:error_target_folder_same)
|
||||
redirect_to action: :new, id: @file, target_project_id: @target_project.id, target_folder_id: @target_folder
|
||||
return
|
||||
|
||||
@ -28,6 +28,7 @@ class DmsfFoldersCopyController < ApplicationController
|
||||
before_action :authorize
|
||||
before_action :find_target_folder
|
||||
before_action :check_target_folder, only: [:copy, :move]
|
||||
before_action :check_source_folder, only: [:copy, :move]
|
||||
|
||||
def new
|
||||
@projects = DmsfFolder.allowed_target_projects_on_copy
|
||||
@ -102,4 +103,8 @@ class DmsfFoldersCopyController < ApplicationController
|
||||
render_403
|
||||
end
|
||||
|
||||
def check_source_folder
|
||||
render_403 if @folder.locked_for_user?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -36,7 +36,7 @@ class DmsfFile < ActiveRecord::Base
|
||||
|
||||
belongs_to :project
|
||||
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) },
|
||||
dependent: :destroy
|
||||
|
||||
@ -197,22 +197,21 @@ class DmsfFolder < ActiveRecord::Base
|
||||
|
||||
def self.directory_tree(project, current_folder = nil)
|
||||
tree = [[l(:link_documents), nil]]
|
||||
project_id = (project.is_a?(Project)) ? project.id : project
|
||||
folders = DmsfFolder.where(project_id: project_id, dmsf_folder_id: nil).visible(false).to_a
|
||||
project = Project.find(project) unless project.is_a?(Project)
|
||||
folders = project.dmsf_folders.visible(false).to_a
|
||||
# TODO: This prevents copying folders into its sub-folders too. It should be allowed.
|
||||
folders.delete(current_folder)
|
||||
#
|
||||
folders = folders.delete_if{ |f| f.locked_for_user? }
|
||||
folders.each do |folder|
|
||||
tree.push(["...#{folder.title}", folder.id])
|
||||
DmsfFolder.directory_subtree(tree, folder, 2, current_folder)
|
||||
tree.push ["...#{folder.title}", folder.id]
|
||||
DmsfFolder.directory_subtree tree, folder, 2, current_folder
|
||||
end
|
||||
return tree
|
||||
end
|
||||
|
||||
def folder_tree
|
||||
tree = [[title, id]]
|
||||
DmsfFolder.directory_subtree(tree, self, 1, nil)
|
||||
DmsfFolder.directory_subtree tree, self, 1, nil
|
||||
tree
|
||||
end
|
||||
|
||||
@ -567,19 +566,19 @@ class DmsfFolder < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
end
|
||||
classes.join(' ')
|
||||
classes.join ' '
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
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.delete(current_folder)
|
||||
folders = folder.dmsf_folders.notsystem.visible(false).to_a
|
||||
folders.delete current_folder
|
||||
folders.delete_if { |f| f.locked_for_user? }
|
||||
folders.each do |subfolder|
|
||||
unless subfolder == current_folder
|
||||
tree.push(["#{'...' * level}#{subfolder.title}", subfolder.id])
|
||||
DmsfFolder.directory_subtree(tree, subfolder, level + 1, current_folder)
|
||||
tree.push ["#{'...' * level}#{subfolder.title}", subfolder.id]
|
||||
DmsfFolder.directory_subtree tree, subfolder, level + 1, current_folder
|
||||
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!
|
||||
reload
|
||||
locks.reload
|
||||
l.reload
|
||||
l
|
||||
end
|
||||
|
||||
@ -109,7 +110,7 @@ module RedmineDmsf
|
||||
def unlock!(force_file_unlock_allowed = false)
|
||||
raise DmsfLockError.new(l(:warning_file_not_locked)) unless self.locked?
|
||||
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))
|
||||
else
|
||||
# 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
|
||||
def lock(args)
|
||||
if parent.nil? || ((parent.projectless_path != '/') && (!parent.exists?))
|
||||
if parent.nil? || ((parent.projectless_path != '/') && (!parent.exist?))
|
||||
e = DAV4Rack::LockFailure.new
|
||||
e.add_failure @path, Conflict
|
||||
raise e
|
||||
@ -462,7 +462,7 @@ module RedmineDmsf
|
||||
e.add_failure @path, NotFound
|
||||
raise e
|
||||
end
|
||||
lock_check(args[:scope])
|
||||
lock_check args[:scope]
|
||||
entity = file ? file : folder
|
||||
unless entity
|
||||
e = DAV4Rack::LockFailure.new
|
||||
@ -502,7 +502,7 @@ module RedmineDmsf
|
||||
scope = "scope_#{(args[:scope] || 'exclusive')}".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)
|
||||
@response['Lock-Token'] = 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:
|
||||
id: 3
|
||||
title: folder2.1
|
||||
title: folder3
|
||||
project_id: 2
|
||||
dmsf_folder_id: NULL
|
||||
user_id: 1
|
||||
@ -29,7 +29,7 @@ dmsf_folders_004:
|
||||
|
||||
dmsf_folders_005:
|
||||
id: 5
|
||||
title: folder3
|
||||
title: folder5
|
||||
project_id: 1
|
||||
dmsf_folder_id: 2
|
||||
user_id: 1
|
||||
|
||||
16
test/fixtures/dmsf_locks.yml
vendored
16
test/fixtures/dmsf_locks.yml
vendored
@ -2,23 +2,15 @@
|
||||
dmsf_locks_001:
|
||||
id: 1
|
||||
entity_id: 2
|
||||
user_id: 1
|
||||
entity_type: 0
|
||||
user_id: 1 # admin
|
||||
entity_type: 0 # DmsfFile
|
||||
lock_type_cd: 0
|
||||
lock_scope_cd: 0
|
||||
|
||||
dmsf_locks_002:
|
||||
id: 2
|
||||
entity_id: 2
|
||||
user_id: 1
|
||||
entity_type: 1
|
||||
user_id: 2 # jsmith
|
||||
entity_type: 1 # DmsfFolder
|
||||
lock_type_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
|
||||
|
||||
def setup
|
||||
@project = Project.find 1
|
||||
@project.enable_module! :dmsf
|
||||
@project1 = Project.find 1
|
||||
@project1.enable_module! :dmsf
|
||||
@folder1 = DmsfFolder.find 1
|
||||
@folder2 = DmsfFolder.find 2
|
||||
@folder3 = DmsfFolder.find 3
|
||||
@ -62,7 +62,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_truth
|
||||
assert_kind_of Project, @project
|
||||
assert_kind_of Project, @project1
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of DmsfFolder, @folder2
|
||||
assert_kind_of DmsfFolder, @folder3
|
||||
@ -79,7 +79,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_edit_folder_forbidden
|
||||
# Missing permissions
|
||||
get :edit, params: { id: @project, folder_id: @folder1 }
|
||||
get :edit, params: { id: @project1, folder_id: @folder1 }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
@ -87,7 +87,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
# Permissions OK
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
@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_select 'label', { text: @custom_field.name }
|
||||
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
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
@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} }
|
||||
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
|
||||
|
||||
def test_edit_folder_redirection_to_the_same_folder
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
@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,
|
||||
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
|
||||
|
||||
def test_trash_forbidden
|
||||
# Missing permissions
|
||||
get :trash, params: { id: @project }
|
||||
get :trash, params: { id: @project1 }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_trash_allowed
|
||||
# Permissions OK
|
||||
@role.add_permission! :file_delete
|
||||
get :trash, params: { id: @project }
|
||||
get :trash, params: { id: @project1 }
|
||||
assert_response :success
|
||||
assert_select 'h2', { text: l(:link_trash_bin) }
|
||||
end
|
||||
|
||||
def test_delete_forbidden
|
||||
# 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
|
||||
end
|
||||
|
||||
def test_delete_with_parmission_but_not_empty
|
||||
# Permissions OK but the folder is not empty
|
||||
@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_include l(:error_folder_is_not_empty), flash[:error]
|
||||
end
|
||||
@ -141,8 +141,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
def test_delete_locked
|
||||
# Permissions OK but the folder is locked
|
||||
@role.add_permission! :folder_manipulation
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project.id, folder_id: @folder2.id)
|
||||
get :delete, params: { id: @project, folder_id: @folder2.id, commit: false}
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder2.id)
|
||||
get :delete, params: { id: @project1, folder_id: @folder2.id, commit: false}
|
||||
assert_response :redirect
|
||||
assert_include l(:error_folder_is_locked), flash[:error]
|
||||
end
|
||||
@ -150,8 +150,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
def test_delete_ok
|
||||
# Empty and not locked folder
|
||||
@role.add_permission! :folder_manipulation
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project.id, folder_id: @folder1.id)
|
||||
get :delete, params: { id: @project, folder_id: @folder1.id, commit: false }
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder1.id)
|
||||
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false }
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
@ -159,33 +159,33 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
# Missing permissions
|
||||
@folder4.deleted = 1
|
||||
@folder4.save
|
||||
get :restore, params: { id: @project, folder_id: @folder4.id }
|
||||
get :restore, params: { id: @project1, folder_id: @folder4.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_restore_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
|
||||
@folder1.deleted = 1
|
||||
@folder1.save
|
||||
get :restore, params: { id: @project, folder_id: @folder1.id }
|
||||
get :restore, params: { id: @project1, folder_id: @folder1.id }
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
def test_delete_entries_forbidden
|
||||
# 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}"] }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_delete_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! :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}"]}
|
||||
assert_response :redirect
|
||||
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
|
||||
# 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! :folder_manipulation
|
||||
@role.add_permission! :file_delete
|
||||
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}"]}
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
@ -207,9 +207,9 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
def test_restore_entries
|
||||
# Restore
|
||||
@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
|
||||
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}"]}
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
@ -220,7 +220,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
@role.add_permission! :file_manipulation
|
||||
@role.add_permission! :folder_manipulation
|
||||
get :show, params: { id: @project.id }
|
||||
get :show, params: { id: @project1.id }
|
||||
assert_response :success
|
||||
# New file link
|
||||
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload'
|
||||
@ -239,7 +239,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
def test_show_without_file_manipulation
|
||||
@role.add_permission! :view_dmsf_files
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
get :show, params: { id: @project.id }
|
||||
get :show, params: { id: @project1.id }
|
||||
assert_response :success
|
||||
# New file link should be missing
|
||||
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload', count: 0
|
||||
@ -248,7 +248,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
def test_show_csv
|
||||
@role.add_permission! :view_dmsf_files
|
||||
@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.content_type.match?(/^text\/csv/)
|
||||
end
|
||||
@ -257,27 +257,27 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
@role.add_permission! :view_dmsf_files
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
# Despite the fact that project != @folder3.project
|
||||
assert @project != @folder3.project
|
||||
get :show, params: { id: @project.id, folder_id: @folder3.id }
|
||||
assert @project1 != @folder3.project
|
||||
get :show, params: { id: @project1.id, folder_id: @folder3.id }
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_new_forbidden
|
||||
@role.remove_permission! :folder_manipulation
|
||||
get :new, params: { id: @project, parent_id: nil }
|
||||
get :new, params: { id: @project1, parent_id: nil }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_new
|
||||
@role.add_permission! :folder_manipulation
|
||||
get :new, params: { id: @project, parent_id: nil }
|
||||
get :new, params: { id: @project1, parent_id: nil }
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_email_entries_email_from_forbidden
|
||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
|
||||
@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
|
||||
end
|
||||
|
||||
@ -285,7 +285,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
|
||||
@role.add_permission! :view_dmsf_files
|
||||
@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_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from']
|
||||
end
|
||||
@ -294,7 +294,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com'
|
||||
@role.add_permission! :view_dmsf_files
|
||||
@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_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to']
|
||||
end
|
||||
@ -303,7 +303,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1'
|
||||
@role.add_permission! :view_dmsf_files
|
||||
@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_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only']
|
||||
end
|
||||
@ -311,47 +311,49 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
def test_entries_email
|
||||
@role.add_permission! :view_dmsf_files
|
||||
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',
|
||||
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
|
||||
zip_file.unlink
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
def test_add_email
|
||||
@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
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
def test_append_email
|
||||
@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
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
def test_autocomplete_for_user
|
||||
@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
|
||||
end
|
||||
|
||||
@ -359,19 +361,19 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
@role.add_permission! :folder_manipulation
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
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
|
||||
assert_redirected_to dmsf_folder_path(id: @project, folder_id: nil)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: nil)
|
||||
end
|
||||
|
||||
def test_create_folder
|
||||
@role.add_permission! :folder_manipulation
|
||||
@role.add_permission! :view_dmsf_folders
|
||||
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' } }
|
||||
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
|
||||
@ -26,7 +26,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
fixtures :users, :email_addresses, :dmsf_files, :dmsf_file_revisions,
|
||||
: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
|
||||
@project1 = Project.find 1
|
||||
@ -34,17 +34,18 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
@project5 = Project.find 5
|
||||
@project1.enable_module! :dmsf
|
||||
@file1 = DmsfFile.find 1
|
||||
@file2 = DmsfFile.find 2
|
||||
@folder1 = DmsfFolder.find 1
|
||||
@user_admin = User.find 1
|
||||
@user_member = User.find 2
|
||||
@folder2 = DmsfFolder.find 2
|
||||
@admin = User.find 1
|
||||
@jsmith = User.find 2
|
||||
@user_non_member = User.find 3
|
||||
@role_manager = Role.find_by(name: 'Manager')
|
||||
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']
|
||||
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
|
||||
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! :view_dmsf_folders
|
||||
end
|
||||
@ -64,15 +65,17 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
assert_kind_of Project, @project2
|
||||
assert_kind_of Project, @project5
|
||||
assert_kind_of DmsfFile, @file1
|
||||
assert_kind_of DmsfFile, @file2
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of User, @user_admin
|
||||
assert_kind_of User, @user_member
|
||||
assert_kind_of DmsfFolder, @folder2
|
||||
assert_kind_of User, @admin
|
||||
assert_kind_of User, @jsmith
|
||||
assert_kind_of User, @user_non_member
|
||||
assert_kind_of Role, @role_manager
|
||||
end
|
||||
|
||||
def test_authorize_admin
|
||||
@request.session[:user_id] = @user_admin.id
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :new, params: { id: @file1.id }
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
@ -85,7 +88,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_authorize_member_no_module
|
||||
@project1.disable_module!(:dmsf)
|
||||
@project1.disable_module! :dmsf
|
||||
get :new, params: { id: @file1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
@ -133,8 +136,11 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_copy_to_locked_folder
|
||||
@folder1.lock!
|
||||
post :copy, params: { id: @file1.id, target_project_id: @file1.project.id, target_folder_id: @folder1.id }
|
||||
User.current = @admin
|
||||
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
|
||||
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
|
||||
end
|
||||
|
||||
def test_move_to_locked
|
||||
@file1.lock!
|
||||
post :move, params: { id: @file1.id, target_project_id: @file1.project.id, target_folder_id: @folder1.id }
|
||||
assert_response :redirect
|
||||
assert_equal l(:error_file_is_locked), flash[:error]
|
||||
def test_move_locked_file
|
||||
User.current = @jsmith
|
||||
assert @file2.locked_for_user?
|
||||
User.current = nil
|
||||
@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
|
||||
|
||||
def test_move_to_locked_folder
|
||||
@folder1.lock!
|
||||
post :move, params: { id: @file1.id, target_project_id: @file1.project.id, target_folder_id: @folder1.id }
|
||||
User.current = @admin
|
||||
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
|
||||
end
|
||||
|
||||
|
||||
@ -24,8 +24,8 @@ require File.expand_path('../../test_helper', __FILE__)
|
||||
class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
fixtures :users, :projects, :roles, :members, :member_roles,:enabled_modules, :dmsf_folders,
|
||||
:email_addresses
|
||||
fixtures :users, :projects, :roles, :members, :member_roles, :enabled_modules, :dmsf_folders,
|
||||
:email_addresses, :dmsf_locks
|
||||
|
||||
def setup
|
||||
@project1 = Project.find 1
|
||||
@ -35,16 +35,16 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
@folder1 = DmsfFolder.find 1
|
||||
@folder2 = DmsfFolder.find 2
|
||||
@folder6 = DmsfFolder.find 6
|
||||
@user_admin = User.find 1
|
||||
@user_member = User.find 2
|
||||
@admin = User.find 1
|
||||
@jsmith = User.find 2
|
||||
@user_non_member = User.find 3
|
||||
@role_manager = Role.where(name: 'Manager').first
|
||||
@role_manager = Role.find_by(name: 'Manager')
|
||||
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']
|
||||
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
|
||||
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! :view_dmsf_folders
|
||||
end
|
||||
@ -66,14 +66,14 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
assert_kind_of DmsfFolder, @folder1
|
||||
assert_kind_of DmsfFolder, @folder2
|
||||
assert_kind_of DmsfFolder, @folder6
|
||||
assert_kind_of User, @user_admin
|
||||
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 Role, @role_manager
|
||||
end
|
||||
|
||||
def test_authorize_admin
|
||||
@request.session[:user_id] = @user_admin.id
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :new, params: { id: @folder1.id }
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
@ -128,7 +128,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_copy_to_another_project
|
||||
@request.session[:user_id] = @user_admin.id
|
||||
@request.session[:user_id] = @admin.id
|
||||
@project2.enable_module!(:dmsf)
|
||||
assert_equal @project1.id, @folder1.project_id
|
||||
post :copy, params: { id: @folder1.id, target_project_id: @project2.id }
|
||||
@ -143,7 +143,11 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
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
|
||||
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
|
||||
end
|
||||
|
||||
def test_move_to_locked
|
||||
@folder1.lock!
|
||||
post :move, params: { id: @folder1.id, target_project_id: @folder1.project.id, target_folder_id: @folder2.id }
|
||||
def test_move_locked_folder
|
||||
User.current = @admin
|
||||
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
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
@ -199,20 +210,21 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
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 }
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
def test_move_to_another_project
|
||||
@request.session[:user_id] = @user_admin.id
|
||||
@project2.enable_module!(:dmsf)
|
||||
@request.session[:user_id] = @admin.id
|
||||
@project2.enable_module! :dmsf
|
||||
assert_equal @project1.id, @folder1.project_id
|
||||
post :move, params: { id: @folder1.id, target_project_id: @project2.id }
|
||||
assert_response :redirect
|
||||
|
||||
@ -29,19 +29,21 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
:dmsf_files, :dmsf_locks
|
||||
|
||||
def setup
|
||||
@user_member = User.find 2
|
||||
@admin = User.find 1
|
||||
@jsmith = User.find 2
|
||||
User.current = nil
|
||||
@request.session[:user_id] = @user_member.id
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
end
|
||||
|
||||
def test_truth
|
||||
assert_kind_of User, @user_member
|
||||
def test_truth
|
||||
assert_kind_of User, @admin
|
||||
assert_kind_of User, @jsmith
|
||||
end
|
||||
|
||||
def test_page_with_open_approvals_one_approval
|
||||
DmsfFileRevision.where(id: 5).delete_all
|
||||
@user_member.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||
@user_member.pref.save!
|
||||
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||
@jsmith.pref.save!
|
||||
get :page
|
||||
assert_response :success
|
||||
unless defined?(EasyExtensions)
|
||||
@ -52,8 +54,8 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_page_with_open_approvals_no_approval
|
||||
@user_member.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||
@user_member.pref.save!
|
||||
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||
@jsmith.pref.save!
|
||||
get :page
|
||||
assert_response :success
|
||||
unless defined?(EasyExtensions)
|
||||
@ -63,9 +65,10 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
end
|
||||
|
||||
def test_page_with_open_locked_documents
|
||||
@user_member.pref[:my_page_layout] = { 'top' => ['locked_documents'] }
|
||||
@user_member.pref.save!
|
||||
def test_page_with_open_locked_documents
|
||||
@request.session[:user_id] = @admin.id
|
||||
@admin.pref[:my_page_layout] = { 'top' => ['locked_documents'] }
|
||||
@admin.pref.save!
|
||||
get :page
|
||||
assert_response :success
|
||||
unless defined?(EasyExtensions)
|
||||
|
||||
@ -26,7 +26,7 @@ require 'fileutils'
|
||||
class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
|
||||
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
|
||||
@admin = credentials 'admin'
|
||||
@ -34,9 +34,13 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
@admin_user = User.find_by(login: 'admin')
|
||||
@project1 = Project.find 1
|
||||
@project1.enable_module! 'dmsf'
|
||||
@project2 = Project.find 2
|
||||
@project2.enable_module! 'dmsf'
|
||||
@project3 = Project.find 3
|
||||
@project3.enable_module! 'dmsf'
|
||||
@file1 = DmsfFile.find 1
|
||||
@file2 = DmsfFile.find 2
|
||||
@file9 = DmsfFile.find 9
|
||||
@file12 = DmsfFile.find 12
|
||||
@folder10 = DmsfFolder.find 10
|
||||
# Fix permissions for jsmith's role
|
||||
@ -53,6 +57,7 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
<d:locktype><d:write/></d:locktype>
|
||||
<d:owner>jsmith</d:owner>
|
||||
</d:lockinfo>}
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
def teardown
|
||||
@ -62,8 +67,11 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
|
||||
def test_truth
|
||||
assert_kind_of Project, @project1
|
||||
assert_kind_of Project, @project2
|
||||
assert_kind_of Project, @project3
|
||||
assert_kind_of DmsfFile, @file1
|
||||
assert_kind_of DmsfFile, @file2
|
||||
assert_kind_of DmsfFile, @file9
|
||||
assert_kind_of DmsfFile, @file12
|
||||
assert_kind_of DmsfFolder, @folder10
|
||||
assert_kind_of Role, @role
|
||||
@ -71,12 +79,11 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
end
|
||||
|
||||
def test_lock_file_already_locked_by_other
|
||||
log_user 'admin', 'admin' # login as admin
|
||||
User.current = @admin_user
|
||||
assert @file1.lock!, "File failed to be locked by #{User.current}"
|
||||
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: @xml,
|
||||
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
|
||||
assert_response :locked
|
||||
log_user 'jsmith', 'jsmith'
|
||||
process :lock, "/dmsf/webdav/#{@project2.identifier}/#{@file2.name}", params: @xml,
|
||||
headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
|
||||
assert_response :multi_status
|
||||
assert_match '<d:status>HTTP/1.1 409 Conflict</d:status>', response.body
|
||||
end
|
||||
|
||||
def test_lock_file
|
||||
@ -87,7 +94,7 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
# Time travel, will make the usec part of the time 0
|
||||
travel_to create_time do
|
||||
# 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' })
|
||||
assert_response :success
|
||||
# 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>/)
|
||||
locktoken = $1
|
||||
# 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.updated_at
|
||||
assert_equal (create_time + 1.week), l.expires_at
|
||||
@ -123,15 +131,15 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
|
||||
|
||||
travel_to refresh_time do
|
||||
# Refresh lock
|
||||
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}",
|
||||
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file9.name}",
|
||||
params: nil,
|
||||
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: locktoken })
|
||||
assert_response :success
|
||||
# 1.week = 7*24*3600=604800 seconds
|
||||
assert_match '<d:timeout>Second-604800</d:timeout>', response.body
|
||||
# Verify the lock in the db
|
||||
@file1.reload
|
||||
l = @file1.lock.first
|
||||
@file9.reload
|
||||
l = @file9.lock.first
|
||||
assert_equal create_time, l.created_at
|
||||
assert_equal refresh_time, l.updated_at
|
||||
assert_equal (refresh_time + 1.week), l.expires_at
|
||||
|
||||
@ -285,15 +285,15 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
|
||||
def test_assigned
|
||||
assert !@file1.assigned?(@admin)
|
||||
assert !@file1.assigned?(@jsmith)
|
||||
@file7.last_revision.set_workflow(@wf1.id, nil)
|
||||
@file7.last_revision.assign_workflow(@wf1.id)
|
||||
@file7.last_revision.set_workflow @wf1.id, nil
|
||||
@file7.last_revision.assign_workflow @wf1.id
|
||||
assert @file7.assigned?(@admin)
|
||||
assert @file7.assigned?(@jsmith)
|
||||
end
|
||||
|
||||
def test_locked_by
|
||||
# Locked file
|
||||
assert_equal @jsmith.name, @file2.locked_by
|
||||
assert_equal @admin.name, @file2.locked_by
|
||||
# Unlocked file
|
||||
assert_equal '', @file1.locked_by
|
||||
end
|
||||
|
||||
@ -24,7 +24,7 @@ require File.expand_path('../../test_helper', __FILE__)
|
||||
|
||||
class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles,
|
||||
:dmsf_folder_permissions
|
||||
:dmsf_folder_permissions, :dmsf_locks
|
||||
|
||||
def setup
|
||||
@project1 = Project.find 1
|
||||
@ -33,40 +33,42 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
@project2.enable_module! :dmsf
|
||||
@folder1 = DmsfFolder.find 1
|
||||
@folder2 = DmsfFolder.find 2
|
||||
@folder3 = DmsfFolder.find 3
|
||||
@folder4 = DmsfFolder.find 4
|
||||
@folder5 = DmsfFolder.find 5
|
||||
@folder6 = DmsfFolder.find 6
|
||||
@folder7 = DmsfFolder.find 7
|
||||
@manager = User.find 2
|
||||
@developer = User.find 3
|
||||
@manager_role = Role.find 1
|
||||
@jsmith = User.find 2 # Manager
|
||||
@dlopper = User.find 3 # Developer
|
||||
@manager_role = Role.find_by(name: 'Manager')
|
||||
@manager_role.add_permission! :view_dmsf_folders
|
||||
developer_role = Role.find 2
|
||||
developer_role.add_permission! :view_dmsf_folders
|
||||
User.current = @manager
|
||||
User.current = @jsmith
|
||||
end
|
||||
|
||||
def test_truth
|
||||
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, @folder5
|
||||
assert_kind_of DmsfFolder, @folder6
|
||||
assert_kind_of DmsfFolder, @folder7
|
||||
assert_kind_of Project, @project1
|
||||
assert_kind_of Project, @project2
|
||||
assert_kind_of User, @manager
|
||||
assert_kind_of User, @developer
|
||||
assert_kind_of User, @jsmith
|
||||
assert_kind_of User, @dlopper
|
||||
assert_kind_of Role, @manager_role
|
||||
end
|
||||
|
||||
def test_visiblity
|
||||
# The role has got permissions
|
||||
User.current = @manager
|
||||
User.current = @jsmith
|
||||
assert_equal 7, DmsfFolder.where(project_id: 1).all.size
|
||||
assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size
|
||||
# The user has got permissions
|
||||
User.current = @developer
|
||||
User.current = @dlopper
|
||||
# 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).all.size
|
||||
@ -77,7 +79,7 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
def test_permissions
|
||||
User.current = @developer
|
||||
User.current = @dlopper
|
||||
assert DmsfFolder.permissions?(@folder7)
|
||||
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
|
||||
@folder7.reload
|
||||
@ -148,34 +150,45 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
def test_directory_tree
|
||||
User.current = @admin
|
||||
@folder7.lock!
|
||||
User.current = @jsmith
|
||||
assert @folder7.locked_for_user?
|
||||
tree = DmsfFolder.directory_tree(@project1)
|
||||
assert tree
|
||||
# [["Documents", nil],
|
||||
# ["...folder7", 7],
|
||||
# ["...folder1", 1],
|
||||
# ["......folder2", 2] - locked
|
||||
# ["......folder2", 2]
|
||||
# [".........folder5", 5],
|
||||
# ["...folder6", 6]]
|
||||
assert tree.to_s.include?('...folder1'), "'...folder3' string in the folder tree expected."
|
||||
assert !tree.to_s.include?('......folder2'), "'......folder2' string in the folder tree not expected."
|
||||
# ["...folder7", 7] - locked
|
||||
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
|
||||
|
||||
def test_directory_tree_id
|
||||
User.current = @admin
|
||||
@folder7.lock!
|
||||
User.current = @jsmith
|
||||
assert @folder7.locked_for_user?
|
||||
tree = DmsfFolder.directory_tree(@project1.id)
|
||||
assert tree
|
||||
# [["Documents", nil],
|
||||
# ["...folder7", 7],
|
||||
# ["...folder1", 1],
|
||||
# ["......folder2", 2] - locked
|
||||
# ["......folder2", 2]
|
||||
# [".........folder5", 5],
|
||||
# ["...folder6", 6]]
|
||||
assert tree.to_s.include?('...folder1'), "'...folder3' string in the folder tree expected."
|
||||
assert !tree.to_s.include?('......folder2'), "'......folder2' string in the folder tree not expected."
|
||||
# ["...folder7", 7] - locked
|
||||
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
|
||||
|
||||
def test_folder_tree
|
||||
User.current = @admin
|
||||
tree = @folder1.folder_tree
|
||||
assert tree
|
||||
# [["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?('...folder2'), "'...folder2' string in the folder tree not expected."
|
||||
end
|
||||
|
||||
@ -28,9 +28,10 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
||||
:enumerations, :dmsf_locks
|
||||
|
||||
def setup
|
||||
@lock = dmsf_locks(:dmsf_locks_001)
|
||||
@folder2 = dmsf_folders(:dmsf_folders_002)
|
||||
@file4 = dmsf_files(:dmsf_files_004)
|
||||
@lock = DmsfLock.find 1
|
||||
@folder2 = DmsfFolder.find 2
|
||||
@folder7 = DmsfFolder.find 7
|
||||
@file4 = DmsfFile.find 4
|
||||
@jsmith = User.find 2
|
||||
@admin = User.find 1
|
||||
end
|
||||
@ -44,9 +45,9 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
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"
|
||||
assert DmsfLock.lock_types.is_a?(SimpleEnum::Enum),
|
||||
assert DmsfLock.lock_types.is_a?(SimpleEnum::Enum),
|
||||
'DmsfLock class is not enumerable'
|
||||
end
|
||||
|
||||
@ -58,7 +59,7 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
|
||||
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
|
||||
assert_kind_of DmsfFile, @lock.file
|
||||
else
|
||||
@ -66,27 +67,29 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
||||
end
|
||||
end
|
||||
|
||||
def test_locked_folder_reports_un_locked_child_file_as_locked
|
||||
assert @folder2.locked?,
|
||||
def test_locked_folder_reports_un_locked_child_file_as_locked
|
||||
assert @folder2.locked?,
|
||||
"Folder #{@folder2.title} should be locked by fixture"
|
||||
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"
|
||||
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
|
||||
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
|
||||
assert_no_difference('@folder2.lock.count') do
|
||||
assert_no_difference('@folder7.lock.count') do
|
||||
assert_raise DmsfLockError do
|
||||
@folder2.unlock!
|
||||
@folder7.unlock!
|
||||
end
|
||||
end
|
||||
User.current = @jsmith
|
||||
assert_no_difference('@folder2.lock.count') do
|
||||
assert_no_difference('@folder7.lock.count') do
|
||||
assert_raise DmsfLockError do
|
||||
@folder2.unlock!
|
||||
@folder7.unlock!
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -109,7 +112,7 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
|
||||
assert_nothing_raised do
|
||||
@folder2.unlock!
|
||||
end
|
||||
end
|
||||
end
|
||||
@folder2.lock!
|
||||
User.current = nil
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user