diff --git a/app/controllers/dmsf_files_copy_controller.rb b/app/controllers/dmsf_files_copy_controller.rb index 40ef11eb..daec9886 100644 --- a/app/controllers/dmsf_files_copy_controller.rb +++ b/app/controllers/dmsf_files_copy_controller.rb @@ -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 diff --git a/app/controllers/dmsf_folders_copy_controller.rb b/app/controllers/dmsf_folders_copy_controller.rb index 6ab18bef..d9d31a4f 100644 --- a/app/controllers/dmsf_folders_copy_controller.rb +++ b/app/controllers/dmsf_folders_copy_controller.rb @@ -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 diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 5364222b..55f7288f 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -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 diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index ea98e276..b498b918 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -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 diff --git a/db/migrate/20200813075501_change_index_in_dmsf_locks.rb b/db/migrate/20200813075501_change_index_in_dmsf_locks.rb new file mode 100644 index 00000000..6f13418c --- /dev/null +++ b/db/migrate/20200813075501_change_index_in_dmsf_locks.rb @@ -0,0 +1,33 @@ +# encoding: utf-8 +# +# Redmine plugin for Document Management System "Features" +# +# Copyright © 2011-20 Karel Pičman +# +# 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 \ No newline at end of file diff --git a/lib/redmine_dmsf/lockable.rb b/lib/redmine_dmsf/lockable.rb index 24d296b9..3d2fc7e5 100644 --- a/lib/redmine_dmsf/lockable.rb +++ b/lib/redmine_dmsf/lockable.rb @@ -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 diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 5c7efeaf..d49945b9 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -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] diff --git a/test/fixtures/dmsf_folders.yml b/test/fixtures/dmsf_folders.yml index 1b41e80a..675557b4 100644 --- a/test/fixtures/dmsf_folders.yml +++ b/test/fixtures/dmsf_folders.yml @@ -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 diff --git a/test/fixtures/dmsf_locks.yml b/test/fixtures/dmsf_locks.yml index cc9595a7..1c8c39a1 100644 --- a/test/fixtures/dmsf_locks.yml +++ b/test/fixtures/dmsf_locks.yml @@ -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 \ No newline at end of file diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb index eb4a314e..c7903ced 100644 --- a/test/functional/dmsf_controller_test.rb +++ b/test/functional/dmsf_controller_test.rb @@ -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 \ No newline at end of file diff --git a/test/functional/dmsf_files_copy_controller_test.rb b/test/functional/dmsf_files_copy_controller_test.rb index 9729c0cb..7269673b 100644 --- a/test/functional/dmsf_files_copy_controller_test.rb +++ b/test/functional/dmsf_files_copy_controller_test.rb @@ -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 diff --git a/test/functional/dmsf_folders_copy_controller_test.rb b/test/functional/dmsf_folders_copy_controller_test.rb index 0f433691..ff1d19fe 100644 --- a/test/functional/dmsf_folders_copy_controller_test.rb +++ b/test/functional/dmsf_folders_copy_controller_test.rb @@ -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 diff --git a/test/functional/my_controller_test.rb b/test/functional/my_controller_test.rb index cc978ac7..58211627 100644 --- a/test/functional/my_controller_test.rb +++ b/test/functional/my_controller_test.rb @@ -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) diff --git a/test/integration/webdav/dmsf_webdav_lock_test.rb b/test/integration/webdav/dmsf_webdav_lock_test.rb index 94639081..022f82b8 100644 --- a/test/integration/webdav/dmsf_webdav_lock_test.rb +++ b/test/integration/webdav/dmsf_webdav_lock_test.rb @@ -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 jsmith } + 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 'HTTP/1.1 409 Conflict', 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(/([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 'Second-604800', 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 diff --git a/test/unit/dmsf_file_test.rb b/test/unit/dmsf_file_test.rb index af41b0e1..18cdfc3a 100644 --- a/test/unit/dmsf_file_test.rb +++ b/test/unit/dmsf_file_test.rb @@ -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 diff --git a/test/unit/dmsf_folder_test.rb b/test/unit/dmsf_folder_test.rb index 6b77dfdf..43e23332 100644 --- a/test/unit/dmsf_folder_test.rb +++ b/test/unit/dmsf_folder_test.rb @@ -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 diff --git a/test/unit/dmsf_lock_test.rb b/test/unit/dmsf_lock_test.rb index 9e7198f8..94adff03 100644 --- a/test/unit/dmsf_lock_test.rb +++ b/test/unit/dmsf_lock_test.rb @@ -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