From ad209af0584462e933b598957a62f8448fc997e0 Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Tue, 18 Aug 2020 12:18:41 +0200 Subject: [PATCH] unit tests fix --- app/controllers/dmsf_controller.rb | 2 +- app/controllers/dmsf_files_copy_controller.rb | 4 +- app/controllers/dmsf_links_controller.rb | 4 +- app/models/dmsf_file.rb | 1 + app/models/dmsf_file_revision.rb | 1 - lib/redmine_dmsf/webdav/base_resource.rb | 1 - lib/redmine_dmsf/webdav/dmsf_resource.rb | 16 +- .../dmsf_context_menus_controller_test.rb | 70 +-- test/functional/dmsf_controller_test.rb | 104 +--- test/functional/dmsf_files_controller_test.rb | 57 +- .../dmsf_files_copy_controller_test.rb | 68 +-- ...dmsf_folder_permissions_controller_test.rb | 24 +- .../dmsf_folders_copy_controller_test.rb | 63 +-- test/functional/dmsf_links_controller_test.rb | 59 +-- .../dmsf_public_urls_controller_test.rb | 10 - test/functional/dmsf_state_controller_test.rb | 47 +- .../dmsf_workflow_controller_test.rb | 64 +-- test/functional/issues_controller_test.rb | 30 +- test/functional/my_controller_test.rb | 9 +- test/helper_test.rb | 6 +- .../rest_api/dmsf_file_api_test.rb | 48 +- .../rest_api/dmsf_folder_api_test.rb | 100 +--- .../rest_api/dmsf_link_api_test.rb | 21 +- .../dmsf_webdav_custom_middleware_test.rb | 9 +- .../webdav/dmsf_webdav_delete_test.rb | 82 +-- .../webdav/dmsf_webdav_get_test.rb | 71 +-- .../webdav/dmsf_webdav_head_test.rb | 93 +--- .../webdav/dmsf_webdav_lock_test.rb | 203 +++---- .../webdav/dmsf_webdav_mkcol_test.rb | 45 -- .../webdav/dmsf_webdav_move_test.rb | 58 -- .../webdav/dmsf_webdav_options_test.rb | 27 - .../webdav/dmsf_webdav_post_test.rb | 12 +- .../webdav/dmsf_webdav_propfind_test.rb | 61 +-- .../webdav/dmsf_webdav_put_test.rb | 500 ++++++++---------- .../webdav/dmsf_webdav_unlock_test.rb | 50 -- test/integration_test.rb | 97 +++- test/test_case.rb | 70 ++- test/unit/attachable_patch_test.rb | 1 + test/unit/dmsf_file_revision_test.rb | 31 +- test/unit/dmsf_file_test.rb | 49 +- test/unit/dmsf_folder_permission_test.rb | 7 +- test/unit/dmsf_folder_test.rb | 47 +- test/unit/dmsf_link_test.rb | 20 +- test/unit/dmsf_lock_test.rb | 20 +- test/unit/dmsf_mailer_test.rb | 43 +- test/unit/dmsf_public_url_test.rb | 15 +- test/unit/dmsf_workflow_step_action_test.rb | 6 - .../dmsf_workflow_step_assignment_test.rb | 5 - test/unit/dmsf_workflow_step_test.rb | 11 +- test/unit/dmsf_workflow_test.rb | 40 +- test/unit/project_patch_test.rb | 21 +- test/unit/user_patch_test.rb | 15 +- test/unit_test.rb | 70 ++- 53 files changed, 755 insertions(+), 1833 deletions(-) diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 7e693a9c..cd1e596a 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -297,7 +297,7 @@ class DmsfController < ApplicationController else flash[:error] = @folder.errors.full_messages.to_sentence end - redirect_to :back + redirect_back fallback_location: trash_dmsf_path(@project) end def edit_root diff --git a/app/controllers/dmsf_files_copy_controller.rb b/app/controllers/dmsf_files_copy_controller.rb index b8b91cb9..aae28d7d 100644 --- a/app/controllers/dmsf_files_copy_controller.rb +++ b/app/controllers/dmsf_files_copy_controller.rb @@ -38,8 +38,8 @@ class DmsfFilesCopyController < ApplicationController def copy new_file = @file.copy_to(@target_project, @target_folder) - unless new_file.errors.empty? - flash[:error] = new_file.errors.full_messages.to_sentence + if new_file.nil? || new_file.errors.present? + flash[:error] = new_file ? new_file.errors.full_messages.to_sentence : @file.errors.full_messages.to_sentence redirect_to action: 'new', id: @file, target_project_id: @target_project, target_folder_id: @target_folder return end diff --git a/app/controllers/dmsf_links_controller.rb b/app/controllers/dmsf_links_controller.rb index 03efbccc..d2359238 100644 --- a/app/controllers/dmsf_links_controller.rb +++ b/app/controllers/dmsf_links_controller.rb @@ -181,15 +181,13 @@ class DmsfLinksController < ApplicationController errors[:base] << e.message return false end - - redirect_to :back + redirect_back fallback_location: dmsf_folder_path(id: @project, folder_id: @dmsf_link&.dmsf_folder) end def restore if @dmsf_link.restore flash[:notice] = l(:notice_dmsf_link_restored) end - redirect_to :back end diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 8476d520..49e78643 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -305,6 +305,7 @@ class DmsfFile < ActiveRecord::Base if new_revision.save file.set_last_revision new_revision else + errors[:base] << new_revision.errors.full_messages.to_sentence Rails.logger.error new_revision.errors.full_messages.to_sentence file.delete(true) file = nil diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index f8ee722b..038a7e89 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -315,7 +315,6 @@ class DmsfFileRevision < ActiveRecord::Base def create_digest begin self.digest = Digest::SHA256.file(path).hexdigest - puts ">>> #{self.digest}, #{self.digest.lengt}" rescue => e Rails.logger.error e.message self.digest = 0 diff --git a/lib/redmine_dmsf/webdav/base_resource.rb b/lib/redmine_dmsf/webdav/base_resource.rb index f0ec6ed8..00b78e58 100644 --- a/lib/redmine_dmsf/webdav/base_resource.rb +++ b/lib/redmine_dmsf/webdav/base_resource.rb @@ -147,7 +147,6 @@ module RedmineDmsf def projectless_path i = 1 project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - puts ">>> project_names = #{project_names}" while true prj = nil pinfo = @path.split('/').drop(i) diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index c945bc3f..199d0cf4 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -29,7 +29,6 @@ module RedmineDmsf include Redmine::I18n def initialize(path, request, response, options) - puts ">>> initialize for #{path}" @folder = nil @file = nil @subproject = nil @@ -453,14 +452,8 @@ module RedmineDmsf # Lock def lock(args) - puts ">>> lock: #{parent.nil?}, #{parent.projectless_path}, #{parent.exist?}" - puts ">>> projectless_path: #{parent.projectless_path}" if parent.nil? || ((parent.projectless_path != '/') && (!parent.exist?)) e = DAV4Rack::LockFailure.new - puts ">>> Conflict 1" - puts ">>> #{@path}" - puts ">>> #{parent&.name}" - puts ">>> #{parent&.exist?}" e.add_failure @path, Conflict raise e end @@ -525,14 +518,7 @@ module RedmineDmsf # Token based unlock (authenticated) will ensure that a correct token is sent, further ensuring # ownership of token before permitting unlock def unlock(token) - unless exist? - puts ">>> exists? => false" - puts ">>> #{subproject&.name}" - puts ">>> #{folder&.title}" - puts ">>> #{file&.name}" - puts ">>> #{project&.name}" - return NotFound - end + return NotFound unless exist? if token.nil? || token.empty? || (token == '<(null)>') || User.current.anonymous? BadRequest else diff --git a/test/functional/dmsf_context_menus_controller_test.rb b/test/functional/dmsf_context_menus_controller_test.rb index 4e583ad4..462a8239 100644 --- a/test/functional/dmsf_context_menus_controller_test.rb +++ b/test/functional/dmsf_context_menus_controller_test.rb @@ -28,34 +28,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase :dmsf_files, :dmsf_file_revisions, :dmsf_links def setup - @user_member = User.find 2 # John Smith - manager - @user_member3 = User.find 3 # Foo - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @file1 = DmsfFile.find 1 - @folder1 = DmsfFolder.find 1 - @folder5 = DmsfFolder.find 5 + super @file_link2 = DmsfLink.find 2 @file_link6 = DmsfLink.find 6 @folder_link1 = DmsfLink.find 1 @url_link5 = DmsfLink.find 5 User.current = nil - @request.session[:user_id] = @user_member.id - @role1 = Role.find 1 # Manager - end - - def test_truth - assert_kind_of User, @user_member - assert_kind_of User, @user_member3 - assert_kind_of Project, @project1 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder5 - assert_kind_of DmsfLink, @file_link2 - assert_kind_of DmsfLink, @file_link6 - assert_kind_of DmsfLink, @folder_link1 - assert_kind_of DmsfLink, @url_link5 - assert_kind_of Role, @role1 + @request.session[:user_id] = @jsmith.id end def test_dmsf_file @@ -71,8 +50,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_file_locked - @file1.lock! - get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } + get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] } assert_response :success assert_select 'a.icon-edit.disabled', text: l(:button_edit) assert_select 'a.icon-unlock', text: l(:button_unlock) @@ -82,23 +60,14 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_file_locked_force_unlock_permission_off - l = @file1.lock! - l.user = @user_member3 - l.save - @role1.remove_permission! :force_file_unlock - @role1.add_permission! :file_manipulation - get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } + get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] } assert_response :success assert_select 'a.icon-unlock.disabled', text: l(:button_unlock) end def test_dmsf_file_locked_force_unlock_permission_on - l = @file1.lock! - l.user = @user_member3 - l.save - @role1.add_permission! :force_file_unlock - @role1.add_permission! :file_manipulation - get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } + @role_developer.add_permission! :force_file_unlock + get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] } assert_response :success assert_select 'a.icon-unlock.disabled', text: l(:button_unlock), count: 0 end @@ -112,7 +81,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_file_manipulation_permission_off - @role1.remove_permission! :file_manipulation + @role_manager.remove_permission! :file_manipulation get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a.icon-edit.disabled', text: l(:button_edit) @@ -122,7 +91,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_file_manipulation_permission_on - @role1.add_permission! :file_manipulation get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit) @@ -132,28 +100,27 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_file_email_permission_off - @role1.remove_permission! :email_document + @role_manager.remove_permission! :email_documents get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a.icon-email.disabled', text: l(:field_mail) end def test_dmsf_file_email_permission_on - @role1.remove_permission! :email_document + @role_manager.remove_permission! :email_document get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a:not(icon-email.disabled)', text: l(:field_mail) end def test_dmsf_file_delete_permission_off - @role1.remove_permission! :file_delete + @role_manager.remove_permission! :file_manipulation get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a.icon-del.disabled', text: l(:button_delete) end def test_dmsf_file_delete_permission_on - @role1.remove_permission! :file_delete get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a:not(icon-del.disabled)', text: l(:button_delete) @@ -229,7 +196,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_folder_manipulation_permmissions_off - @role1.remove_permission! :folder_manipulation + @role_manager.remove_permission! :folder_manipulation get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] } assert_response :success assert_select 'a.icon-edit.disabled', text: l(:button_edit) @@ -239,8 +206,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_folder_manipulation_permmissions_on - @role1.add_permission! :folder_manipulation - #assert !@folder5.locked? get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] } assert_response :success assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit) @@ -250,14 +215,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_dmsf_folder_email_permmissions_off - @role1.remove_permission! :email_documents + @role_manager.remove_permission! :email_documents get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] } assert_response :success assert_select 'a.icon-email.disabled', text: l(:field_mail) end def test_dmsf_folder_email_permmissions_on - @role1.add_permission! :email_documents get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] } assert_response :success assert_select 'a:not(icon-email.disabled)', text: l(:field_mail) @@ -306,7 +270,8 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_trash_file_manipulation_permissions_off - @role1.remove_permission! :file_manipulation + @role_manager.remove_permission! :file_delete + @role_manager.remove_permission! :file_manipulation get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a.icon-cancel.disabled', text: l(:title_restore) @@ -314,7 +279,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_trash_file_manipulation_permissions_on - @role1.add_permission! :file_manipulation get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore) @@ -322,14 +286,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_trash_file_delete_permissions_off - @role1.remove_permission! :file_delete + @role_manager.remove_permission! :file_delete get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a.icon-del.disabled', text: l(:button_delete) end def test_trash_file_delete_permissions_on - @role1.add_permission! :file_delete get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } assert_response :success assert_select 'a:not(icon-del.disabled)', text: l(:button_delete) @@ -343,7 +306,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_trash_folder_manipulation_permissions_off - @role1.remove_permission! :folder_manipulation + @role_manager.remove_permission! :folder_manipulation get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] } assert_response :success assert_select 'a.icon-cancel.disabled', text: l(:title_restore) @@ -351,7 +314,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase end def test_trash_folder_manipulation_permissions_on - @role1.add_permission! :folder_manipulation get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] } assert_response :success assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore) diff --git a/test/functional/dmsf_controller_test.rb b/test/functional/dmsf_controller_test.rb index c7903ced..e9732765 100644 --- a/test/functional/dmsf_controller_test.rb +++ b/test/functional/dmsf_controller_test.rb @@ -29,64 +29,24 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase :dmsf_files, :dmsf_file_revisions, :dmsf_folder_permissions, :dmsf_locks def setup - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @folder1 = DmsfFolder.find 1 - @folder2 = DmsfFolder.find 2 - @folder3 = DmsfFolder.find 3 - @folder4 = DmsfFolder.find 4 - @folder7 = DmsfFolder.find 7 - @file1 = DmsfFile.find 1 + super @file_link2 = DmsfLink.find 4 @folder_link1 = DmsfLink.find 1 - @role = Role.find 1 @custom_field = CustomField.find 21 @custom_value = CustomValue.find 21 - @folder7 = DmsfFolder.find 7 - @manager = User.find 2 #1 User.current = nil - @request.session[:user_id] = @manager.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 + @request.session[:user_id] = @jsmith.id end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder2 - assert_kind_of DmsfFolder, @folder3 - assert_kind_of DmsfFolder, @folder4 - assert_kind_of DmsfFolder, @folder7 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfLink, @file_link2 - assert_kind_of DmsfLink, @folder_link1 - assert_kind_of Role, @role - assert_kind_of CustomField, @custom_field - assert_kind_of CustomValue, @custom_value - assert_kind_of User, @manager - end - + def test_edit_folder_forbidden # Missing permissions + @role_manager.remove_permission! :folder_manipulation get :edit, params: { id: @project1, folder_id: @folder1 } assert_response :forbidden end def test_edit_folder_allowed # Permissions OK - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation get :edit, params: { id: @project1, folder_id: @folder1} assert_response :success assert_select 'label', { text: @custom_field.name } @@ -94,16 +54,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_edit_folder_redirection_to_the_parent_folder - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation 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: @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: @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 } } @@ -112,13 +68,13 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_trash_forbidden # Missing permissions + @role_manager.remove_permission! :file_delete get :trash, params: { id: @project1 } assert_response :forbidden end def test_trash_allowed # Permissions OK - @role.add_permission! :file_delete get :trash, params: { id: @project1 } assert_response :success assert_select 'h2', { text: l(:link_trash_bin) } @@ -126,13 +82,13 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_delete_forbidden # Missing permissions + @role_manager.remove_permission! :folder_manipulation 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: @project1, folder_id: @folder1.id, commit: false} assert_response :redirect assert_include l(:error_folder_is_not_empty), flash[:error] @@ -140,7 +96,6 @@ 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: @project1.id, folder_id: @folder2.id) get :delete, params: { id: @project1, folder_id: @folder2.id, commit: false} assert_response :redirect @@ -149,7 +104,6 @@ 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: @project1.id, folder_id: @folder1.id) get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false } assert_response :redirect @@ -157,16 +111,16 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_restore_forbidden # Missing permissions + @role_developer.remove_permission! :folder_manipulation @folder4.deleted = 1 @folder4.save - get :restore, params: { id: @project1, folder_id: @folder4.id } + get :restore, params: { id: @folder4.project.id, folder_id: @folder4.id } assert_response :forbidden end def test_restore_ok # Permissions OK @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) - @role.add_permission! :folder_manipulation @folder1.deleted = 1 @folder1.save get :restore, params: { id: @project1, folder_id: @folder1.id } @@ -175,6 +129,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_delete_entries_forbidden # Missing permissions + @role_manager.remove_permission! :folder_manipulation 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 @@ -183,8 +138,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_delete_not_empty # Permissions OK but the folder is not empty @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: @project1, delete_entries: 'Delete', ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]} assert_response :redirect @@ -194,9 +147,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_delete_entries_ok # Permissions OK @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: @project1, delete_entries: 'Delete', ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@file_link2.id}"]} @@ -206,7 +156,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_restore_entries # Restore - @role.add_permission! :view_dmsf_files @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) flash[:error] = nil get :entries_operation, params: { id: @project1, restore_entries: 'Restore', @@ -216,10 +165,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_show - @role.add_permission! :view_dmsf_files - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_manipulation - @role.add_permission! :folder_manipulation get :show, params: { id: @project1.id } assert_response :success # New file link @@ -237,8 +182,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_show_without_file_manipulation - @role.add_permission! :view_dmsf_files - @role.add_permission! :view_dmsf_folders + @role_manager.remove_permission! :file_manipulation get :show, params: { id: @project1.id } assert_response :success # New file link should be missing @@ -246,16 +190,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_show_csv - @role.add_permission! :view_dmsf_files - @role.add_permission! :view_dmsf_folders get :show, params: { id: @project1.id, format: 'csv' } assert_response :success assert @response.content_type.match?(/^text\/csv/) end def test_show_folder_doesnt_correspond_the_project - @role.add_permission! :view_dmsf_files - @role.add_permission! :view_dmsf_folders # Despite the fact that project != @folder3.project assert @project1 != @folder3.project get :show, params: { id: @project1.id, folder_id: @folder3.id } @@ -263,28 +203,25 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_new_forbidden - @role.remove_permission! :folder_manipulation + @role_manager.remove_permission! :folder_manipulation get :new, params: { id: @project1, parent_id: nil } assert_response :forbidden end def test_new - @role.add_permission! :folder_manipulation get :new, params: { id: @project1, parent_id: nil } assert_response :success end def test_email_entries_email_from_forbidden + @role_manager.remove_permission! :email_documents Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com' - @role.add_permission! :view_dmsf_files get :entries_operation, params: {id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} assert_response :forbidden end def test_email_entries_email_from 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: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} assert_response :success assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] @@ -292,8 +229,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_email_entries_reply_to 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: @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'] @@ -301,15 +236,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase def test_email_entries_links_only 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: @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 def test_entries_email - @role.add_permission! :view_dmsf_files zip_file = Tempfile.new('test', DmsfHelper::temp_dir) get :entries_email, params: { id: @project1, email: { @@ -323,43 +255,39 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase end def test_add_email_forbidden - @role.remove_permission! :view_dmsf_files + @role_manager.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: @project1.id }, xhr: true assert_response :success end def test_append_email_forbidden - @role.remove_permission! :view_dmsf_files + @role_manager.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: @project1, user_ids: @project1.members.collect{ |m| m.user.id }, format: 'js'} assert_response :success end def test_autocomplete_for_user_forbidden + @role_manager.remove_permission! :view_dmsf_files 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: @project1 }, xhr: true assert_response :success end def test_create_folder_in_root - @role.add_permission! :folder_manipulation - @role.add_permission! :view_dmsf_folders assert_difference 'DmsfFolder.count', +1 do post :create, params: { id: @project1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } } end @@ -367,8 +295,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase 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: @project1.id, parent_id: @folder1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } } diff --git a/test/functional/dmsf_files_controller_test.rb b/test/functional/dmsf_files_controller_test.rb index 3591d296..bf0a83ce 100644 --- a/test/functional/dmsf_files_controller_test.rb +++ b/test/functional/dmsf_files_controller_test.rb @@ -28,90 +28,65 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase :enabled_modules, :dmsf_file_revisions def setup - @project = Project.find 1 - @project.enable_module! :dmsf - @file = DmsfFile.find 1 - @role = Role.find 1 - User.current = nil - @request.session[:user_id] = 2 - @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 - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project - assert_kind_of DmsfFile, @file - assert_kind_of Role, @role + super + @request.session[:user_id] = @jsmith.id end def test_show_file_ok # Permissions OK - @role.add_permission! :view_dmsf_files - get :show, params: { id: @file.id } + get :show, params: { id: @file1.id } assert_response :success end def test_show_file_forbidden # Missing permissions - get :show, params: { id: @file.id } + @role_manager.remove_permission! :view_dmsf_files + get :show, params: { id: @file1.id } assert_response :forbidden end def test_view_file_ok # Permissions OK - @role.add_permission! :view_dmsf_files - get :view, params: { id: @file.id } + get :view, params: { id: @file1.id } assert_response :success end def test_view_file_forbidden # Missing permissions - get :view, params: { id: @file.id } + @role_manager.remove_permission! :view_dmsf_files + get :view, params: { id: @file1.id } assert_response :forbidden end def delete_forbidden # Missing permissions - delete @file, params: { commit: false } + @role_manager.remove_permission! :file_manipulation + delete @file1, params: { commit: false } assert_response :forbidden end def delete_locked # Permissions OK but the file is locked - @role.add_permission! :file_delete - delete @file, params: { commit: false } + delete @file2, params: { commit: false } assert_response :redirect assert_include l(:error_file_is_locked), flash[:error] end def delete_ok # Permissions OK and not locked - flash[:error].clear - @file.unlock! - delete @file, params: { commit: false } + delete @file1, params: { commit: false } assert_response :redirect assert_equal 0, flash[:error].size end def test_obsolete_revision_ok - @role.add_permission! :file_manipulation - get :obsolete_revision, params: { id: @file.last_revision.id } - assert_redirected_to action: 'show', id: @file + get :obsolete_revision, params: { id: @file1.last_revision.id } + assert_redirected_to action: 'show', id: @file1 end def test_obsolete_revision_missing_permissions - get :obsolete_revision, params: { id: @file.last_revision.id } + @role_manager.remove_permission! :file_manipulation + get :obsolete_revision, params: { id: @file1.last_revision.id } assert :forbiden end diff --git a/test/functional/dmsf_files_copy_controller_test.rb b/test/functional/dmsf_files_copy_controller_test.rb index e03aa806..49459512 100644 --- a/test/functional/dmsf_files_copy_controller_test.rb +++ b/test/functional/dmsf_files_copy_controller_test.rb @@ -29,49 +29,8 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase :enabled_modules, :dmsf_file_revisions, :dmsf_folders, :dmsf_locks def setup - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project2 = Project.find 2 - @project5 = Project.find 5 - @file1 = DmsfFile.find 1 - @file2 = DmsfFile.find 2 - @folder1 = DmsfFolder.find 1 - @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 + super @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 - @role_manager.add_permission! :file_manipulation - @role_manager.add_permission! :view_dmsf_folders - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - 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 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 @@ -82,7 +41,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase end def test_authorize_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id get :new, params: { id: @file1.id } assert_response :forbidden end @@ -142,20 +101,19 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase end def test_copy_to_dmsf_not_enabled - @project5.disable_module! :dmsf - post :copy, params: { id: @file1.id, target_project_id: @project5.id } + @project2.disable_module! :dmsf + post :copy, params: { id: @file1.id, target_project_id: @project2.id } assert_response :forbidden end def test_copy_to_dmsf_enabled - @project5.enable_module! :dmsf - post :copy, params: { id: @file1.id, target_project_id: @project5.id } + post :copy, params: { id: @file1.id, target_project_id: @project2.id } assert_response :redirect - assert_nil flash[:error] + assert flash[:error].empty? end def test_copy_to_as_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id post :copy, params: { id: @file1.id, target_project_id: @project2.id } assert_response :forbidden end @@ -173,7 +131,6 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase end def test_move_locked_file - @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 @@ -185,21 +142,20 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase end def test_move_to_dmsf_not_enabled - @project5.disable_module! :dmsf - post :move, params: { id: @file1.id, target_project_id: @project5.id } + @project2.disable_module! :dmsf + post :move, params: { id: @file9.id, target_project_id: @project2.id } assert_response :forbidden end def test_move_to_dmsf_enabled - @project5.enable_module! :dmsf - post :move, params: { id: @file1.id, target_project_id: @project5.id } + post :move, params: { id: @file9.id, target_project_id: @project2.id } assert_response :redirect assert_nil flash[:error] end def test_move_to_as_non_member - @request.session[:user_id] = @user_non_member.id - post :move, params: { id: @file1.id, target_project_id: @project2.id } + @request.session[:user_id] = @someone.id + post :move, params: { id: @file9.id, target_project_id: @project2.id } assert_response :forbidden end diff --git a/test/functional/dmsf_folder_permissions_controller_test.rb b/test/functional/dmsf_folder_permissions_controller_test.rb index 88f0c075..80bf3ca4 100644 --- a/test/functional/dmsf_folder_permissions_controller_test.rb +++ b/test/functional/dmsf_folder_permissions_controller_test.rb @@ -26,24 +26,8 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase :email_addresses def setup - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @folder7 = DmsfFolder.find 7 - @manager = User.find 2 - @developer = User.find 3 - @manager_role = Role.find 1 - User.current = nil - @request.session[:user_id] = @manager.id - @manager_role.add_permission! :view_dmsf_folders - @manager_role.add_permission! :folder_manipulation - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of DmsfFolder, @folder7 - assert_kind_of User, @manager - assert_kind_of User, @developer - assert_kind_of Role, @manager_role + super + @request.session[:user_id] = @jsmith.id end def test_new @@ -57,11 +41,11 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase get :autocomplete_for_user, params: { project_id: @project1, dmsf_folder_id: @folder7, q: 'smi', format: 'js' }, xhr: true assert_response :success - assert_include 'John Smith', response.body + assert_include @jsmith.name, response.body end def test_append - get :new, params: { project_id: @project1, dmsf_folder_id: @folder7, user_ids: [@manager.id], format: 'js' }, + get :new, params: { project_id: @project1, dmsf_folder_id: @folder7, user_ids: [@jsmith.id], format: 'js' }, xhr: true assert_response :success assert_template 'new' diff --git a/test/functional/dmsf_folders_copy_controller_test.rb b/test/functional/dmsf_folders_copy_controller_test.rb index 35299d87..76f1ee8d 100644 --- a/test/functional/dmsf_folders_copy_controller_test.rb +++ b/test/functional/dmsf_folders_copy_controller_test.rb @@ -28,48 +28,8 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase :email_addresses, :dmsf_locks def setup - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project2 = Project.find 2 - @project2.enable_module! :dmsf - @project5 = Project.find 5 - @folder1 = DmsfFolder.find 1 - @folder2 = DmsfFolder.find 2 - @folder6 = DmsfFolder.find 6 - @admin = User.find 1 - @jsmith = User.find 2 - @user_non_member = User.find 3 - @role_manager = Role.find_by(name: 'Manager') - User.current = nil + super @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 - @role_manager.add_permission! :folder_manipulation - @role_manager.add_permission! :view_dmsf_folders - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project5 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder2 - assert_kind_of DmsfFolder, @folder6 - 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 @@ -80,7 +40,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase end def test_authorize_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id get :new, params: { id: @folder1.id } assert_response :not_found end @@ -129,7 +89,6 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase def test_copy_to_another_project @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 } assert_response :redirect @@ -149,19 +108,19 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase end def test_copy_to_dmsf_not_enabled - post :copy, params: { id: @folder6.id, target_project_id: @project5.id } + @project2.disable_module! :dmsf + post :copy, params: { id: @folder6.id, target_project_id: @project2.id } assert_response :forbidden end def test_copy_to_dmsf_enabled - @project5.enable_module! :dmsf - post :copy, params: { id: @folder6.id, target_project_id: @project5.id } + post :copy, params: { id: @folder6.id, target_project_id: @project2.id } assert_response :redirect assert_nil flash[:error] end def test_copy_to_as_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id post :copy, params: { id: @folder6.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id } assert_response :not_found end @@ -185,8 +144,6 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase end def test_move_locked_folder - User.current.id = @admin.id - assert @folder2.locked_for_user? @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 @@ -199,19 +156,19 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase end def test_move_to_dmsf_not_enabled - post :move, params: { id: @folder6.id, target_project_id: @project5.id } + @project2.disable_module! :dmsf + post :move, params: { id: @folder6.id, target_project_id: @project2.id } assert_response :forbidden end def test_move_to_dmsf_enabled - @project5.enable_module! :dmsf - post :move, params: { id: @folder6.id, target_project_id: @project5.id } + post :move, params: { id: @folder6.id, target_project_id: @project2.id } assert_response :redirect assert_nil flash[:error] end def test_move_to_as_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id post :move, params: { id: @folder6.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id } assert_response :not_found end diff --git a/test/functional/dmsf_links_controller_test.rb b/test/functional/dmsf_links_controller_test.rb index b05898a0..3298333a 100644 --- a/test/functional/dmsf_links_controller_test.rb +++ b/test/functional/dmsf_links_controller_test.rb @@ -28,79 +28,39 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase :dmsf_file_revisions, :dmsf_folders, :dmsf_links, :roles, :member_roles def setup - @user_admin = User.find 1 - @user_member = User.find 2 - @user_non_member = User.find 3 - @role_manager = Role.find_by(name: 'Manager') - assert_not_nil @role_manager - @role_manager.add_permission! :file_manipulation - @role_developer = Role.find_by(name: 'Developer') - assert_not_nil @role_developer - @role_developer.add_permission! :file_manipulation - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project2 = Project.find 2 - @project2.enable_module! :dmsf - @folder1 = DmsfFolder.find 1 # project1/folder1 - @folder2 = DmsfFolder.find 2 # project1/folder1/folder2 - @folder3 = DmsfFolder.find 3 # project2/folder3 - @file1 = DmsfFile.find 1 # project1/file1 - @file2 = DmsfFile.find 2 # project2/file2 - @file4 = DmsfFile.find 4 # project1/folder2/file4 - @file6 = DmsfFile.find 6 # project2/folder3/file6 + super @file_link = DmsfLink.find 1 - @request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder1.id) - @request.session[:user_id] = @user_member.id - User.current = nil - end - - def test_truth - assert_kind_of User, @user_admin - assert_kind_of User, @user_member - assert_kind_of User, @user_non_member - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Role, @role_manager - assert_kind_of Role, @role_developer - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder2 - assert_kind_of DmsfFolder, @folder3 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file2 - assert_kind_of DmsfFile, @file4 - assert_kind_of DmsfFile, @file6 - assert_kind_of DmsfLink, @file_link + @request.session[:user_id] = @jsmith.id end def test_authorize_admin - @request.session[:user_id] = @user_admin.id + @request.session[:user_id] = @admin.id get :new, params: { project_id: @project1.id } assert_response :success assert_template 'new' end def test_authorize_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id get :new, params: { project_id: @project2.id } assert_response :forbidden end def test_authorize_member_ok - @request.session[:user_id] = @user_member.id + @request.session[:user_id] = @jsmith.id get :new, params: { project_id: @project1.id } assert_response :success end def test_authorize_member_no_module # Without the module - @project1.disable_module!(:dmsf) + @project1.disable_module! :dmsf get :new, params: { project_id: @project1.id } assert_response :forbidden end def test_authorize_forbidden # Without permissions - @project1.enable_module!(:dmsf) @role_manager.remove_permission! :file_manipulation get :new, params: { project_id: @project1.id } assert_response :forbidden @@ -113,7 +73,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase end def test_new_fast_links_enabled - member = Member.where(user_id: @user_member.id, project_id: @project1.id).first + member = Member.find_by(user_id: @jsmith.id, project_id: @project1.id) assert member member.update_attribute :dmsf_fast_links, true get :new, params: { project_id: @project1.id, type: 'link_to'} @@ -344,7 +304,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase assert_difference 'DmsfLink.visible.count', -1 do delete :destroy, params: { project_id: @project1.id, id: @file_link.id } end - assert_redirected_to dmsf_folder_path(id: @project1.id, folder_id: @folder1.id) + assert_redirected_to dmsf_folder_path(id: @file_link&.project, folder_id: @file_link&.dmsf_folder) end def test_restore_forbidden @@ -357,8 +317,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase def test_restore_ok # Permissions OK - @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) - @role_manager.add_permission! :file_manipulation + @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) get :restore, params: { project_id: @project1.id, id: @file_link.id } assert_response :redirect end diff --git a/test/functional/dmsf_public_urls_controller_test.rb b/test/functional/dmsf_public_urls_controller_test.rb index a084430e..ff46f496 100644 --- a/test/functional/dmsf_public_urls_controller_test.rb +++ b/test/functional/dmsf_public_urls_controller_test.rb @@ -25,16 +25,6 @@ class DmsfPublicUrlsControllerTest < RedmineDmsf::Test::TestCase fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls - def setup - @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 - end - - def teardown - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - def test_show_valid_url get :show, params: { token: 'd8d33e21914a433b280fdc94450ee212' } assert_response :success diff --git a/test/functional/dmsf_state_controller_test.rb b/test/functional/dmsf_state_controller_test.rb index f7e0b34a..04361546 100644 --- a/test/functional/dmsf_state_controller_test.rb +++ b/test/functional/dmsf_state_controller_test.rb @@ -27,54 +27,37 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles def setup - @user_admin = User.find 1 # Redmine admin - @user_member = User.find 2 # John Smith - manager - @user_non_member = User.find 3 # Dave Lopper - @project = Project.find 1 - @project.enable_module! :dmsf - @role_manager = Role.find_by(name: 'Manager') - User.current = nil + super + @request.session[:user_id] = @jsmith.id end - - def test_truth - assert_kind_of User, @user_admin - assert_kind_of User, @user_member - assert_kind_of User, @user_non_member - assert_kind_of Project, @project - assert_kind_of Role, @role_manager - end - + def test_user_pref_save_member - # Member - @request.session[:user_id] = @user_member.id + assert @project1 @role_manager.add_permission! :user_preferences - post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' } - assert_redirected_to settings_project_path(@project, tab: 'dmsf') + post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' } + assert_redirected_to settings_project_path(@project1, tab: 'dmsf') assert_not_nil flash[:notice] assert_equal flash[:notice], l(:notice_your_preferences_were_saved) end def test_user_pref_save_member_forbidden - # Member - @request.session[:user_id] = @user_member.id - post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' } + @role_manager.remove_permission! :user_preferences + post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' } assert_response :forbidden end - + def test_user_pref_save_none_member # Non Member - @request.session[:user_id] = @user_non_member.id - @role_manager.add_permission! :user_preferences - post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' } + @request.session[:user_id] = @someone.id + post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' } assert_response :forbidden end - + def test_user_pref_save_admin # Admin - non member - @request.session[:user_id] = @user_admin.id - @role_manager.add_permission! :user_preferences - post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' } - assert_redirected_to settings_project_path(@project, tab: 'dmsf') + @request.session[:user_id] = @admin.id + post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' } + assert_redirected_to settings_project_path(@project1, tab: 'dmsf') assert_not_nil flash[:warning] assert_equal flash[:warning], l(:user_is_not_project_member) end diff --git a/test/functional/dmsf_workflow_controller_test.rb b/test/functional/dmsf_workflow_controller_test.rb index 7adad137..732dcfec 100644 --- a/test/functional/dmsf_workflow_controller_test.rb +++ b/test/functional/dmsf_workflow_controller_test.rb @@ -29,56 +29,24 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase :dmsf_file_revisions, :dmsf_files def setup - @user_admin = User.find 1 # Redmine admin - @user_member = User.find 2 # John Smith - manager - @user_non_member = User.find 3 # Dave Lopper - @role_manager = Role.find_by(name: 'Manager') - @role_manager.add_permission! :file_manipulation - @role_manager.add_permission! :manage_workflows - @role_manager.add_permission! :file_approval - @role_manager.add_permission! :view_dmsf_files + super @wfs1 = DmsfWorkflowStep.find 1 # step 1 @wfs2 = DmsfWorkflowStep.find 2 # step 2 @wfs3 = DmsfWorkflowStep.find 3 # step 1 @wfs4 = DmsfWorkflowStep.find 4 # step 2 @wfs5 = DmsfWorkflowStep.find 5 # step 3 - @project1 = Project.find 1 - @project1.enable_module! :dmsf @wf1 = DmsfWorkflow.find 1 @wf3 = DmsfWorkflow.find 3 @wfsa2 = DmsfWorkflowStepAssignment.find 2 @revision1 = DmsfFileRevision.find 1 @revision2 = DmsfFileRevision.find 2 - @file1 = DmsfFile.find 1 - @file2 = DmsfFile.find 2 @request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id) - User.current = nil - @request.session[:user_id] = @user_member.id - end - - def test_truth - assert_kind_of User, @user_admin - assert_kind_of User, @user_member - assert_kind_of User, @user_non_member - assert_kind_of Role, @role_manager - assert_kind_of DmsfWorkflowStep, @wfs1 - assert_kind_of DmsfWorkflowStep, @wfs2 - assert_kind_of DmsfWorkflowStep, @wfs3 - assert_kind_of DmsfWorkflowStep, @wfs4 - assert_kind_of DmsfWorkflowStep, @wfs5 - assert_kind_of Project, @project1 - assert_kind_of DmsfWorkflow, @wf1 - assert_kind_of DmsfWorkflow, @wf3 - assert_kind_of DmsfWorkflowStepAssignment, @wfsa2 - assert_kind_of DmsfFileRevision, @revision1 - assert_kind_of DmsfFileRevision, @revision2 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file2 + @request.session[:user_id] = @jsmith.id end def test_authorize_admin # Admin - @request.session[:user_id] = @user_admin.id + @request.session[:user_id] = @admin.id get :index assert_response :success assert_template 'index' @@ -86,7 +54,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase def test_authorize_member # Non member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id get :index, params: { project_id: @project1.id } assert_response :forbidden end @@ -136,7 +104,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase end def test_index_administration - @request.session[:user_id] = @user_admin.id + @request.session[:user_id] = @admin.id get :index assert_response :success assert_template 'index' @@ -161,7 +129,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase end def test_unlock - @request.session[:user_id] = @user_admin.id + @request.session[:user_id] = @admin.id put :update, params: { id: @wf3.id, dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE }} @wf3.reload assert @wf3.active?, "#{@wf3.name} status is #{@wf3.status}" @@ -197,14 +165,14 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase def test_add_step assert_difference 'DmsfWorkflowStep.count', +1 do post :add_step, params: { commit: l(:dmsf_or), step: 1, name: '1st step', id: @wf1.id, - user_ids: [@user_non_member.id] } + user_ids: [@someone.id] } end assert_response :success ws = DmsfWorkflowStep.order(id: :desc).first assert_equal @wf1.id, ws.dmsf_workflow_id assert_equal 1, ws.step assert_equal '1st step', ws.name - assert_equal @user_non_member.id, ws.user_id + assert_equal @someone.id, ws.user_id assert_equal DmsfWorkflowStep::OPERATOR_OR, ws.operator end @@ -329,14 +297,14 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase id: @wf1.id, dmsf_workflow_step_assignment_id: @wfsa2.id, dmsf_file_revision_id: @revision2.id, - step_action: @user_admin.id * 10, + step_action: @admin.id * 10, note: 'Delegated because...'}) assert_redirected_to dmsf_folder_path(id: @project1.id) assert DmsfWorkflowStepAction.where( dmsf_workflow_step_assignment_id: @wfsa2.id, action: DmsfWorkflowStepAction::ACTION_DELEGATE).first @wfsa2.reload - assert_equal @wfsa2.user_id, @user_admin.id + assert_equal @wfsa2.user_id, @admin.id end def test_assign @@ -398,10 +366,10 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase id: @wf1, step: '1', operator_step: { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s }, - assignee: { @wfs1.id.to_s => @user_non_member.id.to_s }} + assignee: { @wfs1.id.to_s => @someone.id.to_s }} assert_response :redirect @wfs1.reload - assert_equal @user_non_member.id, @wfs1.user_id + assert_equal @someone.id, @wfs1.user_id end def test_delete_step @@ -415,27 +383,27 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase end def test_log_non_member - @request.session[:user_id] = @user_non_member.id + @request.session[:user_id] = @someone.id get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true assert_response :forbidden end def test_log_member_local_wf - @request.session[:user_id] = @user_member.id + @request.session[:user_id] = @jsmith.id get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true assert_response :success assert_template :log end def test_log_member_global_wf - @request.session[:user_id] = @user_member.id + @request.session[:user_id] = @jsmith.id get :log, params: { id: @wf3.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true assert_response :success assert_template :log end def test_log_admin - @request.session[:user_id] = @user_admin.id + @request.session[:user_id] = @admin.id get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true assert_response :success assert_template :log diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index b7ffde5d..d962c1ac 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -28,35 +28,9 @@ class IssuesControllerTest < RedmineDmsf::Test::TestCase :enabled_modules, :enumerations, :issue_statuses def setup - @user_manager = User.find 2 - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project1.enable_module! :issue_tracking - @project2 = Project.find 2 - @project2.enable_module! :dmsf - @project2.enable_module! :issue_tracking + super @issue1 = Issue.find 1 - @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 - User.current = nil - @request.session[:user_id] = @user_manager.id - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Issue, @issue1 + @request.session[:user_id] = @jsmith.id end def test_put_update_with_project_change diff --git a/test/functional/my_controller_test.rb b/test/functional/my_controller_test.rb index 58211627..bb15ad73 100644 --- a/test/functional/my_controller_test.rb +++ b/test/functional/my_controller_test.rb @@ -29,15 +29,8 @@ class MyControllerTest < RedmineDmsf::Test::TestCase :dmsf_files, :dmsf_locks def setup - @admin = User.find 1 - @jsmith = User.find 2 - User.current = nil + super @request.session[:user_id] = @jsmith.id - end - - def test_truth - assert_kind_of User, @admin - assert_kind_of User, @jsmith end def test_page_with_open_approvals_one_approval diff --git a/test/helper_test.rb b/test/helper_test.rb index c97075ff..1fc3caa8 100644 --- a/test/helper_test.rb +++ b/test/helper_test.rb @@ -29,11 +29,11 @@ module RedmineDmsf # Ultimately it allows for better integration without blowing redmine fixtures up, # and allowing us to suppliment redmine fixtures if we need to. def self.fixtures(*table_names) - dir = File.join( File.dirname(__FILE__), '/fixtures') + dir = File.join(File.dirname(__FILE__), 'fixtures') table_names.each do |x| - ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml") + ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml")) end - super(table_names) + super table_names end end end diff --git a/test/integration/rest_api/dmsf_file_api_test.rb b/test/integration/rest_api/dmsf_file_api_test.rb index 6d15f13b..1044a3ed 100644 --- a/test/integration/rest_api/dmsf_file_api_test.rb +++ b/test/integration/rest_api/dmsf_file_api_test.rb @@ -24,42 +24,16 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest include Redmine::I18n - fixtures :projects, :users, :dmsf_files, :dmsf_file_revisions, :members, :roles, :member_roles + fixtures :projects, :users, :email_addresses, :dmsf_files, :dmsf_file_revisions, :members, :roles, + :member_roles, :dmsf_locks def setup - @admin = User.find 1 - @jsmith = User.find 2 - @file1 = DmsfFile.find 1 + super Setting.rest_api_enabled = '1' - @role = Role.find_by(name: 'Manager') - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @token = Token.create!(user: @jsmith, action: 'api') - @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 - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of User, @admin - assert_kind_of User, @jsmith - assert_kind_of DmsfFile, @file1 - assert_kind_of Role, @role - assert_kind_of Project, @project1 + @token = Token.create!(user: @jsmith_user, action: 'api') end def test_get_document - @role.add_permission! :view_dmsf_files #curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} http://localhost:3000/dmsf/files/17216.xml get "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}" assert_response :success @@ -131,7 +105,6 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest end def test_upload_document - @role.add_permission! :file_manipulation #curl --data-binary "@cat.gif" -H "Content-Type: application/octet-stream" -X POST -u ${1}:${2} http://localhost:3000/projects/12/dmsf/upload.xml?filename=cat.gif post "/projects/#{@project1.id}/dmsf/upload.xml?filename=test.txt&key=#{@token.value}", params: 'File content', headers: { "CONTENT_TYPE" => 'application/octet-stream' } assert_response :created @@ -174,24 +147,23 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest end def test_delete_file - @role.add_permission! :file_delete # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response :success @file1.reload assert_equal DmsfFile::STATUS_DELETED, @file1.deleted - assert_equal @jsmith, @file1.deleted_by_user + assert_equal @jsmith_user, @file1.deleted_by_user end def test_delete_file_no_permissions - token = Token.create!(user: @jsmith, action: 'api') + @role.remove_permission! :file_delete + token = Token.create!(user: @jsmith_user, action: 'api') # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml delete "/dmsf/files/#{@file1.id}.xml?key=#{token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response :forbidden end def test_delete_folder_commit_yes - @role.add_permission! :file_delete # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml&commit=yes delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}&commit=yes", headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response :success @@ -199,9 +171,9 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest end def test_delete_file_locked - @role.add_permission! :file_delete - User.current = @admin + User.current = @admin_user @file1.lock! + User.current = nil # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response 422 @@ -209,7 +181,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest # # Locked by Admin # - assert_select 'errors > error', text: l(:title_locked_by_user, user: @admin.name) + assert_select 'errors > error', text: l(:title_locked_by_user, user: @admin_user.name) @file1.reload assert_equal DmsfFile::STATUS_ACTIVE, @file1.deleted end diff --git a/test/integration/rest_api/dmsf_folder_api_test.rb b/test/integration/rest_api/dmsf_folder_api_test.rb index 2ea034f2..9a4caad5 100644 --- a/test/integration/rest_api/dmsf_folder_api_test.rb +++ b/test/integration/rest_api/dmsf_folder_api_test.rb @@ -24,49 +24,18 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest include Redmine::I18n - fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :projects, :users, :members, :roles, - :member_roles + fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :projects, :users, :email_addresses, :members, + :roles, :member_roles, :dmsf_locks def setup - @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 - @admin = User.find 1 - @jsmith = User.find 2 - @file1 = DmsfFile.find 1 - @folder1 = DmsfFolder.find 1 - @folder7 = DmsfFolder.find 7 + super Setting.rest_api_enabled = '1' - @role = Role.find_by(name: 'Manager') - @project1 = Project.find 1 - @project1.enable_module! :dmsf - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of User, @admin - assert_kind_of User, @jsmith - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder7 - assert_kind_of DmsfFile, @file1 - assert_kind_of Role, @role - assert_kind_of Project, @project1 + @token = Token.create!(user: @jsmith_user, action: 'api') end def test_list_folder - @role.add_permission! :view_dmsf_folders - token = Token.create!(user: @jsmith, action: 'api') #curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} http://localhost:3000/dmsf/files/17216.xml - get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}" + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}" assert_response :success assert_equal 'application/xml', @response.content_type # @@ -86,10 +55,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest end def test_list_folder_limit_and_offset - @role.add_permission! :view_dmsf_folders - token = Token.create!(user: @jsmith, action: 'api') #curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} "http://localhost:3000/dmsf/files/17216.xml?limit=1&offset=1" - get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&limit=1&offset=2" + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&limit=1&offset=2" assert_response :success assert_equal 'application/xml', @response.content_type # @@ -109,8 +76,6 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest end def test_create_folder - @role.add_permission! :folder_manipulation - token = Token.create!(user: @jsmith, action: 'api') #curl -v -H "Content-Type: application/xml" -X POST --data "@folder.xml" -u ${1}:${2} http://localhost:3000/projects/12/dmsf/create.xml payload = %{ @@ -118,7 +83,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest A folder created via REST API } - post "/projects/#{@project1.identifier}/dmsf/create.xml?key=#{token.value}", params: payload, headers: { 'CONTENT_TYPE' => 'application/xml' } + post "/projects/#{@project1.identifier}/dmsf/create.xml?key=#{@token.value}", params: payload, headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response :success # # @@ -129,10 +94,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest end def test_find_folder_by_title - @role.add_permission! :view_dmsf_folders - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000/projects/1/dmsf.json?folder_title=Updated%20title - get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_title=#{@folder1.title}" + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_title=#{@folder1.title}" assert_response :success assert_equal 'application/xml', @response.content_type # @@ -157,18 +120,14 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest end def test_find_folder_by_title_not_found - @role.add_permission! :view_dmsf_folders - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000/projects/1/dmsf.json?folder_title=Updated%20title - get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_title=xxx" + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_title=xxx" assert_response :not_found end def test_find_folder_by_id - @role.add_permission! :view_dmsf_folders - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KE" http://localhost:3000/projects/1/dmsf.json?folder_id=3 - get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_id=#{@folder1.id}" + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_id=#{@folder1.id}" assert_response :success assert_equal 'application/xml', @response.content_type # @@ -193,23 +152,19 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest end def test_find_folder_by_id_not_found - @role.add_permission! :view_dmsf_folders - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KE" http://localhost:3000/projects/1/dmsf.json?folder_id=3 - get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_id=none" + get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_id=none" assert_response :not_found end def test_update_folder - @role.add_permission! :folder_manipulation - token = Token.create!(user: @jsmith, action: 'api') #curl -v -H "Content-Type: application/json" -X POST --data "@update-folder-payload.json" -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000//projects/#{project_id}/dmsf/save.json payload = %{ rest_api A folder updated via REST API } - post "/projects/#{@project1.identifier}/dmsf/save.xml?folder_id=1&key=#{token.value}", params: payload, headers: { 'CONTENT_TYPE' => 'application/xml' } + post "/projects/#{@project1.identifier}/dmsf/save.xml?folder_id=1&key=#{@token.value}", params: payload, headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response :success # # @@ -221,43 +176,34 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest end def test_delete_folder - @role.add_permission! :folder_manipulation - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3 - delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}", + delete "/projects/#{@folder6.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder6.id}", headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response :success - @folder1.reload - assert_equal DmsfFolder::STATUS_DELETED, @folder1.deleted - assert_equal @jsmith, @folder1.deleted_by_user + @folder6.reload + assert_equal DmsfFolder::STATUS_DELETED, @folder6.deleted + assert_equal @jsmith_user, @folder6.deleted_by_user end def test_delete_folder_no_permission - token = Token.create!(user: @jsmith, action: 'api') + @role.remove_permission! :folder_manipulation # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3 - delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}", + delete "/projects/#{@folder6.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder6.id}", headers: {'CONTENT_TYPE' => 'application/xml'} assert_response :forbidden end def test_delete_folder_commit_yes - @role.add_permission! :folder_manipulation - assert !@folder1.locked? - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3 - delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}&commit=yes", + delete "/projects/#{@folder6.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder6.id}&commit=yes", headers: { CONTENT_TYPE: 'application/xml' } assert_response :success - assert_nil DmsfFolder.find_by(id: @folder1.id) + assert_nil DmsfFolder.find_by(id: @folder6.id) end def test_delete_folder_locked - @role.add_permission! :folder_manipulation - User.current = @admin - @folder1.lock! - token = Token.create!(user: @jsmith, action: 'api') # curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3 - delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}", + delete "/projects/#{@folder2.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder2.id}", headers: { 'CONTENT_TYPE' => 'application/xml' } assert_response 422 # @@ -265,8 +211,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest # Folder is locked # assert_select 'errors > error', text: l(:error_folder_is_locked) - @folder1.reload - assert_equal DmsfFolder::STATUS_ACTIVE, @folder1.deleted + @folder2.reload + assert_equal DmsfFolder::STATUS_ACTIVE, @folder2.deleted end end \ No newline at end of file diff --git a/test/integration/rest_api/dmsf_link_api_test.rb b/test/integration/rest_api/dmsf_link_api_test.rb index 9605f31e..8df39d0f 100644 --- a/test/integration/rest_api/dmsf_link_api_test.rb +++ b/test/integration/rest_api/dmsf_link_api_test.rb @@ -24,29 +24,16 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfLinkApiTest < RedmineDmsf::Test::IntegrationTest include Redmine::I18n - fixtures :projects, :users, :dmsf_files, :dmsf_file_revisions, :members, :roles, :member_roles + fixtures :projects, :users, :email_addresses, :dmsf_files, :dmsf_file_revisions, :members, :roles, + :member_roles def setup - @admin = User.find 1 - @jsmith = User.find 2 - @file1 = DmsfFile.find 1 + super Setting.rest_api_enabled = '1' - @role = Role.find 1 - @project1 = Project.find 1 - @project1.enable_module! :dmsf - end - - def test_truth - assert_kind_of User, @admin - assert_kind_of User, @jsmith - assert_kind_of DmsfFile, @file1 - assert_kind_of Role, @role - assert_kind_of Project, @project1 end def test_create_link - @role.add_permission! :file_manipulation - token = Token.create!(user: @jsmith, action: 'api') + token = Token.create!(user: @jsmith_user, action: 'api') name = 'REST API link test' # curl -v -H "Content-Type: application/xml" -X POST --data "@link.xml" -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000/dmsf_links.xml payload = %{ diff --git a/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb b/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb index 64a2db61..7c0810c3 100644 --- a/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb +++ b/test/integration/webdav/dmsf_webdav_custom_middleware_test.rb @@ -23,14 +23,7 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfWebdavCustomMiddlewareTest < RedmineDmsf::Test::IntegrationTest - def setup - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - end - - def teardown - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - end + fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles, :dmsf_folders, :dmsf_files def test_options_for_root_path process :options, '/' diff --git a/test/integration/webdav/dmsf_webdav_delete_test.rb b/test/integration/webdav/dmsf_webdav_delete_test.rb index 21d6b987..db9ada81 100644 --- a/test/integration/webdav/dmsf_webdav_delete_test.rb +++ b/test/integration/webdav/dmsf_webdav_delete_test.rb @@ -25,61 +25,10 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest include Redmine::I18n - fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, + fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @project1 = Project.find 1 - @project2 = Project.find 2 - @project3 = Project.find 3 # Sub-project of project 1 - @role = Role.find_by(name: 'Manager') - @folder1 = DmsfFolder.find 1 - @folder6 = DmsfFolder.find 6 - @folder10 = DmsfFolder.find 10 - @file1 = DmsfFile.find 1 - @file12 = DmsfFile.find 12 - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - @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 # Enable DMSF module - @project3.enable_module! :dmsf - User.current = nil - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder6 - assert_kind_of DmsfFolder, @folder10 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file12 - assert_kind_of Role, @role - end - def test_not_authenticated delete '/dmsf/webdav' assert_response :unauthorized @@ -135,6 +84,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_unathorized_user + @role.remove_permission! :view_dmsf_folders delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith assert_response :not_found # Without folder_view permission, he will not even be aware of its existence. @file1.reload @@ -142,15 +92,15 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_unathorized_user_forbidden - @role.add_permission! :view_dmsf_folders + @role.remove_permission! :file_delete delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith - assert_response :forbidden # Now jsmith's role has view_folder rights, however they do not hold file manipulation rights. + assert_response :forbidden @file1.reload assert !@file1.deleted?, "File #{@file1.name} is expected to exist" end def test_view_folder_not_allowed - @role.add_permission! :file_manipulation + @role.remove_permission! :view_dmsf_folders delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, headers: @jsmith assert_response :not_found # Without folder_view permission, he will not even be aware of its existence. @folder1.reload @@ -158,7 +108,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_folder_manipulation_not_allowed - @role.add_permission! :view_dmsf_folders + @role.remove_permission! :folder_manipulation delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, headers: @jsmith assert_response :forbidden # Without manipulation permission, action is forbidden. @folder1.reload @@ -169,12 +119,10 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @admin assert_response :success @folder6.reload - assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist" + assert @folder6.deleted?, "Folder #{@folder6.title} is not expected to exist" end def test_folder_delete_by_user - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith assert_response :success @folder6.reload @@ -183,8 +131,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest def test_folder_delete_by_user_with_project_names Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith assert_response :not_found p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) @@ -202,8 +148,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_file_delete_by_user - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_delete delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith assert_response :success @file1.reload @@ -211,9 +155,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_file_delete_by_user_with_project_names - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_delete + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith assert_response :not_found p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) @@ -224,15 +166,11 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_folder_delete_fragments - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/#frament=HTTP/1.1", params: nil, headers: @jsmith assert_response :bad_request end def test_locked_folder - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation @folder6.lock! delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith assert_response :locked @@ -241,8 +179,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_locked_file - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_delete @file1.lock! delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith assert_response :locked @@ -251,8 +187,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest end def test_non_versioned_file - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_delete delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith assert_response :success # The file should be destroyed diff --git a/test/integration/webdav/dmsf_webdav_get_test.rb b/test/integration/webdav/dmsf_webdav_get_test.rb index dfe3f3a5..1508e48c 100644 --- a/test/integration/webdav/dmsf_webdav_get_test.rb +++ b/test/integration/webdav/dmsf_webdav_get_test.rb @@ -27,57 +27,6 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @project1 = Project.find 1 - @project2 = Project.find 2 - @project3 = Project.find 3 - @file1 = DmsfFile.find 1 - @file2 = DmsfFile.find 2 - @folder1 = DmsfFolder.find 1 - @folder3 = DmsfFolder.find 3 - @folder10 = DmsfFolder.find 10 - @file12 = DmsfFile.find 12 - @role = Role.find_by(name: 'Manager') - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - @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 - User.current = nil - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - 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, @file12 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder3 - assert_kind_of DmsfFolder, @folder10 - assert_kind_of Role, @role - end - def test_should_deny_anonymous get '/dmsf/webdav' assert_response :unauthorized @@ -129,7 +78,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest end def test_should_return_status_200_when_dmsf_not_enabled_for_project - assert !@project2.module_enabled?('dmsf') + @project2.disable_module! :dmsf get "/dmsf/webdav/#{@project2.identifier}", params: nil, headers: @jsmith assert_response :success # Folders and files are not listed @@ -138,8 +87,6 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest end def test_should_not_list_files_without_permissions - assert @project1.module_enabled?('dmsf') - @role.add_permission! :view_dmsf_folders @role.remove_permission! :view_dmsf_files get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith assert_response :success @@ -149,9 +96,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest end def test_should_not_list_folders_without_permissions - assert @project1.module_enabled?('dmsf') @role.remove_permission! :view_dmsf_folders - @role.add_permission! :view_dmsf_files get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith assert_response :success # Folders are not listed @@ -175,7 +120,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest assert_response :success folder = DmsfFolder.find_by(id: 1) assert_not_nil folder - assert response.body.match(folder.title), + assert response.body.match(@folder1.title), "Expected to find #{folder.title} in return data" file = DmsfFile.find_by(id: 1) assert_not_nil file @@ -189,43 +134,33 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest end def test_user_assigned_to_archived_project - @project1.enable_module! :dmsf @project1.archive get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith assert_response :not_found end def test_user_assigned_to_project_folder_ok - @project1.enable_module! :dmsf - @role.add_permission! :view_dmsf_folders - @role.add_permission! :view_dmsf_files get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith assert_response :success end def test_user_assigned_to_project_file_forbidden - @project1.enable_module! :dmsf - @role.add_permission! :view_dmsf_folders + @role.remove_permission! :view_dmsf_files get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith assert_response :forbidden end def test_user_assigned_to_project_file_ok - @project1.enable_module! :dmsf - @role.add_permission! :view_dmsf_folders - @role.add_permission! :view_dmsf_files get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith assert_response :success end def test_get_file_in_subproject - @project3.enable_module! :dmsf get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin assert_response :success end def test_get_folder_in_subproject - @project3.enable_module! :dmsf get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin assert_response :success end diff --git a/test/integration/webdav/dmsf_webdav_head_test.rb b/test/integration/webdav/dmsf_webdav_head_test.rb index ced177ca..93cd98b0 100644 --- a/test/integration/webdav/dmsf_webdav_head_test.rb +++ b/test/integration/webdav/dmsf_webdav_head_test.rb @@ -25,51 +25,7 @@ require File.expand_path('../../../test_helper', __FILE__) class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, - :enabled_modules, :dmsf_folders - - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @project1 = Project.find 1 - @project1.enable_module! 'dmsf' - @project2 = Project.find 2 - @project3 = Project.find 3 - @folder10 = DmsfFolder.find 10 - @file12 = DmsfFile.find 12 - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - @project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - @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 - User.current = nil - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - assert_kind_of DmsfFolder, @folder10 - assert_kind_of DmsfFile, @file12 - end + :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions def test_head_requires_authentication head "/dmsf/webdav/#{@project1.identifier}" @@ -81,7 +37,7 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin assert_response :success check_headers_exist - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin assert_response :not_found head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin @@ -96,8 +52,8 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest def test_head_responds_to_file head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :success - check_headers_exist # Note it'll allow 1 out of the 3 expected to fail - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + check_headers_exist + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin assert_response :not_found head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin @@ -141,48 +97,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest end def test_head_file_in_subproject - @project3.enable_module! :dmsf # Flag module enabled - head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin - assert_response :success - end + head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin + assert_response :success + end def test_head_folder_in_subproject - @project3.enable_module! :dmsf # Flag module enabled head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin assert_response :success end - private - - def check_headers_exist - assert !(response.headers.nil? || response.headers.empty?), - 'Head returned without headers' # Headers exist? - values = {} - values[:etag] = { optional: true, content: response.headers['Etag'] } - values[:content_type] = response.headers['Content-Type'] - values[:last_modified] = { optional: true, content: response.headers['Last-Modified'] } - single_optional = false - values.each do |key,val| - if val.is_a?(Hash) - if val[:optional].nil? || !val[:optional] - assert(!(val[:content].nil? || val[:content].empty?), "Expected header #{key} was empty." ) if single_optional - else - single_optional = true - end - else - assert !(val.nil? || val.empty?), "Expected header #{key} was empty." - end - end - end - - def check_headers_dont_exist - assert !(response.headers.nil? || response.headers.empty?), 'Head returned without headers' # Headers exist? - values = {} - values[:etag] = response.headers['Etag'] - values[:last_modified] = response.headers['Last-Modified'] - values.each do |key,val| - assert (val.nil? || val.empty?), "Expected header #{key} should be empty." - end - end - end diff --git a/test/integration/webdav/dmsf_webdav_lock_test.rb b/test/integration/webdav/dmsf_webdav_lock_test.rb index a195af3c..0405f1f1 100644 --- a/test/integration/webdav/dmsf_webdav_lock_test.rb +++ b/test/integration/webdav/dmsf_webdav_lock_test.rb @@ -29,144 +29,101 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @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 - @role = Role.find_by(name: 'Manager') - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation - @role.add_permission! :view_dmsf_files - @role.add_permission! :file_manipulation - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + super @xml = %{ jsmith } - User.current = nil end - def teardown - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy + def test_lock_file_already_locked_by_other + log_user 'admin', 'admin' + process :lock, "/dmsf/webdav/#{@file2.project.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_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 - assert_kind_of User, @admin_user + def test_lock_file + log_user 'jsmith', 'jsmith' + create_time = Time.utc(2000, 1, 2, 3, 4, 5) + refresh_time = Time.utc(2000, 1, 2, 6, 7, 8) + lock_token = nil + + # Time travel, will make the usec part of the time 0 + travel_to create_time do + # Lock file + process :lock, "/dmsf/webdav/#{@file9.project.identifier}/#{@file9.name}", params: @xml, + headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) + assert_response :success + # Verify the response + # + # + # + # + # exclusive + # write + # infinity + # Second-604800 + # + # f5762389-6b49-4482-9a4b-ff1c8f975765 + # + # + # + # + assert_match 'exclusive', response.body + assert_match 'write', response.body + assert_match 'infinity', response.body + # 1.week = 7*24*3600=604800 seconds + assert_match 'Second-604800', response.body + assert_match(/([a-z0-9\-]+)<\/d:href><\/d:locktoken>/, response.body) + # Extract the locktoken, needed when refreshing the lock + response.body.match(/([a-z0-9\-]+)<\/d:href><\/d:locktoken>/) + lock_token = $1 + # Verify the lock in the db + @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 + end + + travel_to refresh_time do + # Refresh lock + process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file9.name}", + params: nil, + headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: lock_token }) + assert_response :success + # 1.week = 7*24*3600=604800 seconds + assert_match 'Second-604800', response.body + # Verify the lock in the db + @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 + end end - # def test_lock_file_already_locked_by_other - # log_user 'admin', 'admin' - # process :lock, "/dmsf/webdav/#{@file2.project.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 - # log_user 'jsmith', 'jsmith' - # create_time = Time.utc(2000, 1, 2, 3, 4, 5) - # refresh_time = Time.utc(2000, 1, 2, 6, 7, 8) - # lock_token = nil - # - # # Time travel, will make the usec part of the time 0 - # travel_to create_time do - # # Lock file - # process :lock, "/dmsf/webdav/#{@file9.project.identifier}/#{@file9.name}", params: @xml, - # headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) - # assert_response :success - # # Verify the response - # # - # # - # # - # # - # # exclusive - # # write - # # infinity - # # Second-604800 - # # - # # f5762389-6b49-4482-9a4b-ff1c8f975765 - # # - # # - # # - # # - # assert_match 'exclusive', response.body - # assert_match 'write', response.body - # assert_match 'infinity', response.body - # # 1.week = 7*24*3600=604800 seconds - # assert_match 'Second-604800', response.body - # assert_match(/([a-z0-9\-]+)<\/d:href><\/d:locktoken>/, response.body) - # # Extract the locktoken, needed when refreshing the lock - # response.body.match(/([a-z0-9\-]+)<\/d:href><\/d:locktoken>/) - # lock_token = $1 - # # Verify the lock in the db - # @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 - # end - # - # travel_to refresh_time do - # # Refresh lock - # process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file9.name}", - # params: nil, - # headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: lock_token }) - # assert_response :success - # # 1.week = 7*24*3600=604800 seconds - # assert_match 'Second-604800', response.body - # # Verify the lock in the db - # @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 - # end - # end - # - # def test_lock_file_in_subproject - # log_user 'admin', 'admin' - # process :lock, "/dmsf/webdav/#{@file12.project.parent.identifier}/#{@file12.project.identifier}/#{@file12.name}", - # params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) - # assert_response :success - # end - # - # def test_lock_folder_in_subproject - # log_user 'admin', 'admin' - # process :lock, - # "/dmsf/webdav/#{@folder10.project.parent.identifier}/#{@folder10.project.identifier}/#{@folder10.title}", - # params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) - # assert_response :success - # end + def test_lock_file_in_subproject + log_user 'admin', 'admin' + process :lock, "/dmsf/webdav/#{@file12.project.parent.identifier}/#{@file12.project.identifier}/#{@file12.name}", + params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) + assert_response :success + end + + def test_lock_folder_in_subproject + log_user 'admin', 'admin' + process :lock, + "/dmsf/webdav/#{@folder10.project.parent.identifier}/#{@folder10.project.identifier}/#{@folder10.title}", + params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) + assert_response :success + end def test_lock_subproject log_user 'admin', 'admin' - puts ">>> process lock" process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}", params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) assert_response :multi_status diff --git a/test/integration/webdav/dmsf_webdav_mkcol_test.rb b/test/integration/webdav/dmsf_webdav_mkcol_test.rb index 640bdff3..be4fcfe1 100644 --- a/test/integration/webdav/dmsf_webdav_mkcol_test.rb +++ b/test/integration/webdav/dmsf_webdav_mkcol_test.rb @@ -27,51 +27,6 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project2 = Project.find 2 - @project3 = Project.find 3 - @project3.enable_module! :dmsf - @role = Role.find_by(name: 'Manager') - @role.add_permission! :folder_manipulation - @role.add_permission! :view_dmsf_folders - @folder6 = DmsfFolder.find 6 - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - @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 - User.current = nil - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - assert_kind_of Role, @role - assert_kind_of DmsfFolder, @folder6 - end - def test_mkcol_requires_authentication process :mkcol, '/dmsf/webdav/test1' assert_response :unauthorized diff --git a/test/integration/webdav/dmsf_webdav_move_test.rb b/test/integration/webdav/dmsf_webdav_move_test.rb index dc05886a..7d087ef4 100644 --- a/test/integration/webdav/dmsf_webdav_move_test.rb +++ b/test/integration/webdav/dmsf_webdav_move_test.rb @@ -27,64 +27,6 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions - - def setup - @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 - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @jsmith_user = User.find_by(login: 'jsmith') - @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 - @file10 = DmsfFile.find 10 - @file12 = DmsfFile.find 12 - @folder1 = DmsfFolder.find 1 - @folder10 = DmsfFolder.find 10 - @role = Role.find 1 - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation - @role.add_permission! :file_manipulation - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - assert_kind_of Role, @role - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file10 - assert_kind_of DmsfFile, @file12 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder10 - assert_kind_of User, @jsmith_user - assert_kind_of User, @admin_user - end def test_move_denied_for_anonymous new_name = "#{@file1.name}.moved" diff --git a/test/integration/webdav/dmsf_webdav_options_test.rb b/test/integration/webdav/dmsf_webdav_options_test.rb index 4d0c6b04..b83da717 100644 --- a/test/integration/webdav/dmsf_webdav_options_test.rb +++ b/test/integration/webdav/dmsf_webdav_options_test.rb @@ -27,33 +27,6 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @project1 = Project.find 1 - @project2 = Project.find 2 - @project3 = Project.find 3 - @project3.enable_module! :dmsf - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - end - - def teardown - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - end - def test_options_requires_no_authentication_for_root_level process :options, '/dmsf/webdav' assert_response :success diff --git a/test/integration/webdav/dmsf_webdav_post_test.rb b/test/integration/webdav/dmsf_webdav_post_test.rb index b1bf6f2f..b707aa70 100644 --- a/test/integration/webdav/dmsf_webdav_post_test.rb +++ b/test/integration/webdav/dmsf_webdav_post_test.rb @@ -26,17 +26,7 @@ class DmsfWebdavPostTest < RedmineDmsf::Test::IntegrationTest fixtures :users, :email_addresses - def setup - @admin = credentials 'admin' - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - end - - def teardown - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - end - - # Test that any post request is authenticated + # Test that any post request is authenticated def test_post_request_authenticated post '/dmsf/webdav/' assert_response :unauthorized diff --git a/test/integration/webdav/dmsf_webdav_propfind_test.rb b/test/integration/webdav/dmsf_webdav_propfind_test.rb index 1f8c7c5f..9219d7c6 100644 --- a/test/integration/webdav/dmsf_webdav_propfind_test.rb +++ b/test/integration/webdav/dmsf_webdav_propfind_test.rb @@ -28,67 +28,20 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project2 = Project.find 2 - @project2.enable_module! :dmsf - @project3 = Project.find 3 - @project3.enable_module! :dmsf - @folder1 = DmsfFolder.find 1 - @folder6 = DmsfFolder.find 6 - @folder10 = DmsfFolder.find 10 - @file1 = DmsfFile.find 1 - @file9 = DmsfFile.find 9 - @file10 = DmsfFile.find 10 - @file12 = DmsfFile.find 12 - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - # Temporarily enable project names to generate names for project1 - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) - @project1_uri = Addressable::URI.escape(@project1_name) - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false - end - - def teardown - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder6 - assert_kind_of DmsfFolder, @folder10 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file9 - assert_kind_of DmsfFile, @file10 - assert_kind_of DmsfFile, @file12 - end - def test_propfind_denied_for_anonymous - process :propfind, '/dmsf/webdav/', params: nil, headers: { HTTP_DEPTH: '0' } + process :propfind, '/dmsf/webdav/', params: nil, headers: @anonymous.merge!({ HTTP_DEPTH: '0' }) assert_response :unauthorized end - def test_propfind_depth0_on_root_for_non_member + def test_propfind_depth0_on_root_for_user process :propfind, '/dmsf/webdav/', params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '0' }) assert_response :multi_status assert response.body.include?('http://www.example.com:80/dmsf/webdav/') assert response.body.include?('/') end - def test_propfind_depth1_on_root_for_non_member - process :propfind, '/dmsf/webdav/', params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '1' }) + def test_propfind_depth1_on_root_for_user + process :propfind, '/dmsf/webdav/', params: nil, headers: @someone.merge!({ HTTP_DEPTH: '1' }) assert_response :multi_status assert response.body.include?('http://www.example.com:80/dmsf/webdav/') assert response.body.include?( '/') @@ -116,19 +69,19 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest end def test_propfind_depth0_on_project1_for_non_member - process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '0' }) + process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @someone.merge!({ HTTP_DEPTH: '0' }) assert_response :success end def test_propfind_depth0_on_folder1_for_non_member process :propfind, "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, - headers: @jsmith.merge!({ HTTP_DEPTH: '0' }) + headers: @someone.merge!({ HTTP_DEPTH: '0' }) assert_response :not_found end def test_propfind_depth0_on_file1_for_non_member process :propfind, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, - headers: @jsmith.merge!({ HTTP_DEPTH: '0' }) + headers: @someone.merge!({ HTTP_DEPTH: '0' }) assert_response :not_found end diff --git a/test/integration/webdav/dmsf_webdav_put_test.rb b/test/integration/webdav/dmsf_webdav_put_test.rb index 4d7edac1..c50ffab4 100644 --- a/test/integration/webdav/dmsf_webdav_put_test.rb +++ b/test/integration/webdav/dmsf_webdav_put_test.rb @@ -28,120 +28,75 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions - def setup - @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 - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @jsmith_user = User.find_by(login: 'jsmith') - @project1 = Project.find 1 - @project2 = Project.find 2 - @project3 = Project.find 3 - @project3.enable_module! :dmsf - @role = Role.find_by(name: 'Manager') - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - @dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false + def test_put_denied_unless_authenticated_root + put '/dmsf/webdav' + assert_response :unauthorized end - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names + def test_put_denied_unless_authenticated + put "/dmsf/webdav/#{@project1.identifier}" + assert_response :unauthorized end - # def test_truth - # assert_kind_of Project, @project1 - # assert_kind_of Project, @project2 - # assert_kind_of Project, @project3 - # assert_kind_of Role, @role - # assert_kind_of User, @jsmith_user - # end - # - # def test_put_denied_unless_authenticated_root - # put '/dmsf/webdav' - # assert_response :unauthorized - # end - # - # def test_put_denied_unless_authenticated - # put "/dmsf/webdav/#{@project1.identifier}" - # assert_response :unauthorized - # end - # - # def test_put_denied_with_failed_authentication_root - # put '/dmsf/webdav', params: nil, headers: credentials('admin', 'badpassword') - # assert_response :unauthorized - # end - # - # def test_put_denied_with_failed_authentication - # put "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: credentials('admin', 'badpassword') - # assert_response :unauthorized - # end - # - # def test_put_denied_at_root_level - # put '/dmsf/webdav/test.txt', params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :forbidden - # end - # - # def test_put_denied_on_folder - # put "/dmsf/webdav/#{@project1.identifier}", params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :forbidden - # end - # - # def test_put_failed_on_non_existant_project - # put '/dmsf/webdav/not_a_project/file.txt', params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :conflict # not_a_project does not exist - file.txt cannot be created - # end - # - # def test_put_as_admin_granted_on_dmsf_enabled_project - # put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', - # headers: @admin.merge!({ content_type: :text }) - # assert_response :created - # # Lets check for our file - # file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' - # assert file, 'Check for files existance' - # Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true - # project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) - # put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', - # headers: @admin.merge!({ content_type: :text }) - # assert_response :conflict - # put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :created - # end - # - # def test_put_failed_as_jsmith_on_non_dmsf_enabled_project - # @project2.disable_module! :dmsf - # put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :forbidden - # # Lets check for our file - # file = DmsfFile.find_file_by_name @project2, nil, 'test-1234.txt' - # assert_nil file, 'Check for files existance' - # end - # - # def test_put_failed_when_no_permission - # @project1.enable_module! :dmsf - # @role.remove_permission! :file_manipulation - # put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :forbidden - # end + def test_put_denied_with_failed_authentication_root + put '/dmsf/webdav', params: nil, headers: credentials('admin', 'badpassword') + assert_response :unauthorized + end + + def test_put_denied_with_failed_authentication + put "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: credentials('admin', 'badpassword') + assert_response :unauthorized + end + + def test_put_denied_at_root_level + put '/dmsf/webdav/test.txt', params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :forbidden + end + + def test_put_denied_on_folder + put "/dmsf/webdav/#{@project1.identifier}", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :forbidden + end + + def test_put_failed_on_non_existant_project + put '/dmsf/webdav/not_a_project/file.txt', params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :conflict # not_a_project does not exist - file.txt cannot be created + end + + def test_put_as_admin_granted_on_dmsf_enabled_project + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', + headers: @admin.merge!({ content_type: :text }) + assert_response :created + # Lets check for our file + file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' + assert file, 'Check for files existance' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true + project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', + headers: @admin.merge!({ content_type: :text }) + assert_response :conflict + put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :created + end + + def test_put_failed_as_jsmith_on_non_dmsf_enabled_project + @project2.disable_module! :dmsf + put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :forbidden + # Lets check for our file + file = DmsfFile.find_file_by_name @project2, nil, 'test-1234.txt' + assert_nil file, 'Check for files existance' + end + + def test_put_failed_when_no_permission + @role.remove_permission! :file_manipulation + put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :forbidden + end def test_put_succeeds_for_non_admin_with_correct_permissions - @project1.enable_module! :dmsf - @role.add_permission! :view_dmsf_folders - @role.add_permission! :file_manipulation put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', headers: @jsmith.merge!({ content_type: :text }) assert_response :created # Now we have permissions @@ -161,179 +116,160 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest assert_response :created # Now we have permissions end - # def test_put_writes_revision_successfully_for_unlocked_file - # @project1.enable_module! :dmsf #Flag module enabled - # @role.add_permission! :view_dmsf_folders - # @role.add_permission! :file_manipulation - # file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' - # assert_not_nil file, 'test.txt file not found' - # assert_difference 'file.dmsf_file_revisions.count', +1 do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :created - # end - # end - # - # def test_put_fails_revision_when_file_is_locked - # @project1.enable_module! :dmsf # Flag module enabled - # @role.add_permission! :view_dmsf_folders - # @role.add_permission! :file_manipulation - # log_user 'admin', 'admin' # login as admin - # file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' - # assert file.lock!, "File failed to be locked by #{User.current}" - # assert_no_difference 'file.dmsf_file_revisions.count' do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :locked - # end - # end - # - # def test_put_fails_revision_when_file_is_locked_and_user_is_administrator - # @project1.enable_module! :dmsf # Flag module enabled - # @role.add_permission! :view_dmsf_folders - # @role.add_permission! :file_manipulation - # log_user 'jsmith', 'jsmith' # login as jsmith - # file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' - # assert file.lock!, "File failed to be locked by #{User.current}" - # assert_no_difference 'file.dmsf_file_revisions.count' do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @admin.merge!({ content_type: :text }) - # assert_response :locked - # end - # end - # - # def test_put_accepts_revision_when_file_is_locked_and_user_is_same_as_lock_holder - # @project1.enable_module! :dmsf # Flag module enabled - # @role.add_permission! :view_dmsf_folders - # @role.add_permission! :file_manipulation - # - # # Lock the file - # User.current = @jsmith_user - # file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' - # l = file.lock! - # assert l, "File failed to be locked by #{User.current}" - # assert_equal file.last_revision.id, l.dmsf_file_last_revision_id - # - # # First PUT should always create new revision. - # User.current = @jsmith_user - # assert_difference 'file.dmsf_file_revisions.count', +1 do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :created - # end - # - # # Second PUT on a locked file should only update the revision that were created on the first PUT - # User.current = @jsmith_user - # assert_no_difference 'file.dmsf_file_revisions.count' do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :created - # end - # - # # Unlock - # User.current = @jsmith_user - # assert file.unlock!, "File failed to be unlocked by #{User.current}" - # - # # Lock file again, but this time delete the revision that were stored in the lock - # User.current = @jsmith_user - # file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' - # l = file.lock! - # assert l, "File failed to be locked by #{User.current}" - # assert_equal file.last_revision.id, l.dmsf_file_last_revision_id - # - # # Delete the last revision, the revision that were stored in the lock. - # file.last_revision.delete(true) - # - # # First PUT should always create new revision. - # User.current = @jsmith_user - # assert_difference 'file.dmsf_file_revisions.count', +1 do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :created - # end - # - # # Second PUT on a locked file should only update the revision that were created on the first PUT - # User.current = @jsmith_user - # assert_no_difference 'file.dmsf_file_revisions.count' do - # put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', - # headers: @jsmith.merge!({ content_type: :text }) - # assert_response :created - # end - # end - # - # def test_put_ignored_files_default - # # Ignored patterns: /^(\._|\.DS_Store$|Thumbs.db$)/ - # @project1.enable_module! :dmsf - # @role.add_permission! :view_dmsf_folders - # @role.add_permission! :file_manipulation - # put "/dmsf/webdav/#{@project1.identifier}/._test.txt", params: '1234', - # headers: @admin.merge!({ content_type: :text }) - # assert_response :no_content - # put "/dmsf/webdav/#{@project1.identifier}/.DS_Store", params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :no_content - # put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :no_content - # original = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] - # Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = '.dump$' - # put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) - # assert_response :no_content - # Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = original - # end - # - # def test_put_non_versioned_files - # @project1.enable_module! :dmsf - # @role.add_permission! :view_dmsf_folders - # @role.add_permission! :file_manipulation - # credentials = @admin.merge!({ content_type: :text }) - # - # put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '1234', headers: credentials - # assert_response :success - # file1 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder: nil, name: 'file1.tmp') - # assert file1 - # assert_difference 'file1.dmsf_file_revisions.count', 0 do - # put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '5678', headers: credentials - # assert_response :created - # end - # assert_difference 'file1.dmsf_file_revisions.count', 0 do - # put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '9ABC', headers: credentials - # assert_response :created - # end - # - # put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '1234', headers: credentials - # assert_response :success - # file2 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: '~$file2.txt') - # assert file2 - # assert_difference 'file2.dmsf_file_revisions.count', 0 do - # put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '5678', headers: credentials - # assert_response :created - # end - # assert_difference 'file2.dmsf_file_revisions.count', 0 do - # put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '9ABC', headers: credentials - # assert_response :created - # end - # - # original = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] - # Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$' - # put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials - # assert_response :success - # file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump') - # assert file3 - # assert_difference 'file3.dmsf_file_revisions.count', 0 do - # put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '5678', headers: credentials - # assert_response :created - # end - # assert_difference 'file3.dmsf_file_revisions.count', 0 do - # put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '9ABC', headers: credentials - # assert_response :created - # end - # Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = original - # end - # - # def test_put_into_subproject - # put "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/test-1234.txt", params: '1234', - # headers: @admin.merge!({ content_type: :text }) - # assert_response :created - # assert DmsfFile.find_by(project_id: @project3.id, dmsf_folder: nil, name: 'test-1234.txt') - # end + def test_put_writes_revision_successfully_for_unlocked_file + file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' + assert_not_nil file, 'test.txt file not found' + assert_difference 'file.dmsf_file_revisions.count', +1 do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end + end + + def test_put_fails_revision_when_file_is_locked + log_user 'admin', 'admin' # login as admin + file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' + assert file.lock!, "File failed to be locked by #{User.current}" + assert_no_difference 'file.dmsf_file_revisions.count' do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :locked + end + end + + def test_put_fails_revision_when_file_is_locked_and_user_is_administrator + log_user 'jsmith', 'jsmith' # login as jsmith + file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' + assert file.lock!, "File failed to be locked by #{User.current}" + assert_no_difference 'file.dmsf_file_revisions.count' do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @admin.merge!({ content_type: :text }) + assert_response :locked + end + end + + def test_put_accepts_revision_when_file_is_locked_and_user_is_same_as_lock_holder + # Lock the file + User.current = @jsmith_user + file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' + l = file.lock! + assert l, "File failed to be locked by #{User.current}" + assert_equal file.last_revision.id, l.dmsf_file_last_revision_id + + # First PUT should always create new revision. + User.current = @jsmith_user + assert_difference 'file.dmsf_file_revisions.count', +1 do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end + + # Second PUT on a locked file should only update the revision that were created on the first PUT + User.current = @jsmith_user + assert_no_difference 'file.dmsf_file_revisions.count' do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end + + # Unlock + User.current = @jsmith_user + assert file.unlock!, "File failed to be unlocked by #{User.current}" + + # Lock file again, but this time delete the revision that were stored in the lock + User.current = @jsmith_user + file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' + l = file.lock! + assert l, "File failed to be locked by #{User.current}" + assert_equal file.last_revision.id, l.dmsf_file_last_revision_id + + # Delete the last revision, the revision that were stored in the lock. + file.last_revision.delete(true) + + # First PUT should always create new revision. + User.current = @jsmith_user + assert_difference 'file.dmsf_file_revisions.count', +1 do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end + + # Second PUT on a locked file should only update the revision that were created on the first PUT + User.current = @jsmith_user + assert_no_difference 'file.dmsf_file_revisions.count' do + put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', + headers: @jsmith.merge!({ content_type: :text }) + assert_response :created + end + end + + def test_put_ignored_files_default + # Ignored patterns: /^(\._|\.DS_Store$|Thumbs.db$)/ + put "/dmsf/webdav/#{@project1.identifier}/._test.txt", params: '1234', + headers: @admin.merge!({ content_type: :text }) + assert_response :no_content + put "/dmsf/webdav/#{@project1.identifier}/.DS_Store", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :no_content + put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :no_content + original = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] + Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = '.dump$' + put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) + assert_response :no_content + Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = original + end + + def test_put_non_versioned_files + credentials = @admin.merge!({ content_type: :text }) + + put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '1234', headers: credentials + assert_response :success + file1 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder: nil, name: 'file1.tmp') + assert file1 + assert_difference 'file1.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '5678', headers: credentials + assert_response :created + end + assert_difference 'file1.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '9ABC', headers: credentials + assert_response :created + end + + put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '1234', headers: credentials + assert_response :success + file2 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: '~$file2.txt') + assert file2 + assert_difference 'file2.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '5678', headers: credentials + assert_response :created + end + assert_difference 'file2.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '9ABC', headers: credentials + assert_response :created + end + + original = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] + Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$' + put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials + assert_response :success + file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump') + assert file3 + assert_difference 'file3.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '5678', headers: credentials + assert_response :created + end + assert_difference 'file3.dmsf_file_revisions.count', 0 do + put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '9ABC', headers: credentials + assert_response :created + end + Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = original + end + + def test_put_into_subproject + put "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/test-1234.txt", params: '1234', + headers: @admin.merge!({ content_type: :text }) + assert_response :created + assert DmsfFile.find_by(project_id: @project3.id, dmsf_folder: nil, name: 'test-1234.txt') + end end \ No newline at end of file diff --git a/test/integration/webdav/dmsf_webdav_unlock_test.rb b/test/integration/webdav/dmsf_webdav_unlock_test.rb index 5ac65a7a..bcc1dcfc 100644 --- a/test/integration/webdav/dmsf_webdav_unlock_test.rb +++ b/test/integration/webdav/dmsf_webdav_unlock_test.rb @@ -27,55 +27,6 @@ class DmsfWebdavUnlockTest < RedmineDmsf::Test::IntegrationTest fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks - - def setup - @admin = credentials 'admin' - @jsmith = credentials 'jsmith' - @admin_user = User.find_by(login: 'admin') - @jsmith_user = User.find_by(login: 'jsmith') - @project1 = Project.find 1 - @project1.enable_module! 'dmsf' - @project2 = Project.find 2 - @project2.enable_module! 'dmsf' - @project3 = Project.find 3 - @project3.enable_module! 'dmsf' - @file2 = DmsfFile.find 2 - @file9 = DmsfFile.find 9 - @file12 = DmsfFile.find 12 - @folder2 = DmsfFolder.find 2 - @folder6 = DmsfFolder.find 6 - @folder10 = DmsfFolder.find 10 - # Fix permissions for jsmith's role - @role = Role.find_by(name: 'Manager') - @role.add_permission! :view_dmsf_folders - @role.add_permission! :folder_manipulation - @role.add_permission! :view_dmsf_files - @role.add_permission! :file_manipulation - @dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav'] - Setting.plugin_redmine_dmsf['dmsf_webdav'] = true - @dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' - end - - def teardown - Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav - Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - assert_kind_of DmsfFile, @file2 - assert_kind_of DmsfFile, @file9 - assert_kind_of DmsfFile, @file12 - assert_kind_of DmsfFolder, @folder2 - assert_kind_of DmsfFolder, @folder6 - assert_kind_of DmsfFolder, @folder10 - assert_kind_of Role, @role - assert_kind_of User, @admin_user - assert_kind_of User, @jsmith_user - end def test_unlock_file log_user 'admin', 'admin' @@ -123,7 +74,6 @@ class DmsfWebdavUnlockTest < RedmineDmsf::Test::IntegrationTest def test_unlock_folder log_user 'jsmith', 'jsmith' l = @folder2.locks.first - puts ">>> process unlock" process :unlock, "/dmsf/webdav/#{@folder2.project.identifier}/#{@folder2.dmsf_folder.title}/#{@folder2.title}", params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_LOCK_TOKEN: l.uuid }) diff --git a/test/integration_test.rb b/test/integration_test.rb index 24c5aecc..73e8bd98 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -23,14 +23,101 @@ module RedmineDmsf module Test + class IntegrationTest < Redmine::IntegrationTest - def self.fixtures(*table_names) - dir = File.join( File.dirname(__FILE__), '/fixtures') - table_names.each do |x| - ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml") + + def setup + @admin = credentials('admin', 'admin') + @admin_user = User.find_by(login: 'admin') + @jsmith = credentials('jsmith', 'jsmith') + @jsmith_user = User.find_by(login: 'jsmith') + @someone = credentials('someone', 'foo') + @anonymous = credentials('') + @project1 = Project.find 1 + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' + @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + @project1_uri = Addressable::URI.escape(@project1_name) + @project2 = Project.find 2 + @project3 = Project.find 3 + [@project1, @project2, @project3].each do |project| + project.enable_module! :dmsf end - super(table_names) + @file1 = DmsfFile.find 1 + @file2 = DmsfFile.find 2 + @file9 = DmsfFile.find 9 + @file10 = DmsfFile.find 10 + @file12 = DmsfFile.find 12 + @folder1 = DmsfFolder.find 1 + @folder2 = DmsfFolder.find 2 + @folder3 = DmsfFolder.find 3 + @folder6 = DmsfFolder.find 6 + @folder7 = DmsfFolder.find 7 + @folder10 = DmsfFolder.find 10 + @role = Role.find_by(name: 'Manager') + @role.add_permission! :view_dmsf_folders + @role.add_permission! :folder_manipulation + @role.add_permission! :view_dmsf_files + @role.add_permission! :file_manipulation + @role.add_permission! :file_delete + Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' + Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil + Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf)) + FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path + User.current = nil end + + def teardown + # Delete our tmp folder + begin + FileUtils.rm_rf DmsfFile.storage_path + rescue => e + error e.message + end + end + + def self.fixtures(*table_names) + dir = File.join(File.dirname(__FILE__), 'fixtures') + table_names.each do |x| + ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml")) + end + super table_names + end + + protected + + def check_headers_exist + assert !(response.headers.nil? || response.headers.empty?), + 'Head returned without headers' # Headers exist? + values = {} + values[:etag] = { optional: true, content: response.headers['Etag'] } + values[:content_type] = response.headers['Content-Type'] + values[:last_modified] = { optional: true, content: response.headers['Last-Modified'] } + single_optional = false + values.each do |key,val| + if val.is_a?(Hash) + if val[:optional].nil? || !val[:optional] + assert(!(val[:content].nil? || val[:content].empty?), "Expected header #{key} was empty." ) if single_optional + else + single_optional = true + end + else + assert !(val.nil? || val.empty?), "Expected header #{key} was empty." + end + end + end + + def check_headers_dont_exist + assert !(response.headers.nil? || response.headers.empty?), 'Head returned without headers' # Headers exist? + values = {} + values[:etag] = response.headers['Etag'] + values[:last_modified] = response.headers['Last-Modified'] + values.each do |key,val| + assert (val.nil? || val.empty?), "Expected header #{key} should be empty." + end + end + end + end end \ No newline at end of file diff --git a/test/test_case.rb b/test/test_case.rb index 1cc5a3e7..fd42c188 100644 --- a/test/test_case.rb +++ b/test/test_case.rb @@ -29,26 +29,70 @@ module RedmineDmsf # Ultimately it allows for better integration without blowing redmine fixtures up, # and allowing us to suppliment redmine fixtures if we need to. def self.fixtures(*table_names) - dir = File.join( File.dirname(__FILE__), '/fixtures') + dir = File.join(File.dirname(__FILE__), 'fixtures') table_names.each do |x| - ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml") + ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml")) end - super(table_names) + super table_names end def setup - if ::Rails::VERSION::MAJOR >= 5 - if ::Rails::VERSION::MINOR >= 1 - @request = ActionController::TestRequest.create(self.class.controller_class) - else - @request = ActionController::TestRequest.create - end - else - @request = ActionController::TestRequest.new + @admin = User.find_by(login: 'admin') + @jsmith = User.find_by(login: 'jsmith') + @dlopper = User.find_by(login: 'dlopper') + @someone = User.find_by(login: 'someone') + @project1 = Project.find 1 + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1' + @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1) + @project1_uri = Addressable::URI.escape(@project1_name) + @project2 = Project.find 2 + @project3 = Project.find 3 + [@project1, @project2, @project3].each do |project| + project.enable_module! :dmsf + project.enable_module! :issue_tracking end - @response = ActionController::TestResponse.new + @file1 = DmsfFile.find 1 + @file2 = DmsfFile.find 2 + @file6 = DmsfFile.find 6 + @file9 = DmsfFile.find 9 + @file10 = DmsfFile.find 10 + @file12 = DmsfFile.find 12 + @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 + @role_manager = Role.find_by(name: 'Manager') + @role_developer = Role.find_by(name: 'Developer') + [@role_manager, @role_developer].each do |role| + role.add_permission! :view_dmsf_folders + role.add_permission! :folder_manipulation + role.add_permission! :view_dmsf_files + role.add_permission! :file_manipulation + role.add_permission! :file_delete + role.add_permission! :email_documents + role.add_permission! :manage_workflows + role.add_permission! :file_approval + end + Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1' + Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE' + Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil + Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf)) + FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path + User.current = nil end - + + def teardown + # Delete our tmp folder + begin + FileUtils.rm_rf DmsfFile.storage_path + rescue => e + error e.message + end + end + end end end \ No newline at end of file diff --git a/test/unit/attachable_patch_test.rb b/test/unit/attachable_patch_test.rb index 9172e782..82e8c99e 100644 --- a/test/unit/attachable_patch_test.rb +++ b/test/unit/attachable_patch_test.rb @@ -25,6 +25,7 @@ class AttachablePatchTest < RedmineDmsf::Test::UnitTest fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :issues def setup + super @issue1 = Issue.find 1 @issue2 = Issue.find 2 end diff --git a/test/unit/dmsf_file_revision_test.rb b/test/unit/dmsf_file_revision_test.rb index a349de3a..b404dc72 100644 --- a/test/unit/dmsf_file_revision_test.rb +++ b/test/unit/dmsf_file_revision_test.rb @@ -24,43 +24,18 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest include Redmine::I18n - fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members, - :member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps, + fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, + :members, :member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps, :dmsf_workflow_step_assignments, :dmsf_workflow_step_actions def setup + super @revision1 = DmsfFileRevision.find 1 @revision2 = DmsfFileRevision.find 2 @revision3 = DmsfFileRevision.find 3 @revision5 = DmsfFileRevision.find 5 @revision8 = DmsfFileRevision.find 8 @wf1 = DmsfWorkflow.find 1 - @admin = User.find 1 - @jsmith = User.find 2 - @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 - end - - def teardown - # Delete our tmp folder - begin - FileUtils.rm_rf DmsfFile.storage_path - rescue => e - error e.message - end - Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory - end - - def test_truth - assert_kind_of DmsfFileRevision, @revision1 - assert_kind_of DmsfFileRevision, @revision2 - assert_kind_of DmsfFileRevision, @revision3 - assert_kind_of DmsfFileRevision, @revision5 - assert_kind_of DmsfFileRevision, @revision8 - assert_kind_of DmsfWorkflow, @wf1 - assert_kind_of User, @admin - assert_kind_of User, @jsmith end def test_delete_restore diff --git a/test/unit/dmsf_file_test.rb b/test/unit/dmsf_file_test.rb index 18cdfc3a..d3eb0c80 100644 --- a/test/unit/dmsf_file_test.rb +++ b/test/unit/dmsf_file_test.rb @@ -28,42 +28,10 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest :dmsf_workflow_step_assignments def setup - @admin = User.find 1 - @jsmith = User.find 2 - @project1 = Project.find 1 - @project2 = Project.find 2 - @file1 = DmsfFile.find 1 - @file2 = DmsfFile.find 2 - @file3 = DmsfFile.find 3 - @file4 = DmsfFile.find 4 - @file5 = DmsfFile.find 5 - @file6 = DmsfFile.find 6 - @file7 = DmsfFile.find 7 - @file8 = DmsfFile.find 8 - @folder1 = DmsfFolder.find 1 + super @issue1 = Issue.find 1 @wf1 = DmsfWorkflow.find 1 @wf2 = DmsfWorkflow.find 2 - User.current = nil - end - - def test_truth - assert_kind_of User, @admin - assert_kind_of User, @jsmith - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file2 - assert_kind_of DmsfFile, @file3 - assert_kind_of DmsfFile, @file4 - assert_kind_of DmsfFile, @file5 - assert_kind_of DmsfFile, @file6 - assert_kind_of DmsfFile, @file7 - assert_kind_of DmsfFile, @file8 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of Issue, @issue1 - assert_kind_of DmsfWorkflow, @wf1 - assert_kind_of DmsfWorkflow, @wf2 end def test_project_file_count_differs_from_project_visibility_count @@ -94,20 +62,12 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest def test_file_locked_is_not_locked_for_user_who_locked User.current = @admin - @file1.lock! - assert !@file1.locked_for_user?, - "#{@file1.name} is locked for #{User.current}" - @file1.unlock! + assert !@file2.locked_for_user?, "#{@file2.name} is locked for #{User.current}" end def test_file_locked_is_locked_for_user_who_didnt_lock - User.current = @admin - @file1.lock! User.current = @jsmith - assert @file1.locked_for_user?, - "#{@file1.name} is locked for #{User.current}" - User.current = @admin - @file1.unlock! + assert @file2.locked_for_user?, "#{@file1.name} is locked for #{User.current}" end def test_file_with_no_locks_reported_unlocked @@ -127,7 +87,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest assert_equal 0, @file4.dmsf_file_revisions.visible.all.size # Links should not be deleted assert_equal 2, @file4.referenced_links.visible.all.size - @file4.dmsf_folder.lock! end def test_restore @@ -138,7 +97,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest assert !@file4.deleted?, "File #{@file4} hasn't been restored" assert_equal 1, @file4.dmsf_file_revisions.visible.all.size assert_equal 2, @file4.referenced_links.visible.all.size - @file4.dmsf_folder.lock! end def test_destroy @@ -149,7 +107,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest @file4.delete true assert_equal 0, @file4.dmsf_file_revisions.all.size assert_equal 0, @file4.referenced_links.all.size - @file4.dmsf_folder.lock! end def test_copy_to_filename diff --git a/test/unit/dmsf_folder_permission_test.rb b/test/unit/dmsf_folder_permission_test.rb index f0de5e69..cf24bbb1 100644 --- a/test/unit/dmsf_folder_permission_test.rb +++ b/test/unit/dmsf_folder_permission_test.rb @@ -25,15 +25,10 @@ class DmsfFolderPermissionTest < RedmineDmsf::Test::UnitTest fixtures :dmsf_folder_permissions, :dmsf_folders def setup - @folder1 = DmsfFolder.find 1 + super @permission1 = DmsfFolderPermission.find 1 end - def test_truth - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolderPermission, @permission1 - end - def test_scope assert_equal 2, DmsfFolderPermission.all.size end diff --git a/test/unit/dmsf_folder_test.rb b/test/unit/dmsf_folder_test.rb index 43e23332..50a678d7 100644 --- a/test/unit/dmsf_folder_test.rb +++ b/test/unit/dmsf_folder_test.rb @@ -26,56 +26,20 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles, :dmsf_folder_permissions, :dmsf_locks - def setup - @project1 = Project.find 1 - @project1.enable_module! :dmsf - @project2 = Project.find 2 - @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 - @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 = @jsmith - end - - def test_truth - 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, @jsmith - assert_kind_of User, @dlopper - assert_kind_of Role, @manager_role - end - def test_visiblity # The role has got permissions User.current = @jsmith - assert_equal 7, DmsfFolder.where(project_id: 1).all.size - assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size + assert_equal 7, DmsfFolder.where(project_id: @project1.id).all.size + assert_equal 5, DmsfFolder.visible.where(project_id: @project1.id).all.size # The user has got permissions 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 + assert_equal 4, DmsfFolder.visible.where(project_id: @project1.id).all.size # Anonymous user User.current = User.anonymous @project1.add_default_member User.anonymous - assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size + assert_equal 5, DmsfFolder.visible.where(project_id: @project1.id).all.size end def test_permissions @@ -210,10 +174,11 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest end def test_move_to + User.current = @jsmith assert @folder1.move_to(@project2, nil) assert_equal @project2, @folder1.project @folder1.dmsf_folders.each do |d| - assert_equal @project2, d.project + assert_equal @project2.identifier, d.project.identifier end @folder1.dmsf_files.each do |f| assert_equal @project2, f.project diff --git a/test/unit/dmsf_link_test.rb b/test/unit/dmsf_link_test.rb index d628453f..ee88688d 100644 --- a/test/unit/dmsf_link_test.rb +++ b/test/unit/dmsf_link_test.rb @@ -23,28 +23,14 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfLinksTest < RedmineDmsf::Test::UnitTest - fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions, - :dmsf_folders, :dmsf_links + fixtures :users, :email_addresses, :roles, :projects, :members, :member_roles, :dmsf_files, + :dmsf_file_revisions, :dmsf_folders, :dmsf_links def setup - @project1 = Project.find 1 - @folder1 = DmsfFolder.find 1 - @folder2 = DmsfFolder.find 2 - @file1 = DmsfFile.find 1 - @file4 = DmsfFile.find 4 + super @folder_link = DmsfLink.find 1 @file_link = DmsfLink.find 2 end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of DmsfFolder, @folder1 - assert_kind_of DmsfFolder, @folder2 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFile, @file4 - assert_kind_of DmsfLink, @folder_link - assert_kind_of DmsfLink, @file_link - end def test_create_folder_link folder_link = DmsfLink.new diff --git a/test/unit/dmsf_lock_test.rb b/test/unit/dmsf_lock_test.rb index 94adff03..214b66c1 100644 --- a/test/unit/dmsf_lock_test.rb +++ b/test/unit/dmsf_lock_test.rb @@ -23,25 +23,12 @@ require File.expand_path('../../test_helper.rb', __FILE__) class DmsfLockTest < RedmineDmsf::Test::UnitTest - fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, - :dmsf_file_revisions, :roles, :members, :member_roles, :enabled_modules, - :enumerations, :dmsf_locks + fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, + :members, :member_roles, :enabled_modules, :enumerations, :dmsf_locks def setup + super @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 - - def test_truth - assert_kind_of DmsfLock, @lock - assert_kind_of DmsfFile, @file4 - assert_kind_of DmsfFolder, @folder2 - assert_kind_of User, @jsmith - assert_kind_of User, @admin end def test_lock_type_is_enumerable @@ -114,7 +101,6 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest end end @folder2.lock! - User.current = nil end def test_expired diff --git a/test/unit/dmsf_mailer_test.rb b/test/unit/dmsf_mailer_test.rb index cb32d5f0..e96f44fd 100644 --- a/test/unit/dmsf_mailer_test.rb +++ b/test/unit/dmsf_mailer_test.rb @@ -24,29 +24,18 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfMailerTest < RedmineDmsf::Test::UnitTest include Redmine::I18n - fixtures :users, :projects, :dmsf_files, :dmsf_workflows, :dmsf_file_revisions, :members, :email_addresses, - :roles, :member_roles + fixtures :users, :email_addresses, :projects, :dmsf_files, :dmsf_workflows, :dmsf_folders, + :dmsf_file_revisions, :members, :roles, :member_roles def setup - @user2 = User.find 2 - @file1 = DmsfFile.find 1 + super @file1.notify_activate @wf1 = DmsfWorkflow.find 1 @rev2 = DmsfFileRevision.find 2 - @project1 = Project.find 1 # Mailer settings ActionMailer::Base.deliveries.clear Setting.plain_text_mail = '0' Setting.default_language = 'en' - User.current = nil - end - - def test_truth - assert_kind_of User, @user2 - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfFileRevision, @rev2 - assert_kind_of DmsfWorkflow, @wf1 - assert_kind_of Project, @project1 end def test_files_updated @@ -66,22 +55,22 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest def test_send_documents email_params = Hash.new body = 'Test' - email_params[:to] = @user2.mail - email_params[:from] = @user2.mail + email_params[:to] = @jsmith.mail + email_params[:from] = @jsmith.mail email_params[:body] = body email_params[:links_only] = '1' email_params[:public_urls] == '0' email_params[:expired_at] = DateTime.current.to_s email_params[:folders] = nil email_params[:files] = "[\"#{@file1.id}\"]" - DmsfMailer.deliver_send_documents(@file1.project, email_params, User.current) + DmsfMailer.deliver_send_documents(@file1.project, email_params, @jsmith) email = last_email assert text_part(email).body.include? body assert html_part(email).body.include? body end def test_workflow_notification - DmsfMailer.deliver_workflow_notification([@user2], @wf1, @rev2, :text_email_subject_started, + DmsfMailer.deliver_workflow_notification([@jsmith], @wf1, @rev2, :text_email_subject_started, :text_email_started, :text_email_to_proceed) email = last_email assert text_part(email).body.include? l(:text_email_subject_started) @@ -104,21 +93,5 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest users = DmsfMailer.get_notify_users(@project1, [@file1]) assert users.blank? end - - private - - def last_email - mail = ActionMailer::Base.deliveries.last - assert_not_nil mail - mail - end - - def text_part(email) - email.parts.detect {|part| part.content_type.include?('text/plain')} - end - - def html_part(email) - email.parts.detect {|part| part.content_type.include?('text/html')} - end - + end \ No newline at end of file diff --git a/test/unit/dmsf_public_url_test.rb b/test/unit/dmsf_public_url_test.rb index a106d90e..cd611c5f 100644 --- a/test/unit/dmsf_public_url_test.rb +++ b/test/unit/dmsf_public_url_test.rb @@ -23,24 +23,17 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfPublicUrlsTest < RedmineDmsf::Test::UnitTest - fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls, :users + fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls, :users, :email_addresses def setup - @file1 = DmsfFile.find 1 + super @dmsf_public_url1 = DmsfPublicUrl.find 1 - @user2 = User.find 2 end - - def test_truth - assert_kind_of DmsfFile, @file1 - assert_kind_of DmsfPublicUrl, @dmsf_public_url1 - assert_kind_of User, @user2 - end - + def test_create url = DmsfPublicUrl.new url.dmsf_file = @file1 - url.user = @user2 + url.user = @jsmith url.expire_at = DateTime.current + 1.day assert url.save, url.errors.full_messages.to_sentence assert_not_nil url.token diff --git a/test/unit/dmsf_workflow_step_action_test.rb b/test/unit/dmsf_workflow_step_action_test.rb index 287ccc56..bb240a1c 100644 --- a/test/unit/dmsf_workflow_step_action_test.rb +++ b/test/unit/dmsf_workflow_step_action_test.rb @@ -32,12 +32,6 @@ class DmsfWorkflowStepActionTest < RedmineDmsf::Test::UnitTest @wfsac3 = DmsfWorkflowStepAction.find 3 end - def test_truth - assert_kind_of DmsfWorkflowStepAction, @wfsac1 - assert_kind_of DmsfWorkflowStepAction, @wfsac2 - assert_kind_of DmsfWorkflowStepAction, @wfsac3 - end - def test_create wfsac = DmsfWorkflowStepAction.new wfsac.dmsf_workflow_step_assignment_id = 1 diff --git a/test/unit/dmsf_workflow_step_assignment_test.rb b/test/unit/dmsf_workflow_step_assignment_test.rb index 232c2e13..7e92e941 100644 --- a/test/unit/dmsf_workflow_step_assignment_test.rb +++ b/test/unit/dmsf_workflow_step_assignment_test.rb @@ -31,11 +31,6 @@ class WorkflowStepAssignmentTest < RedmineDmsf::Test::UnitTest @wfsa2 = DmsfWorkflowStepAssignment.find 2 end - def test_truth - assert_kind_of DmsfWorkflowStepAssignment, @wfsa1 - assert_kind_of DmsfWorkflowStepAssignment, @wfsa2 - end - def test_create wfsa = DmsfWorkflowStepAssignment.new wfsa.dmsf_workflow_step_id = 5 diff --git a/test/unit/dmsf_workflow_step_test.rb b/test/unit/dmsf_workflow_step_test.rb index 4a4b20af..54f17888 100644 --- a/test/unit/dmsf_workflow_step_test.rb +++ b/test/unit/dmsf_workflow_step_test.rb @@ -35,16 +35,7 @@ class DmsfWorkflowStepTest < RedmineDmsf::Test::UnitTest @revision2 = DmsfFileRevision.find 2 @wf2 = DmsfWorkflow.find 2 end - - def test_truth - assert_kind_of DmsfWorkflowStep, @wfs1 - assert_kind_of DmsfWorkflowStep, @wfs2 - assert_kind_of DmsfWorkflowStep, @wfs5 - assert_kind_of DmsfFileRevision, @revision1 - assert_kind_of DmsfFileRevision, @revision2 - assert_kind_of DmsfWorkflow, @wf2 - end - + def test_create wfs = DmsfWorkflowStep.new wfs.dmsf_workflow_id = 1 diff --git a/test/unit/dmsf_workflow_test.rb b/test/unit/dmsf_workflow_test.rb index 2fcf89a3..a3a8bd99 100644 --- a/test/unit/dmsf_workflow_test.rb +++ b/test/unit/dmsf_workflow_test.rb @@ -23,11 +23,12 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest - fixtures :users, :email_addresses, :projects, :members, :dmsf_files, - :dmsf_file_revisions, :dmsf_workflows, :dmsf_workflow_steps, - :dmsf_workflow_step_assignments, :dmsf_workflow_step_actions + fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles, :dmsf_files, + :dmsf_file_revisions, :dmsf_workflows, :dmsf_workflow_steps, :dmsf_workflow_step_assignments, + :dmsf_workflow_step_actions - def setup + def setup + super @wf1 = DmsfWorkflow.find 1 @wf2 = DmsfWorkflow.find 2 @wf3 = DmsfWorkflow.find 3 @@ -40,25 +41,6 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest @wfsac1 = DmsfWorkflowStepAction.find 1 @revision1 = DmsfFileRevision.find 1 @revision2 = DmsfFileRevision.find 2 - @project = Project.find 2 - @project5 = Project.find 5 - end - - def test_truth - assert_kind_of DmsfWorkflow, @wf1 - assert_kind_of DmsfWorkflow, @wf2 - assert_kind_of DmsfWorkflow, @wf3 - assert_kind_of DmsfWorkflowStep, @wfs1 - assert_kind_of DmsfWorkflowStep, @wfs2 - assert_kind_of DmsfWorkflowStep, @wfs3 - assert_kind_of DmsfWorkflowStep, @wfs4 - assert_kind_of DmsfWorkflowStep, @wfs5 - assert_kind_of DmsfWorkflowStepAssignment, @wfsa1 - assert_kind_of DmsfWorkflowStepAction, @wfsac1 - assert_kind_of DmsfFileRevision, @revision1 - assert_kind_of DmsfFileRevision, @revision2 - assert_kind_of Project, @project - assert_kind_of Project, @project5 end def test_create @@ -69,11 +51,11 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest def test_update @wf1.name = 'wf1a' - @wf1.project_id = 5 + @wf1.project_id = @project5.id assert @wf1.save, @wf1.errors.full_messages.to_sentence @wf1.reload assert_equal 'wf1a', @wf1.name - assert_equal 5, @wf1.project_id + assert_equal @project5.id, @wf1.project_id end def test_validate_name_length @@ -111,7 +93,7 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest # Global workflow assert_nil @wf2.project # Project workflow - @wf2.project_id = 5 + @wf2.project_id = @project5.id assert @wf2.project end @@ -205,10 +187,10 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest wsa = DmsfWorkflowStepAction.new wsa.dmsf_workflow_step_assignment_id = 9 wsa.action = DmsfWorkflowStepAction::ACTION_APPROVE - wsa.author_id = User.current.id + wsa.author_id = @jsmith.id assert wsa.save # The workflow is finished - assert @wf1.try_finish(@revision1, @wfsac1, User.current.id) + assert @wf1.try_finish(@revision1, @wfsac1, @jsmith.id) @revision1.reload assert_equal DmsfWorkflow::STATE_APPROVED, @revision1.workflow end @@ -217,7 +199,7 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest # The forkflow is waiting for an approval assert_equal DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, @revision1.workflow # The workflow is not finished - assert !@wf1.try_finish(@revision1, @wfsac1, User.current.id) + assert !@wf1.try_finish(@revision1, @wfsac1, @jsmith.id) @revision1.reload assert_equal DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, @revision1.workflow end diff --git a/test/unit/project_patch_test.rb b/test/unit/project_patch_test.rb index 16b16a94..9b2f1b5e 100644 --- a/test/unit/project_patch_test.rb +++ b/test/unit/project_patch_test.rb @@ -22,20 +22,8 @@ require File.expand_path('../../test_helper', __FILE__) class ProjectPatchTest < RedmineDmsf::Test::UnitTest - fixtures :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_links, :dmsf_folders, :dmsf_workflows, :users - - def setup - @project1 = Project.find 1 - @project2 = Project.find 2 - @project3 = Project.find 3 - User.current = User.find 1 - end - - def test_truth - assert_kind_of Project, @project1 - assert_kind_of Project, @project2 - assert_kind_of Project, @project3 - end + fixtures :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_links, :dmsf_folders, :dmsf_workflows, + :users, :email_addresses, :dmsf_locks, :roles, :members, :member_roles def test_project_has_dmsf_files assert @project1.respond_to?(:dmsf_files) @@ -79,8 +67,9 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest end def test_copy_dmsf + User.current = @jsmith assert_equal 4, @project1.dmsf_files.visible.all.size - assert_equal 4, @project1.dmsf_folders.visible.all.size + assert_equal 3, @project1.dmsf_folders.visible.all.size assert_equal 2, @project1.file_links.visible.all.size assert_equal 1, @project1.folder_links.visible.all.size assert_equal 1, @project1.url_links.visible.all.size @@ -91,7 +80,7 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest assert_equal 0, @project3.url_links.visible.all.size @project3.copy_dmsf @project1 assert_equal 4, @project3.dmsf_files.visible.all.size - assert_equal 5, @project3.dmsf_folders.all.size + assert_equal 0, @project3.dmsf_folders.visible.all.size assert_equal 2, @project3.file_links.visible.all.size assert_equal 1, @project3.folder_links.visible.all.size assert_equal 1, @project3.url_links.visible.all.size diff --git a/test/unit/user_patch_test.rb b/test/unit/user_patch_test.rb index b6a030e4..0f23464c 100644 --- a/test/unit/user_patch_test.rb +++ b/test/unit/user_patch_test.rb @@ -22,19 +22,12 @@ require File.expand_path('../../test_helper', __FILE__) class UserPatchTest < RedmineDmsf::Test::UnitTest - fixtures :users, :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_folders, :dmsf_links - - def setup - @user2 = User.find 2 - end - - def test_truth - assert_kind_of User, @user2 - end + fixtures :users, :email_addresses, :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_folders, + :dmsf_links def test_remove_dmsf_references - id = @user2.id - @user2.destroy + id = @jsmith.id + @jsmith.destroy assert_equal 0, DmsfFileRevisionAccess.where(user_id: id).all.size assert_equal 0, DmsfFileRevision.where(user_id: id).all.size assert_equal 0, DmsfFileRevision.where(dmsf_workflow_assigned_by_user_id: id).all.size diff --git a/test/unit_test.rb b/test/unit_test.rb index cf927c51..5de1b158 100644 --- a/test/unit_test.rb +++ b/test/unit_test.rb @@ -25,16 +25,78 @@ module RedmineDmsf module Test class UnitTest < ActiveSupport::TestCase + def setup + @admin = User.find_by(login: 'admin') + @jsmith = User.find_by(login: 'jsmith') + @dlopper = User.find_by(login: 'dlopper') + @manager_role = Role.find_by(name: 'Manager') + @developer_role = Role.find_by(name: 'Developer') + [@manager_role, @developer_role].each do |role| + role.add_permission! :view_dmsf_folders + role.add_permission! :folder_manipulation + role.add_permission! :view_dmsf_files + role.add_permission! :file_manipulation + role.add_permission! :file_delete + end + @project1 = Project.find 1 + @project2 = Project.find 2 + @project3 = Project.find 3 + @project5 = Project.find 5 + [@project1, @project2, @project3, @project5].each do |project| + project.enable_module! :dmsf + end + @file1 = DmsfFile.find 1 + @file2 = DmsfFile.find 2 + @file4 = DmsfFile.find 4 + @file5 = DmsfFile.find 5 + @file7 = DmsfFile.find 7 + @file8 = DmsfFile.find 8 + @folder1 = DmsfFolder.find 1 + @folder2 = DmsfFolder.find 2 + @folder6 = DmsfFolder.find 6 + @folder7 = DmsfFolder.find 7 + Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf)) + FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path + User.current = nil + end + + def teardown + # Delete our tmp folder + begin + FileUtils.rm_rf DmsfFile.storage_path + rescue => e + error e.message + end + end + # Allow us to override the fixtures method to implement fixtures for our plugin. # Ultimately it allows for better integration without blowing redmine fixtures up, # and allowing us to suppliment redmine fixtures if we need to. def self.fixtures(*table_names) - dir = File.join( File.dirname(__FILE__), '/fixtures') + dir = File.join(File.dirname(__FILE__), 'fixtures') table_names.each do |x| - ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml") + ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml")) end - super(table_names) - end + super table_names + end + + protected + + def last_email + mail = ActionMailer::Base.deliveries.last + assert_not_nil mail + mail + end + + def text_part(email) + email.parts.detect {|part| part.content_type.include?('text/plain')} + end + + def html_part(email) + email.parts.detect {|part| part.content_type.include?('text/html')} + end + end + end end \ No newline at end of file