unit tests fix

This commit is contained in:
karel.picman@lbcfree.net 2020-08-18 12:18:41 +02:00
parent 0af58930dc
commit ad209af058
53 changed files with 755 additions and 1833 deletions

View File

@ -297,7 +297,7 @@ class DmsfController < ApplicationController
else else
flash[:error] = @folder.errors.full_messages.to_sentence flash[:error] = @folder.errors.full_messages.to_sentence
end end
redirect_to :back redirect_back fallback_location: trash_dmsf_path(@project)
end end
def edit_root def edit_root

View File

@ -38,8 +38,8 @@ class DmsfFilesCopyController < ApplicationController
def copy def copy
new_file = @file.copy_to(@target_project, @target_folder) new_file = @file.copy_to(@target_project, @target_folder)
unless new_file.errors.empty? if new_file.nil? || new_file.errors.present?
flash[:error] = new_file.errors.full_messages.to_sentence 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 redirect_to action: 'new', id: @file, target_project_id: @target_project, target_folder_id: @target_folder
return return
end end

View File

@ -181,15 +181,13 @@ class DmsfLinksController < ApplicationController
errors[:base] << e.message errors[:base] << e.message
return false return false
end end
redirect_back fallback_location: dmsf_folder_path(id: @project, folder_id: @dmsf_link&.dmsf_folder)
redirect_to :back
end end
def restore def restore
if @dmsf_link.restore if @dmsf_link.restore
flash[:notice] = l(:notice_dmsf_link_restored) flash[:notice] = l(:notice_dmsf_link_restored)
end end
redirect_to :back redirect_to :back
end end

View File

@ -305,6 +305,7 @@ class DmsfFile < ActiveRecord::Base
if new_revision.save if new_revision.save
file.set_last_revision new_revision file.set_last_revision new_revision
else else
errors[:base] << new_revision.errors.full_messages.to_sentence
Rails.logger.error new_revision.errors.full_messages.to_sentence Rails.logger.error new_revision.errors.full_messages.to_sentence
file.delete(true) file.delete(true)
file = nil file = nil

View File

@ -315,7 +315,6 @@ class DmsfFileRevision < ActiveRecord::Base
def create_digest def create_digest
begin begin
self.digest = Digest::SHA256.file(path).hexdigest self.digest = Digest::SHA256.file(path).hexdigest
puts ">>> #{self.digest}, #{self.digest.lengt}"
rescue => e rescue => e
Rails.logger.error e.message Rails.logger.error e.message
self.digest = 0 self.digest = 0

View File

@ -147,7 +147,6 @@ module RedmineDmsf
def projectless_path def projectless_path
i = 1 i = 1
project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
puts ">>> project_names = #{project_names}"
while true while true
prj = nil prj = nil
pinfo = @path.split('/').drop(i) pinfo = @path.split('/').drop(i)

View File

@ -29,7 +29,6 @@ module RedmineDmsf
include Redmine::I18n include Redmine::I18n
def initialize(path, request, response, options) def initialize(path, request, response, options)
puts ">>> initialize for #{path}"
@folder = nil @folder = nil
@file = nil @file = nil
@subproject = nil @subproject = nil
@ -453,14 +452,8 @@ module RedmineDmsf
# Lock # Lock
def lock(args) 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?)) if parent.nil? || ((parent.projectless_path != '/') && (!parent.exist?))
e = DAV4Rack::LockFailure.new e = DAV4Rack::LockFailure.new
puts ">>> Conflict 1"
puts ">>> #{@path}"
puts ">>> #{parent&.name}"
puts ">>> #{parent&.exist?}"
e.add_failure @path, Conflict e.add_failure @path, Conflict
raise e raise e
end end
@ -525,14 +518,7 @@ module RedmineDmsf
# Token based unlock (authenticated) will ensure that a correct token is sent, further ensuring # Token based unlock (authenticated) will ensure that a correct token is sent, further ensuring
# ownership of token before permitting unlock # ownership of token before permitting unlock
def unlock(token) def unlock(token)
unless exist? return NotFound unless exist?
puts ">>> exists? => false"
puts ">>> #{subproject&.name}"
puts ">>> #{folder&.title}"
puts ">>> #{file&.name}"
puts ">>> #{project&.name}"
return NotFound
end
if token.nil? || token.empty? || (token == '<(null)>') || User.current.anonymous? if token.nil? || token.empty? || (token == '<(null)>') || User.current.anonymous?
BadRequest BadRequest
else else

View File

@ -28,34 +28,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
:dmsf_files, :dmsf_file_revisions, :dmsf_links :dmsf_files, :dmsf_file_revisions, :dmsf_links
def setup def setup
@user_member = User.find 2 # John Smith - manager super
@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
@file_link2 = DmsfLink.find 2 @file_link2 = DmsfLink.find 2
@file_link6 = DmsfLink.find 6 @file_link6 = DmsfLink.find 6
@folder_link1 = DmsfLink.find 1 @folder_link1 = DmsfLink.find 1
@url_link5 = DmsfLink.find 5 @url_link5 = DmsfLink.find 5
User.current = nil User.current = nil
@request.session[:user_id] = @user_member.id @request.session[:user_id] = @jsmith.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
end end
def test_dmsf_file def test_dmsf_file
@ -71,8 +50,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_file_locked def test_dmsf_file_locked
@file1.lock! get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-edit.disabled', text: l(:button_edit) assert_select 'a.icon-edit.disabled', text: l(:button_edit)
assert_select 'a.icon-unlock', text: l(:button_unlock) assert_select 'a.icon-unlock', text: l(:button_unlock)
@ -82,23 +60,14 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_file_locked_force_unlock_permission_off def test_dmsf_file_locked_force_unlock_permission_off
l = @file1.lock! get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
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}"] }
assert_response :success assert_response :success
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock) assert_select 'a.icon-unlock.disabled', text: l(:button_unlock)
end end
def test_dmsf_file_locked_force_unlock_permission_on def test_dmsf_file_locked_force_unlock_permission_on
l = @file1.lock! @role_developer.add_permission! :force_file_unlock
l.user = @user_member3 get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
l.save
@role1.add_permission! :force_file_unlock
@role1.add_permission! :file_manipulation
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock), count: 0 assert_select 'a.icon-unlock.disabled', text: l(:button_unlock), count: 0
end end
@ -112,7 +81,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_file_manipulation_permission_off 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}"] } get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-edit.disabled', text: l(:button_edit) assert_select 'a.icon-edit.disabled', text: l(:button_edit)
@ -122,7 +91,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_file_manipulation_permission_on def test_dmsf_file_manipulation_permission_on
@role1.add_permission! :file_manipulation
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit) assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit)
@ -132,28 +100,27 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_file_email_permission_off 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}"] } get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-email.disabled', text: l(:field_mail) assert_select 'a.icon-email.disabled', text: l(:field_mail)
end end
def test_dmsf_file_email_permission_on 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}"] } get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-email.disabled)', text: l(:field_mail) assert_select 'a:not(icon-email.disabled)', text: l(:field_mail)
end end
def test_dmsf_file_delete_permission_off 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}"] } get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-del.disabled', text: l(:button_delete) assert_select 'a.icon-del.disabled', text: l(:button_delete)
end end
def test_dmsf_file_delete_permission_on def test_dmsf_file_delete_permission_on
@role1.remove_permission! :file_delete
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-del.disabled)', text: l(:button_delete) assert_select 'a:not(icon-del.disabled)', text: l(:button_delete)
@ -229,7 +196,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_folder_manipulation_permmissions_off 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}"] } get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-edit.disabled', text: l(:button_edit) assert_select 'a.icon-edit.disabled', text: l(:button_edit)
@ -239,8 +206,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_folder_manipulation_permmissions_on 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}"] } get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit) assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit)
@ -250,14 +215,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_dmsf_folder_email_permmissions_off 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}"] } get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-email.disabled', text: l(:field_mail) assert_select 'a.icon-email.disabled', text: l(:field_mail)
end end
def test_dmsf_folder_email_permmissions_on def test_dmsf_folder_email_permmissions_on
@role1.add_permission! :email_documents
get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] } get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-email.disabled)', text: l(:field_mail) assert_select 'a:not(icon-email.disabled)', text: l(:field_mail)
@ -306,7 +270,8 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_trash_file_manipulation_permissions_off 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}"] } get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-cancel.disabled', text: l(:title_restore) assert_select 'a.icon-cancel.disabled', text: l(:title_restore)
@ -314,7 +279,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_trash_file_manipulation_permissions_on def test_trash_file_manipulation_permissions_on
@role1.add_permission! :file_manipulation
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore) assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore)
@ -322,14 +286,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_trash_file_delete_permissions_off 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}"] } get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-del.disabled', text: l(:button_delete) assert_select 'a.icon-del.disabled', text: l(:button_delete)
end end
def test_trash_file_delete_permissions_on def test_trash_file_delete_permissions_on
@role1.add_permission! :file_delete
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] } get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-del.disabled)', text: l(:button_delete) assert_select 'a:not(icon-del.disabled)', text: l(:button_delete)
@ -343,7 +306,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_trash_folder_manipulation_permissions_off 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}"] } get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
assert_response :success assert_response :success
assert_select 'a.icon-cancel.disabled', text: l(:title_restore) assert_select 'a.icon-cancel.disabled', text: l(:title_restore)
@ -351,7 +314,6 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end end
def test_trash_folder_manipulation_permissions_on def test_trash_folder_manipulation_permissions_on
@role1.add_permission! :folder_manipulation
get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] } get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
assert_response :success assert_response :success
assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore) assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore)

View File

@ -29,64 +29,24 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
:dmsf_files, :dmsf_file_revisions, :dmsf_folder_permissions, :dmsf_locks :dmsf_files, :dmsf_file_revisions, :dmsf_folder_permissions, :dmsf_locks
def setup def setup
@project1 = Project.find 1 super
@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
@file_link2 = DmsfLink.find 4 @file_link2 = DmsfLink.find 4
@folder_link1 = DmsfLink.find 1 @folder_link1 = DmsfLink.find 1
@role = Role.find 1
@custom_field = CustomField.find 21 @custom_field = CustomField.find 21
@custom_value = CustomValue.find 21 @custom_value = CustomValue.find 21
@folder7 = DmsfFolder.find 7
@manager = User.find 2 #1
User.current = nil User.current = nil
@request.session[:user_id] = @manager.id @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
end 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 def test_edit_folder_forbidden
# Missing permissions # Missing permissions
@role_manager.remove_permission! :folder_manipulation
get :edit, params: { id: @project1, folder_id: @folder1 } get :edit, params: { id: @project1, folder_id: @folder1 }
assert_response :forbidden assert_response :forbidden
end end
def test_edit_folder_allowed def test_edit_folder_allowed
# Permissions OK # Permissions OK
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
get :edit, params: { id: @project1, folder_id: @folder1} get :edit, params: { id: @project1, folder_id: @folder1}
assert_response :success assert_response :success
assert_select 'label', { text: @custom_field.name } assert_select 'label', { text: @custom_field.name }
@ -94,16 +54,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_edit_folder_redirection_to_the_parent_folder def test_edit_folder_redirection_to_the_parent_folder
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id, post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
dmsf_folder: { title: @folder2.title, description: @folder2.description} } dmsf_folder: { title: @folder2.title, description: @folder2.description} }
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.dmsf_folder.id) assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.dmsf_folder.id)
end end
def test_edit_folder_redirection_to_the_same_folder def test_edit_folder_redirection_to_the_same_folder
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id, post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
dmsf_folder: { title: @folder2.title, description: @folder2.description, dmsf_folder: { title: @folder2.title, description: @folder2.description,
redirect_to_folder_id: @folder2.id } } redirect_to_folder_id: @folder2.id } }
@ -112,13 +68,13 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_trash_forbidden def test_trash_forbidden
# Missing permissions # Missing permissions
@role_manager.remove_permission! :file_delete
get :trash, params: { id: @project1 } get :trash, params: { id: @project1 }
assert_response :forbidden assert_response :forbidden
end end
def test_trash_allowed def test_trash_allowed
# Permissions OK # Permissions OK
@role.add_permission! :file_delete
get :trash, params: { id: @project1 } get :trash, params: { id: @project1 }
assert_response :success assert_response :success
assert_select 'h2', { text: l(:link_trash_bin) } assert_select 'h2', { text: l(:link_trash_bin) }
@ -126,13 +82,13 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_forbidden def test_delete_forbidden
# Missing permissions # Missing permissions
@role_manager.remove_permission! :folder_manipulation
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false } get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false }
assert_response :forbidden assert_response :forbidden
end end
def test_delete_with_parmission_but_not_empty def test_delete_with_parmission_but_not_empty
# Permissions OK but the folder is not empty # Permissions OK but the folder is not empty
@role.add_permission! :folder_manipulation
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false} get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false}
assert_response :redirect assert_response :redirect
assert_include l(:error_folder_is_not_empty), flash[:error] assert_include l(:error_folder_is_not_empty), flash[:error]
@ -140,7 +96,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_locked def test_delete_locked
# Permissions OK but the folder is locked # Permissions OK but the folder is locked
@role.add_permission! :folder_manipulation
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder2.id) @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} get :delete, params: { id: @project1, folder_id: @folder2.id, commit: false}
assert_response :redirect assert_response :redirect
@ -149,7 +104,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_ok def test_delete_ok
# Empty and not locked folder # Empty and not locked folder
@role.add_permission! :folder_manipulation
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder1.id) @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 } get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false }
assert_response :redirect assert_response :redirect
@ -157,16 +111,16 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_restore_forbidden def test_restore_forbidden
# Missing permissions # Missing permissions
@role_developer.remove_permission! :folder_manipulation
@folder4.deleted = 1 @folder4.deleted = 1
@folder4.save @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 assert_response :forbidden
end end
def test_restore_ok def test_restore_ok
# Permissions OK # Permissions OK
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id)
@role.add_permission! :folder_manipulation
@folder1.deleted = 1 @folder1.deleted = 1
@folder1.save @folder1.save
get :restore, params: { id: @project1, folder_id: @folder1.id } get :restore, params: { id: @project1, folder_id: @folder1.id }
@ -175,6 +129,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_entries_forbidden def test_delete_entries_forbidden
# Missing permissions # Missing permissions
@role_manager.remove_permission! :folder_manipulation
get :entries_operation, params: { id: @project1, delete_entries: 'Delete', get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"] } ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"] }
assert_response :forbidden assert_response :forbidden
@ -183,8 +138,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_not_empty def test_delete_not_empty
# Permissions OK but the folder is not empty # Permissions OK but the folder is not empty
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id) @request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id)
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_files
get :entries_operation, params: { id: @project1, delete_entries: 'Delete', get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]} ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]}
assert_response :redirect assert_response :redirect
@ -194,9 +147,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_entries_ok def test_delete_entries_ok
# Permissions OK # Permissions OK
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id) @request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id)
@role.add_permission! :view_dmsf_files
@role.add_permission! :folder_manipulation
@role.add_permission! :file_delete
flash[:error] = nil flash[:error] = nil
get :entries_operation, params: { id: @project1, delete_entries: 'Delete', get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@file_link2.id}"]} ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
@ -206,7 +156,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_restore_entries def test_restore_entries
# Restore # Restore
@role.add_permission! :view_dmsf_files
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id)
flash[:error] = nil flash[:error] = nil
get :entries_operation, params: { id: @project1, restore_entries: 'Restore', get :entries_operation, params: { id: @project1, restore_entries: 'Restore',
@ -216,10 +165,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_show 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 } get :show, params: { id: @project1.id }
assert_response :success assert_response :success
# New file link # New file link
@ -237,8 +182,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_show_without_file_manipulation def test_show_without_file_manipulation
@role.add_permission! :view_dmsf_files @role_manager.remove_permission! :file_manipulation
@role.add_permission! :view_dmsf_folders
get :show, params: { id: @project1.id } get :show, params: { id: @project1.id }
assert_response :success assert_response :success
# New file link should be missing # New file link should be missing
@ -246,16 +190,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_show_csv def test_show_csv
@role.add_permission! :view_dmsf_files
@role.add_permission! :view_dmsf_folders
get :show, params: { id: @project1.id, format: 'csv' } get :show, params: { id: @project1.id, format: 'csv' }
assert_response :success assert_response :success
assert @response.content_type.match?(/^text\/csv/) assert @response.content_type.match?(/^text\/csv/)
end end
def test_show_folder_doesnt_correspond_the_project 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 # Despite the fact that project != @folder3.project
assert @project1 != @folder3.project assert @project1 != @folder3.project
get :show, params: { id: @project1.id, folder_id: @folder3.id } get :show, params: { id: @project1.id, folder_id: @folder3.id }
@ -263,28 +203,25 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_new_forbidden def test_new_forbidden
@role.remove_permission! :folder_manipulation @role_manager.remove_permission! :folder_manipulation
get :new, params: { id: @project1, parent_id: nil } get :new, params: { id: @project1, parent_id: nil }
assert_response :forbidden assert_response :forbidden
end end
def test_new def test_new
@role.add_permission! :folder_manipulation
get :new, params: { id: @project1, parent_id: nil } get :new, params: { id: @project1, parent_id: nil }
assert_response :success assert_response :success
end end
def test_email_entries_email_from_forbidden def test_email_entries_email_from_forbidden
@role_manager.remove_permission! :email_documents
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com' Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
@role.add_permission! :view_dmsf_files
get :entries_operation, params: {id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} get :entries_operation, params: {id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
assert_response :forbidden assert_response :forbidden
end end
def test_email_entries_email_from def test_email_entries_email_from
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com' Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
@role.add_permission! :view_dmsf_files
@role.add_permission! :email_documents
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
assert_response :success assert_response :success
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from']
@ -292,8 +229,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_email_entries_reply_to def test_email_entries_reply_to
Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com' Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com'
@role.add_permission! :view_dmsf_files
@role.add_permission! :email_documents
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
assert_response :success assert_response :success
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to']
@ -301,15 +236,12 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_email_entries_links_only def test_email_entries_links_only
Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1' Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1'
@role.add_permission! :view_dmsf_files
@role.add_permission! :email_documents
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]} get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"]}
assert_response :success assert_response :success
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only']
end end
def test_entries_email def test_entries_email
@role.add_permission! :view_dmsf_files
zip_file = Tempfile.new('test', DmsfHelper::temp_dir) zip_file = Tempfile.new('test', DmsfHelper::temp_dir)
get :entries_email, params: { id: @project1, email: get :entries_email, params: { id: @project1, email:
{ {
@ -323,43 +255,39 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_add_email_forbidden 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 get :add_email, params: { id: @project1.id }, xhr: true
assert_response :forbidden assert_response :forbidden
end end
def test_add_email def test_add_email
@role.add_permission! :view_dmsf_files
get :add_email, params: { id: @project1.id }, xhr: true get :add_email, params: { id: @project1.id }, xhr: true
assert_response :success assert_response :success
end end
def test_append_email_forbidden def test_append_email_forbidden
@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'} post :append_email, params: { id: @project1, user_ids: @project1.members.collect{ |m| m.user.id }, format: 'js'}
assert_response :forbidden assert_response :forbidden
end end
def test_append_email def test_append_email
@role.add_permission! :view_dmsf_files
post :append_email, params: { id: @project1, user_ids: @project1.members.collect{ |m| m.user.id }, format: 'js'} post :append_email, params: { id: @project1, user_ids: @project1.members.collect{ |m| m.user.id }, format: 'js'}
assert_response :success assert_response :success
end end
def test_autocomplete_for_user_forbidden def test_autocomplete_for_user_forbidden
@role_manager.remove_permission! :view_dmsf_files
get :autocomplete_for_user, params: { id: @project1.id }, xhr: true get :autocomplete_for_user, params: { id: @project1.id }, xhr: true
assert_response :forbidden assert_response :forbidden
end end
def test_autocomplete_for_user def test_autocomplete_for_user
@role.add_permission! :view_dmsf_files
get :autocomplete_for_user, params: { id: @project1 }, xhr: true get :autocomplete_for_user, params: { id: @project1 }, xhr: true
assert_response :success assert_response :success
end end
def test_create_folder_in_root def test_create_folder_in_root
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_folders
assert_difference 'DmsfFolder.count', +1 do assert_difference 'DmsfFolder.count', +1 do
post :create, params: { id: @project1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } } post :create, params: { id: @project1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
end end
@ -367,8 +295,6 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
end end
def test_create_folder def test_create_folder
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_folders
assert_difference 'DmsfFolder.count', +1 do assert_difference 'DmsfFolder.count', +1 do
post :create, params: { id: @project1.id, parent_id: @folder1.id, post :create, params: { id: @project1.id, parent_id: @folder1.id,
dmsf_folder: { title: 'New folder', description: 'Unit tests' } } dmsf_folder: { title: 'New folder', description: 'Unit tests' } }

View File

@ -28,90 +28,65 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
:enabled_modules, :dmsf_file_revisions :enabled_modules, :dmsf_file_revisions
def setup def setup
@project = Project.find 1 super
@project.enable_module! :dmsf @request.session[:user_id] = @jsmith.id
@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
end end
def test_show_file_ok def test_show_file_ok
# Permissions OK # Permissions OK
@role.add_permission! :view_dmsf_files get :show, params: { id: @file1.id }
get :show, params: { id: @file.id }
assert_response :success assert_response :success
end end
def test_show_file_forbidden def test_show_file_forbidden
# Missing permissions # Missing permissions
get :show, params: { id: @file.id } @role_manager.remove_permission! :view_dmsf_files
get :show, params: { id: @file1.id }
assert_response :forbidden assert_response :forbidden
end end
def test_view_file_ok def test_view_file_ok
# Permissions OK # Permissions OK
@role.add_permission! :view_dmsf_files get :view, params: { id: @file1.id }
get :view, params: { id: @file.id }
assert_response :success assert_response :success
end end
def test_view_file_forbidden def test_view_file_forbidden
# Missing permissions # Missing permissions
get :view, params: { id: @file.id } @role_manager.remove_permission! :view_dmsf_files
get :view, params: { id: @file1.id }
assert_response :forbidden assert_response :forbidden
end end
def delete_forbidden def delete_forbidden
# Missing permissions # Missing permissions
delete @file, params: { commit: false } @role_manager.remove_permission! :file_manipulation
delete @file1, params: { commit: false }
assert_response :forbidden assert_response :forbidden
end end
def delete_locked def delete_locked
# Permissions OK but the file is locked # Permissions OK but the file is locked
@role.add_permission! :file_delete delete @file2, params: { commit: false }
delete @file, params: { commit: false }
assert_response :redirect assert_response :redirect
assert_include l(:error_file_is_locked), flash[:error] assert_include l(:error_file_is_locked), flash[:error]
end end
def delete_ok def delete_ok
# Permissions OK and not locked # Permissions OK and not locked
flash[:error].clear delete @file1, params: { commit: false }
@file.unlock!
delete @file, params: { commit: false }
assert_response :redirect assert_response :redirect
assert_equal 0, flash[:error].size assert_equal 0, flash[:error].size
end end
def test_obsolete_revision_ok def test_obsolete_revision_ok
@role.add_permission! :file_manipulation get :obsolete_revision, params: { id: @file1.last_revision.id }
get :obsolete_revision, params: { id: @file.last_revision.id } assert_redirected_to action: 'show', id: @file1
assert_redirected_to action: 'show', id: @file
end end
def test_obsolete_revision_missing_permissions 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 assert :forbiden
end end

View File

@ -29,49 +29,8 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
:enabled_modules, :dmsf_file_revisions, :dmsf_folders, :dmsf_locks :enabled_modules, :dmsf_file_revisions, :dmsf_folders, :dmsf_locks
def setup def setup
@project1 = Project.find 1 super
@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
@request.session[:user_id] = @jsmith.id @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 end
def test_authorize_admin def test_authorize_admin
@ -82,7 +41,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_authorize_non_member 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 } get :new, params: { id: @file1.id }
assert_response :forbidden assert_response :forbidden
end end
@ -142,20 +101,19 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_copy_to_dmsf_not_enabled def test_copy_to_dmsf_not_enabled
@project5.disable_module! :dmsf @project2.disable_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 :forbidden assert_response :forbidden
end end
def test_copy_to_dmsf_enabled def test_copy_to_dmsf_enabled
@project5.enable_module! :dmsf post :copy, params: { id: @file1.id, target_project_id: @project2.id }
post :copy, params: { id: @file1.id, target_project_id: @project5.id }
assert_response :redirect assert_response :redirect
assert_nil flash[:error] assert flash[:error].empty?
end end
def test_copy_to_as_non_member 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 } post :copy, params: { id: @file1.id, target_project_id: @project2.id }
assert_response :forbidden assert_response :forbidden
end end
@ -173,7 +131,6 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_move_locked_file 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 } post :move, params: { id: @file2.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
assert_response :forbidden assert_response :forbidden
end end
@ -185,21 +142,20 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_move_to_dmsf_not_enabled def test_move_to_dmsf_not_enabled
@project5.disable_module! :dmsf @project2.disable_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 :forbidden assert_response :forbidden
end end
def test_move_to_dmsf_enabled def test_move_to_dmsf_enabled
@project5.enable_module! :dmsf post :move, params: { id: @file9.id, target_project_id: @project2.id }
post :move, params: { id: @file1.id, target_project_id: @project5.id }
assert_response :redirect assert_response :redirect
assert_nil flash[:error] assert_nil flash[:error]
end end
def test_move_to_as_non_member def test_move_to_as_non_member
@request.session[:user_id] = @user_non_member.id @request.session[:user_id] = @someone.id
post :move, params: { id: @file1.id, target_project_id: @project2.id } post :move, params: { id: @file9.id, target_project_id: @project2.id }
assert_response :forbidden assert_response :forbidden
end end

View File

@ -26,24 +26,8 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase
:email_addresses :email_addresses
def setup def setup
@project1 = Project.find 1 super
@project1.enable_module! :dmsf @request.session[:user_id] = @jsmith.id
@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
end end
def test_new 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' }, get :autocomplete_for_user, params: { project_id: @project1, dmsf_folder_id: @folder7, q: 'smi', format: 'js' },
xhr: true xhr: true
assert_response :success assert_response :success
assert_include 'John Smith', response.body assert_include @jsmith.name, response.body
end end
def test_append 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 xhr: true
assert_response :success assert_response :success
assert_template 'new' assert_template 'new'

View File

@ -28,48 +28,8 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
:email_addresses, :dmsf_locks :email_addresses, :dmsf_locks
def setup def setup
@project1 = Project.find 1 super
@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
@request.session[:user_id] = @jsmith.id @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 end
def test_authorize_admin def test_authorize_admin
@ -80,7 +40,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_authorize_non_member 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 } get :new, params: { id: @folder1.id }
assert_response :not_found assert_response :not_found
end end
@ -129,7 +89,6 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
def test_copy_to_another_project def test_copy_to_another_project
@request.session[:user_id] = @admin.id @request.session[:user_id] = @admin.id
@project2.enable_module! :dmsf
assert_equal @project1.id, @folder1.project_id assert_equal @project1.id, @folder1.project_id
post :copy, params: { id: @folder1.id, target_project_id: @project2.id } post :copy, params: { id: @folder1.id, target_project_id: @project2.id }
assert_response :redirect assert_response :redirect
@ -149,19 +108,19 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_copy_to_dmsf_not_enabled 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 assert_response :forbidden
end end
def test_copy_to_dmsf_enabled def test_copy_to_dmsf_enabled
@project5.enable_module! :dmsf post :copy, params: { id: @folder6.id, target_project_id: @project2.id }
post :copy, params: { id: @folder6.id, target_project_id: @project5.id }
assert_response :redirect assert_response :redirect
assert_nil flash[:error] assert_nil flash[:error]
end end
def test_copy_to_as_non_member 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 } post :copy, params: { id: @folder6.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
assert_response :not_found assert_response :not_found
end end
@ -185,8 +144,6 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_move_locked_folder def test_move_locked_folder
User.current.id = @admin.id
assert @folder2.locked_for_user?
@request.session[:user_id] = @admin.id @request.session[:user_id] = @admin.id
post :move, params: { id: @folder2.id, target_project_id: @folder6.project.id, target_folder_id: @folder6.id } post :move, params: { id: @folder2.id, target_project_id: @folder6.project.id, target_folder_id: @folder6.id }
assert_response :forbidden assert_response :forbidden
@ -199,19 +156,19 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end end
def test_move_to_dmsf_not_enabled 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 assert_response :forbidden
end end
def test_move_to_dmsf_enabled def test_move_to_dmsf_enabled
@project5.enable_module! :dmsf post :move, params: { id: @folder6.id, target_project_id: @project2.id }
post :move, params: { id: @folder6.id, target_project_id: @project5.id }
assert_response :redirect assert_response :redirect
assert_nil flash[:error] assert_nil flash[:error]
end end
def test_move_to_as_non_member def test_move_to_as_non_member
@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 } post :move, params: { id: @folder6.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
assert_response :not_found assert_response :not_found
end end

View File

@ -28,79 +28,39 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
:dmsf_file_revisions, :dmsf_folders, :dmsf_links, :roles, :member_roles :dmsf_file_revisions, :dmsf_folders, :dmsf_links, :roles, :member_roles
def setup def setup
@user_admin = User.find 1 super
@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
@file_link = DmsfLink.find 1 @file_link = DmsfLink.find 1
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder1.id) @request.session[:user_id] = @jsmith.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
end end
def test_authorize_admin def test_authorize_admin
@request.session[:user_id] = @user_admin.id @request.session[:user_id] = @admin.id
get :new, params: { project_id: @project1.id } get :new, params: { project_id: @project1.id }
assert_response :success assert_response :success
assert_template 'new' assert_template 'new'
end end
def test_authorize_non_member 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 } get :new, params: { project_id: @project2.id }
assert_response :forbidden assert_response :forbidden
end end
def test_authorize_member_ok 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 } get :new, params: { project_id: @project1.id }
assert_response :success assert_response :success
end end
def test_authorize_member_no_module def test_authorize_member_no_module
# Without the module # Without the module
@project1.disable_module!(:dmsf) @project1.disable_module! :dmsf
get :new, params: { project_id: @project1.id } get :new, params: { project_id: @project1.id }
assert_response :forbidden assert_response :forbidden
end end
def test_authorize_forbidden def test_authorize_forbidden
# Without permissions # Without permissions
@project1.enable_module!(:dmsf)
@role_manager.remove_permission! :file_manipulation @role_manager.remove_permission! :file_manipulation
get :new, params: { project_id: @project1.id } get :new, params: { project_id: @project1.id }
assert_response :forbidden assert_response :forbidden
@ -113,7 +73,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
end end
def test_new_fast_links_enabled 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 assert member
member.update_attribute :dmsf_fast_links, true member.update_attribute :dmsf_fast_links, true
get :new, params: { project_id: @project1.id, type: 'link_to'} 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 assert_difference 'DmsfLink.visible.count', -1 do
delete :destroy, params: { project_id: @project1.id, id: @file_link.id } delete :destroy, params: { project_id: @project1.id, id: @file_link.id }
end 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 end
def test_restore_forbidden def test_restore_forbidden
@ -357,8 +317,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_restore_ok def test_restore_ok
# Permissions OK # Permissions OK
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id) @request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id)
@role_manager.add_permission! :file_manipulation
get :restore, params: { project_id: @project1.id, id: @file_link.id } get :restore, params: { project_id: @project1.id, id: @file_link.id }
assert_response :redirect assert_response :redirect
end end

View File

@ -25,16 +25,6 @@ class DmsfPublicUrlsControllerTest < RedmineDmsf::Test::TestCase
fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls 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 def test_show_valid_url
get :show, params: { token: 'd8d33e21914a433b280fdc94450ee212' } get :show, params: { token: 'd8d33e21914a433b280fdc94450ee212' }
assert_response :success assert_response :success

View File

@ -27,54 +27,37 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles
def setup def setup
@user_admin = User.find 1 # Redmine admin super
@user_member = User.find 2 # John Smith - manager @request.session[:user_id] = @jsmith.id
@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
end 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 def test_user_pref_save_member
# Member assert @project1
@request.session[:user_id] = @user_member.id
@role_manager.add_permission! :user_preferences @role_manager.add_permission! :user_preferences
post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' } post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
assert_redirected_to settings_project_path(@project, tab: 'dmsf') assert_redirected_to settings_project_path(@project1, tab: 'dmsf')
assert_not_nil flash[:notice] assert_not_nil flash[:notice]
assert_equal flash[:notice], l(:notice_your_preferences_were_saved) assert_equal flash[:notice], l(:notice_your_preferences_were_saved)
end end
def test_user_pref_save_member_forbidden def test_user_pref_save_member_forbidden
# Member @role_manager.remove_permission! :user_preferences
@request.session[:user_id] = @user_member.id post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' }
assert_response :forbidden assert_response :forbidden
end end
def test_user_pref_save_none_member def test_user_pref_save_none_member
# Non Member # Non Member
@request.session[:user_id] = @user_non_member.id @request.session[:user_id] = @someone.id
@role_manager.add_permission! :user_preferences post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' }
assert_response :forbidden assert_response :forbidden
end end
def test_user_pref_save_admin def test_user_pref_save_admin
# Admin - non member # Admin - non member
@request.session[:user_id] = @user_admin.id @request.session[:user_id] = @admin.id
@role_manager.add_permission! :user_preferences post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
post :user_pref_save, params: { id: @project.id, email_notify: 1, title_format: '%t_%v' } assert_redirected_to settings_project_path(@project1, tab: 'dmsf')
assert_redirected_to settings_project_path(@project, tab: 'dmsf')
assert_not_nil flash[:warning] assert_not_nil flash[:warning]
assert_equal flash[:warning], l(:user_is_not_project_member) assert_equal flash[:warning], l(:user_is_not_project_member)
end end

View File

@ -29,56 +29,24 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
:dmsf_file_revisions, :dmsf_files :dmsf_file_revisions, :dmsf_files
def setup def setup
@user_admin = User.find 1 # Redmine admin super
@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
@wfs1 = DmsfWorkflowStep.find 1 # step 1 @wfs1 = DmsfWorkflowStep.find 1 # step 1
@wfs2 = DmsfWorkflowStep.find 2 # step 2 @wfs2 = DmsfWorkflowStep.find 2 # step 2
@wfs3 = DmsfWorkflowStep.find 3 # step 1 @wfs3 = DmsfWorkflowStep.find 3 # step 1
@wfs4 = DmsfWorkflowStep.find 4 # step 2 @wfs4 = DmsfWorkflowStep.find 4 # step 2
@wfs5 = DmsfWorkflowStep.find 5 # step 3 @wfs5 = DmsfWorkflowStep.find 5 # step 3
@project1 = Project.find 1
@project1.enable_module! :dmsf
@wf1 = DmsfWorkflow.find 1 @wf1 = DmsfWorkflow.find 1
@wf3 = DmsfWorkflow.find 3 @wf3 = DmsfWorkflow.find 3
@wfsa2 = DmsfWorkflowStepAssignment.find 2 @wfsa2 = DmsfWorkflowStepAssignment.find 2
@revision1 = DmsfFileRevision.find 1 @revision1 = DmsfFileRevision.find 1
@revision2 = DmsfFileRevision.find 2 @revision2 = DmsfFileRevision.find 2
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id) @request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id)
User.current = nil @request.session[:user_id] = @jsmith.id
@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
end end
def test_authorize_admin def test_authorize_admin
# Admin # Admin
@request.session[:user_id] = @user_admin.id @request.session[:user_id] = @admin.id
get :index get :index
assert_response :success assert_response :success
assert_template 'index' assert_template 'index'
@ -86,7 +54,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_member def test_authorize_member
# Non member # Non member
@request.session[:user_id] = @user_non_member.id @request.session[:user_id] = @someone.id
get :index, params: { project_id: @project1.id } get :index, params: { project_id: @project1.id }
assert_response :forbidden assert_response :forbidden
end end
@ -136,7 +104,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end end
def test_index_administration def test_index_administration
@request.session[:user_id] = @user_admin.id @request.session[:user_id] = @admin.id
get :index get :index
assert_response :success assert_response :success
assert_template 'index' assert_template 'index'
@ -161,7 +129,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end end
def test_unlock 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 }} put :update, params: { id: @wf3.id, dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE }}
@wf3.reload @wf3.reload
assert @wf3.active?, "#{@wf3.name} status is #{@wf3.status}" assert @wf3.active?, "#{@wf3.name} status is #{@wf3.status}"
@ -197,14 +165,14 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_add_step def test_add_step
assert_difference 'DmsfWorkflowStep.count', +1 do assert_difference 'DmsfWorkflowStep.count', +1 do
post :add_step, params: { commit: l(:dmsf_or), step: 1, name: '1st step', id: @wf1.id, 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 end
assert_response :success assert_response :success
ws = DmsfWorkflowStep.order(id: :desc).first ws = DmsfWorkflowStep.order(id: :desc).first
assert_equal @wf1.id, ws.dmsf_workflow_id assert_equal @wf1.id, ws.dmsf_workflow_id
assert_equal 1, ws.step assert_equal 1, ws.step
assert_equal '1st step', ws.name 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 assert_equal DmsfWorkflowStep::OPERATOR_OR, ws.operator
end end
@ -329,14 +297,14 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
id: @wf1.id, id: @wf1.id,
dmsf_workflow_step_assignment_id: @wfsa2.id, dmsf_workflow_step_assignment_id: @wfsa2.id,
dmsf_file_revision_id: @revision2.id, dmsf_file_revision_id: @revision2.id,
step_action: @user_admin.id * 10, step_action: @admin.id * 10,
note: 'Delegated because...'}) note: 'Delegated because...'})
assert_redirected_to dmsf_folder_path(id: @project1.id) assert_redirected_to dmsf_folder_path(id: @project1.id)
assert DmsfWorkflowStepAction.where( assert DmsfWorkflowStepAction.where(
dmsf_workflow_step_assignment_id: @wfsa2.id, dmsf_workflow_step_assignment_id: @wfsa2.id,
action: DmsfWorkflowStepAction::ACTION_DELEGATE).first action: DmsfWorkflowStepAction::ACTION_DELEGATE).first
@wfsa2.reload @wfsa2.reload
assert_equal @wfsa2.user_id, @user_admin.id assert_equal @wfsa2.user_id, @admin.id
end end
def test_assign def test_assign
@ -398,10 +366,10 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
id: @wf1, id: @wf1,
step: '1', step: '1',
operator_step: { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s }, 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 assert_response :redirect
@wfs1.reload @wfs1.reload
assert_equal @user_non_member.id, @wfs1.user_id assert_equal @someone.id, @wfs1.user_id
end end
def test_delete_step def test_delete_step
@ -415,27 +383,27 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end end
def test_log_non_member 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 get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
assert_response :forbidden assert_response :forbidden
end end
def test_log_member_local_wf 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 get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
assert_response :success assert_response :success
assert_template :log assert_template :log
end end
def test_log_member_global_wf 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 get :log, params: { id: @wf3.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
assert_response :success assert_response :success
assert_template :log assert_template :log
end end
def test_log_admin 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 get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
assert_response :success assert_response :success
assert_template :log assert_template :log

View File

@ -28,35 +28,9 @@ class IssuesControllerTest < RedmineDmsf::Test::TestCase
:enabled_modules, :enumerations, :issue_statuses :enabled_modules, :enumerations, :issue_statuses
def setup def setup
@user_manager = User.find 2 super
@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
@issue1 = Issue.find 1 @issue1 = Issue.find 1
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] @request.session[:user_id] = @jsmith.id
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
end end
def test_put_update_with_project_change def test_put_update_with_project_change

View File

@ -29,15 +29,8 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
:dmsf_files, :dmsf_locks :dmsf_files, :dmsf_locks
def setup def setup
@admin = User.find 1 super
@jsmith = User.find 2
User.current = nil
@request.session[:user_id] = @jsmith.id @request.session[:user_id] = @jsmith.id
end
def test_truth
assert_kind_of User, @admin
assert_kind_of User, @jsmith
end end
def test_page_with_open_approvals_one_approval def test_page_with_open_approvals_one_approval

View File

@ -29,11 +29,11 @@ module RedmineDmsf
# Ultimately it allows for better integration without blowing redmine fixtures up, # Ultimately it allows for better integration without blowing redmine fixtures up,
# and allowing us to suppliment redmine fixtures if we need to. # and allowing us to suppliment redmine fixtures if we need to.
def self.fixtures(*table_names) def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures') dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x| 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 end
super(table_names) super table_names
end end
end end
end end

View File

@ -24,42 +24,16 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n 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 def setup
@admin = User.find 1 super
@jsmith = User.find 2
@file1 = DmsfFile.find 1
Setting.rest_api_enabled = '1' Setting.rest_api_enabled = '1'
@role = Role.find_by(name: 'Manager') @token = Token.create!(user: @jsmith_user, action: 'api')
@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
end end
def test_get_document 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 #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}" get "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}"
assert_response :success assert_response :success
@ -131,7 +105,6 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_upload_document 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 #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' } 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 assert_response :created
@ -174,24 +147,23 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_delete_file 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 # 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' } delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :success assert_response :success
@file1.reload @file1.reload
assert_equal DmsfFile::STATUS_DELETED, @file1.deleted assert_equal DmsfFile::STATUS_DELETED, @file1.deleted
assert_equal @jsmith, @file1.deleted_by_user assert_equal @jsmith_user, @file1.deleted_by_user
end end
def test_delete_file_no_permissions 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 # 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' } delete "/dmsf/files/#{@file1.id}.xml?key=#{token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :forbidden assert_response :forbidden
end end
def test_delete_folder_commit_yes 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 # 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' } delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}&commit=yes", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :success assert_response :success
@ -199,9 +171,9 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_delete_file_locked def test_delete_file_locked
@role.add_permission! :file_delete User.current = @admin_user
User.current = @admin
@file1.lock! @file1.lock!
User.current = nil
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml # 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' } delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response 422 assert_response 422
@ -209,7 +181,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
# <errors type="array"> # <errors type="array">
# <error>Locked by Admin</error> # <error>Locked by Admin</error>
# </errors> # </errors>
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 @file1.reload
assert_equal DmsfFile::STATUS_ACTIVE, @file1.deleted assert_equal DmsfFile::STATUS_ACTIVE, @file1.deleted
end end

View File

@ -24,49 +24,18 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n include Redmine::I18n
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :projects, :users, :members, :roles, fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :projects, :users, :email_addresses, :members,
:member_roles :roles, :member_roles, :dmsf_locks
def setup def setup
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] super
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
Setting.rest_api_enabled = '1' Setting.rest_api_enabled = '1'
@role = Role.find_by(name: 'Manager') @token = Token.create!(user: @jsmith_user, action: 'api')
@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
end end
def test_list_folder 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 #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_response :success
assert_equal 'application/xml', @response.content_type assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
@ -86,10 +55,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_list_folder_limit_and_offset 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" #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_response :success
assert_equal 'application/xml', @response.content_type assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
@ -109,8 +76,6 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_create_folder 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 #curl -v -H "Content-Type: application/xml" -X POST --data "@folder.xml" -u ${1}:${2} http://localhost:3000/projects/12/dmsf/create.xml
payload = %{<?xml version="1.0" encoding="utf-8" ?> payload = %{<?xml version="1.0" encoding="utf-8" ?>
<dmsf_folder> <dmsf_folder>
@ -118,7 +83,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
<description>A folder created via REST API</description> <description>A folder created via REST API</description>
<dmsf_folder_id/> <dmsf_folder_id/>
</dmsf_folder>} </dmsf_folder>}
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 assert_response :success
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_folder> # <dmsf_folder>
@ -129,10 +94,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_find_folder_by_title 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 # 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_response :success
assert_equal 'application/xml', @response.content_type assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
@ -157,18 +120,14 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_find_folder_by_title_not_found 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 # 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 assert_response :not_found
end end
def test_find_folder_by_id 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 # 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_response :success
assert_equal 'application/xml', @response.content_type assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
@ -193,23 +152,19 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_find_folder_by_id_not_found 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 # 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 assert_response :not_found
end end
def test_update_folder 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 #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 = %{<?xml version="1.0" encoding="utf-8" ?> payload = %{<?xml version="1.0" encoding="utf-8" ?>
<dmsf_folder> <dmsf_folder>
<title>rest_api</title> <title>rest_api</title>
<description>A folder updated via REST API</description> <description>A folder updated via REST API</description>
</dmsf_folder>} </dmsf_folder>}
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 assert_response :success
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_folder> # <dmsf_folder>
@ -221,43 +176,34 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end end
def test_delete_folder 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 # 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' } headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :success assert_response :success
@folder1.reload @folder6.reload
assert_equal DmsfFolder::STATUS_DELETED, @folder1.deleted assert_equal DmsfFolder::STATUS_DELETED, @folder6.deleted
assert_equal @jsmith, @folder1.deleted_by_user assert_equal @jsmith_user, @folder6.deleted_by_user
end end
def test_delete_folder_no_permission 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 # 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'} headers: {'CONTENT_TYPE' => 'application/xml'}
assert_response :forbidden assert_response :forbidden
end end
def test_delete_folder_commit_yes 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 # 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' } headers: { CONTENT_TYPE: 'application/xml' }
assert_response :success assert_response :success
assert_nil DmsfFolder.find_by(id: @folder1.id) assert_nil DmsfFolder.find_by(id: @folder6.id)
end end
def test_delete_folder_locked 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 # 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' } headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response 422 assert_response 422
# <?xml version="1.0" encoding="UTF-8"?> # <?xml version="1.0" encoding="UTF-8"?>
@ -265,8 +211,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
# <error>Folder is locked</error> # <error>Folder is locked</error>
# </errors> # </errors>
assert_select 'errors > error', text: l(:error_folder_is_locked) assert_select 'errors > error', text: l(:error_folder_is_locked)
@folder1.reload @folder2.reload
assert_equal DmsfFolder::STATUS_ACTIVE, @folder1.deleted assert_equal DmsfFolder::STATUS_ACTIVE, @folder2.deleted
end end
end end

View File

@ -24,29 +24,16 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfLinkApiTest < RedmineDmsf::Test::IntegrationTest class DmsfLinkApiTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n 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 def setup
@admin = User.find 1 super
@jsmith = User.find 2
@file1 = DmsfFile.find 1
Setting.rest_api_enabled = '1' 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 end
def test_create_link def test_create_link
@role.add_permission! :file_manipulation token = Token.create!(user: @jsmith_user, action: 'api')
token = Token.create!(user: @jsmith, action: 'api')
name = 'REST API link test' 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 # 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 = %{<?xml version="1.0" encoding="utf-8" ?> payload = %{<?xml version="1.0" encoding="utf-8" ?>

View File

@ -23,14 +23,7 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfWebdavCustomMiddlewareTest < RedmineDmsf::Test::IntegrationTest class DmsfWebdavCustomMiddlewareTest < RedmineDmsf::Test::IntegrationTest
def setup fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles, :dmsf_folders, :dmsf_files
@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
def test_options_for_root_path def test_options_for_root_path
process :options, '/' process :options, '/'

View File

@ -25,61 +25,10 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n 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, :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions,
:dmsf_locks :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 def test_not_authenticated
delete '/dmsf/webdav' delete '/dmsf/webdav'
assert_response :unauthorized assert_response :unauthorized
@ -135,6 +84,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_unathorized_user def test_unathorized_user
@role.remove_permission! :view_dmsf_folders
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith 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. assert_response :not_found # Without folder_view permission, he will not even be aware of its existence.
@file1.reload @file1.reload
@ -142,15 +92,15 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_unathorized_user_forbidden 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 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 @file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist" assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
end end
def test_view_folder_not_allowed 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 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. assert_response :not_found # Without folder_view permission, he will not even be aware of its existence.
@folder1.reload @folder1.reload
@ -158,7 +108,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_folder_manipulation_not_allowed 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 delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, headers: @jsmith
assert_response :forbidden # Without manipulation permission, action is forbidden. assert_response :forbidden # Without manipulation permission, action is forbidden.
@folder1.reload @folder1.reload
@ -169,12 +119,10 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @admin delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @admin
assert_response :success assert_response :success
@folder6.reload @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 end
def test_folder_delete_by_user 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 delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :success assert_response :success
@folder6.reload @folder6.reload
@ -183,8 +131,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_folder_delete_by_user_with_project_names def test_folder_delete_by_user_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true 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 delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :not_found assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
@ -202,8 +148,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_file_delete_by_user 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 delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :success assert_response :success
@file1.reload @file1.reload
@ -211,9 +155,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_file_delete_by_user_with_project_names def test_file_delete_by_user_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :not_found assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
@ -224,15 +166,11 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_folder_delete_fragments 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 delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/#frament=HTTP/1.1", params: nil, headers: @jsmith
assert_response :bad_request assert_response :bad_request
end end
def test_locked_folder def test_locked_folder
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@folder6.lock! @folder6.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :locked assert_response :locked
@ -241,8 +179,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_locked_file def test_locked_file
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
@file1.lock! @file1.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :locked assert_response :locked
@ -251,8 +187,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end end
def test_non_versioned_file 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 delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :success assert_response :success
# The file should be destroyed # The file should be destroyed

View File

@ -27,57 +27,6 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
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 def test_should_deny_anonymous
get '/dmsf/webdav' get '/dmsf/webdav'
assert_response :unauthorized assert_response :unauthorized
@ -129,7 +78,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end end
def test_should_return_status_200_when_dmsf_not_enabled_for_project 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 get "/dmsf/webdav/#{@project2.identifier}", params: nil, headers: @jsmith
assert_response :success assert_response :success
# Folders and files are not listed # Folders and files are not listed
@ -138,8 +87,6 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end end
def test_should_not_list_files_without_permissions 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 @role.remove_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :success assert_response :success
@ -149,9 +96,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end end
def test_should_not_list_folders_without_permissions def test_should_not_list_folders_without_permissions
assert @project1.module_enabled?('dmsf')
@role.remove_permission! :view_dmsf_folders @role.remove_permission! :view_dmsf_folders
@role.add_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :success assert_response :success
# Folders are not listed # Folders are not listed
@ -175,7 +120,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
assert_response :success assert_response :success
folder = DmsfFolder.find_by(id: 1) folder = DmsfFolder.find_by(id: 1)
assert_not_nil folder assert_not_nil folder
assert response.body.match(folder.title), assert response.body.match(@folder1.title),
"Expected to find #{folder.title} in return data" "Expected to find #{folder.title} in return data"
file = DmsfFile.find_by(id: 1) file = DmsfFile.find_by(id: 1)
assert_not_nil file assert_not_nil file
@ -189,43 +134,33 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end end
def test_user_assigned_to_archived_project def test_user_assigned_to_archived_project
@project1.enable_module! :dmsf
@project1.archive @project1.archive
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :not_found assert_response :not_found
end end
def test_user_assigned_to_project_folder_ok 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 get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :success assert_response :success
end end
def test_user_assigned_to_project_file_forbidden def test_user_assigned_to_project_file_forbidden
@project1.enable_module! :dmsf @role.remove_permission! :view_dmsf_files
@role.add_permission! :view_dmsf_folders
get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith
assert_response :forbidden assert_response :forbidden
end end
def test_user_assigned_to_project_file_ok 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 get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith
assert_response :success assert_response :success
end end
def test_get_file_in_subproject def test_get_file_in_subproject
@project3.enable_module! :dmsf
get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin
assert_response :success assert_response :success
end end
def test_get_folder_in_subproject def test_get_folder_in_subproject
@project3.enable_module! :dmsf
get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin
assert_response :success assert_response :success
end end

View File

@ -25,51 +25,7 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders :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
@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
def test_head_requires_authentication def test_head_requires_authentication
head "/dmsf/webdav/#{@project1.identifier}" head "/dmsf/webdav/#{@project1.identifier}"
@ -81,7 +37,7 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin
assert_response :success assert_response :success
check_headers_exist 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 head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin
assert_response :not_found assert_response :not_found
head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin
@ -96,8 +52,8 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
def test_head_responds_to_file def test_head_responds_to_file
head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin
assert_response :success assert_response :success
check_headers_exist # Note it'll allow 1 out of the 3 expected to fail 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}/test.txt", params: nil, headers: @admin head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin
assert_response :not_found assert_response :not_found
head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin
@ -141,48 +97,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
end end
def test_head_file_in_subproject 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
head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin assert_response :success
assert_response :success end
end
def test_head_folder_in_subproject 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 head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin
assert_response :success assert_response :success
end 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 end

View File

@ -29,144 +29,101 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks
def setup def setup
@admin = credentials 'admin' super
@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'
@xml = %{<?xml version="1.0" encoding="utf-8" ?> @xml = %{<?xml version="1.0" encoding="utf-8" ?>
<d:lockinfo xmlns:d="DAV:"> <d:lockinfo xmlns:d="DAV:">
<d:lockscope><d:exclusive/></d:lockscope> <d:lockscope><d:exclusive/></d:lockscope>
<d:locktype><d:write/></d:locktype> <d:locktype><d:write/></d:locktype>
<d:owner>jsmith</d:owner> <d:owner>jsmith</d:owner>
</d:lockinfo>} </d:lockinfo>}
User.current = nil
end end
def teardown def test_lock_file_already_locked_by_other
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav log_user 'admin', 'admin'
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy 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 '<d:status>HTTP/1.1 409 Conflict</d:status>', response.body
end end
def test_truth def test_lock_file
assert_kind_of Project, @project1 log_user 'jsmith', 'jsmith'
assert_kind_of Project, @project2 create_time = Time.utc(2000, 1, 2, 3, 4, 5)
assert_kind_of Project, @project3 refresh_time = Time.utc(2000, 1, 2, 6, 7, 8)
assert_kind_of DmsfFile, @file1 lock_token = nil
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file9 # Time travel, will make the usec part of the time 0
assert_kind_of DmsfFile, @file12 travel_to create_time do
assert_kind_of DmsfFolder, @folder10 # Lock file
assert_kind_of Role, @role process :lock, "/dmsf/webdav/#{@file9.project.identifier}/#{@file9.name}", params: @xml,
assert_kind_of User, @admin_user headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :success
# Verify the response
# <?xml version=\"1.0\"?>
# <d:prop xmlns:d=\"DAV:\">
# <d:lockdiscovery>
# <d:activelock>
# <d:lockscope>exclusive</d:lockscope>
# <d:locktype>write</d:locktype>
# <d:depth>infinity</d:depth>
# <d:timeout>Second-604800</d:timeout>
# <d:locktoken>
# <d:href>f5762389-6b49-4482-9a4b-ff1c8f975765</d:href>
# </d:locktoken>
# </d:activelock>
# </d:lockdiscovery>
# </d:prop>
assert_match '<d:lockscope>exclusive</d:lockscope>', response.body
assert_match '<d:locktype>write</d:locktype>', response.body
assert_match '<d:depth>infinity</d:depth>', response.body
# 1.week = 7*24*3600=604800 seconds
assert_match '<d:timeout>Second-604800</d:timeout>', response.body
assert_match(/<d:locktoken><d:href>([a-z0-9\-]+)<\/d:href><\/d:locktoken>/, response.body)
# Extract the locktoken, needed when refreshing the lock
response.body.match(/<d:locktoken><d:href>([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 '<d:timeout>Second-604800</d:timeout>', 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 end
# def test_lock_file_already_locked_by_other def test_lock_file_in_subproject
# log_user 'admin', 'admin' log_user 'admin', 'admin'
# process :lock, "/dmsf/webdav/#{@file2.project.identifier}/#{@file2.name}", params: @xml, process :lock, "/dmsf/webdav/#{@file12.project.parent.identifier}/#{@file12.project.identifier}/#{@file12.name}",
# headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
# assert_response :multi_status assert_response :success
# assert_match '<d:status>HTTP/1.1 409 Conflict</d:status>', response.body end
# end
# def test_lock_folder_in_subproject
# def test_lock_file log_user 'admin', 'admin'
# log_user 'jsmith', 'jsmith' process :lock,
# create_time = Time.utc(2000, 1, 2, 3, 4, 5) "/dmsf/webdav/#{@folder10.project.parent.identifier}/#{@folder10.project.identifier}/#{@folder10.title}",
# refresh_time = Time.utc(2000, 1, 2, 6, 7, 8) params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
# lock_token = nil assert_response :success
# end
# # 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
# # <?xml version=\"1.0\"?>
# # <d:prop xmlns:d=\"DAV:\">
# # <d:lockdiscovery>
# # <d:activelock>
# # <d:lockscope>exclusive</d:lockscope>
# # <d:locktype>write</d:locktype>
# # <d:depth>infinity</d:depth>
# # <d:timeout>Second-604800</d:timeout>
# # <d:locktoken>
# # <d:href>f5762389-6b49-4482-9a4b-ff1c8f975765</d:href>
# # </d:locktoken>
# # </d:activelock>
# # </d:lockdiscovery>
# # </d:prop>
# assert_match '<d:lockscope>exclusive</d:lockscope>', response.body
# assert_match '<d:locktype>write</d:locktype>', response.body
# assert_match '<d:depth>infinity</d:depth>', response.body
# # 1.week = 7*24*3600=604800 seconds
# assert_match '<d:timeout>Second-604800</d:timeout>', response.body
# assert_match(/<d:locktoken><d:href>([a-z0-9\-]+)<\/d:href><\/d:locktoken>/, response.body)
# # Extract the locktoken, needed when refreshing the lock
# response.body.match(/<d:locktoken><d:href>([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 '<d:timeout>Second-604800</d:timeout>', 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_subproject def test_lock_subproject
log_user 'admin', 'admin' log_user 'admin', 'admin'
puts ">>> process lock"
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}", params: @xml, process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}", params: @xml,
headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' }) headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :multi_status assert_response :multi_status

View File

@ -27,51 +27,6 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders :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 def test_mkcol_requires_authentication
process :mkcol, '/dmsf/webdav/test1' process :mkcol, '/dmsf/webdav/test1'
assert_response :unauthorized assert_response :unauthorized

View File

@ -27,64 +27,6 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
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 def test_move_denied_for_anonymous
new_name = "#{@file1.name}.moved" new_name = "#{@file1.name}.moved"

View File

@ -27,33 +27,6 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders :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 def test_options_requires_no_authentication_for_root_level
process :options, '/dmsf/webdav' process :options, '/dmsf/webdav'
assert_response :success assert_response :success

View File

@ -26,17 +26,7 @@ class DmsfWebdavPostTest < RedmineDmsf::Test::IntegrationTest
fixtures :users, :email_addresses fixtures :users, :email_addresses
def setup # Test that any post request is authenticated
@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
def test_post_request_authenticated def test_post_request_authenticated
post '/dmsf/webdav/' post '/dmsf/webdav/'
assert_response :unauthorized assert_response :unauthorized

View File

@ -28,67 +28,20 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
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 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 assert_response :unauthorized
end 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' }) process :propfind, '/dmsf/webdav/', params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '0' })
assert_response :multi_status assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>') assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?('<d:displayname>/</d:displayname>') assert response.body.include?('<d:displayname>/</d:displayname>')
end end
def test_propfind_depth1_on_root_for_non_member def test_propfind_depth1_on_root_for_user
process :propfind, '/dmsf/webdav/', params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '1' }) process :propfind, '/dmsf/webdav/', params: nil, headers: @someone.merge!({ HTTP_DEPTH: '1' })
assert_response :multi_status assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>') assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?( '<d:displayname>/</d:displayname>') assert response.body.include?( '<d:displayname>/</d:displayname>')
@ -116,19 +69,19 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end end
def test_propfind_depth0_on_project1_for_non_member 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 assert_response :success
end end
def test_propfind_depth0_on_folder1_for_non_member def test_propfind_depth0_on_folder1_for_non_member
process :propfind, "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, 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 assert_response :not_found
end end
def test_propfind_depth0_on_file1_for_non_member def test_propfind_depth0_on_file1_for_non_member
process :propfind, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, 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 assert_response :not_found
end end

View File

@ -28,120 +28,75 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions :enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
def setup def test_put_denied_unless_authenticated_root
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] put '/dmsf/webdav'
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf' assert_response :unauthorized
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
end end
def teardown def test_put_denied_unless_authenticated
# Delete our tmp folder put "/dmsf/webdav/#{@project1.identifier}"
begin assert_response :unauthorized
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 end
# def test_truth def test_put_denied_with_failed_authentication_root
# assert_kind_of Project, @project1 put '/dmsf/webdav', params: nil, headers: credentials('admin', 'badpassword')
# assert_kind_of Project, @project2 assert_response :unauthorized
# assert_kind_of Project, @project3 end
# assert_kind_of Role, @role
# assert_kind_of User, @jsmith_user def test_put_denied_with_failed_authentication
# end put "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: credentials('admin', 'badpassword')
# assert_response :unauthorized
# def test_put_denied_unless_authenticated_root end
# put '/dmsf/webdav'
# assert_response :unauthorized def test_put_denied_at_root_level
# end put '/dmsf/webdav/test.txt', params: '1234', headers: @admin.merge!({ content_type: :text })
# assert_response :forbidden
# def test_put_denied_unless_authenticated end
# put "/dmsf/webdav/#{@project1.identifier}"
# assert_response :unauthorized def test_put_denied_on_folder
# end put "/dmsf/webdav/#{@project1.identifier}", params: '1234', headers: @admin.merge!({ content_type: :text })
# assert_response :forbidden
# def test_put_denied_with_failed_authentication_root end
# put '/dmsf/webdav', params: nil, headers: credentials('admin', 'badpassword')
# assert_response :unauthorized def test_put_failed_on_non_existant_project
# end 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
# def test_put_denied_with_failed_authentication end
# put "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: credentials('admin', 'badpassword')
# assert_response :unauthorized def test_put_as_admin_granted_on_dmsf_enabled_project
# end put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234',
# headers: @admin.merge!({ content_type: :text })
# def test_put_denied_at_root_level assert_response :created
# put '/dmsf/webdav/test.txt', params: '1234', headers: @admin.merge!({ content_type: :text }) # Lets check for our file
# assert_response :forbidden file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
# end assert file, 'Check for files existance'
# Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
# def test_put_denied_on_folder project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
# put "/dmsf/webdav/#{@project1.identifier}", params: '1234', headers: @admin.merge!({ content_type: :text }) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234',
# assert_response :forbidden headers: @admin.merge!({ content_type: :text })
# end assert_response :conflict
# put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @admin.merge!({ content_type: :text })
# def test_put_failed_on_non_existant_project assert_response :created
# put '/dmsf/webdav/not_a_project/file.txt', params: '1234', headers: @admin.merge!({ content_type: :text }) end
# assert_response :conflict # not_a_project does not exist - file.txt cannot be created
# end def test_put_failed_as_jsmith_on_non_dmsf_enabled_project
# @project2.disable_module! :dmsf
# def test_put_as_admin_granted_on_dmsf_enabled_project put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", params: '1234',
# put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', headers: @jsmith.merge!({ content_type: :text })
# headers: @admin.merge!({ content_type: :text }) assert_response :forbidden
# assert_response :created # Lets check for our file
# # Lets check for our file file = DmsfFile.find_file_by_name @project2, nil, 'test-1234.txt'
# file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt' assert_nil file, 'Check for files existance'
# assert file, 'Check for files existance' end
# Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
# project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)) def test_put_failed_when_no_permission
# put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234', @role.remove_permission! :file_manipulation
# headers: @admin.merge!({ content_type: :text }) put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234',
# assert_response :conflict headers: @jsmith.merge!({ content_type: :text })
# put "/dmsf/webdav/#{project1_uri}/test-1234.txt", params: '1234', headers: @admin.merge!({ content_type: :text }) assert_response :forbidden
# assert_response :created end
# 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_succeeds_for_non_admin_with_correct_permissions 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', put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", params: '1234',
headers: @jsmith.merge!({ content_type: :text }) headers: @jsmith.merge!({ content_type: :text })
assert_response :created # Now we have permissions assert_response :created # Now we have permissions
@ -161,179 +116,160 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
assert_response :created # Now we have permissions assert_response :created # Now we have permissions
end end
# def test_put_writes_revision_successfully_for_unlocked_file def test_put_writes_revision_successfully_for_unlocked_file
# @project1.enable_module! :dmsf #Flag module enabled file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
# @role.add_permission! :view_dmsf_folders assert_not_nil file, 'test.txt file not found'
# @role.add_permission! :file_manipulation assert_difference 'file.dmsf_file_revisions.count', +1 do
# file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# assert_not_nil file, 'test.txt file not found' headers: @jsmith.merge!({ content_type: :text })
# assert_difference 'file.dmsf_file_revisions.count', +1 do assert_response :created
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', end
# headers: @jsmith.merge!({ content_type: :text }) end
# assert_response :created
# end def test_put_fails_revision_when_file_is_locked
# end log_user 'admin', 'admin' # login as admin
# file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
# def test_put_fails_revision_when_file_is_locked assert file.lock!, "File failed to be locked by #{User.current}"
# @project1.enable_module! :dmsf # Flag module enabled assert_no_difference 'file.dmsf_file_revisions.count' do
# @role.add_permission! :view_dmsf_folders put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# @role.add_permission! :file_manipulation headers: @jsmith.merge!({ content_type: :text })
# log_user 'admin', 'admin' # login as admin assert_response :locked
# file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' end
# assert file.lock!, "File failed to be locked by #{User.current}" end
# assert_no_difference 'file.dmsf_file_revisions.count' do
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', def test_put_fails_revision_when_file_is_locked_and_user_is_administrator
# headers: @jsmith.merge!({ content_type: :text }) log_user 'jsmith', 'jsmith' # login as jsmith
# assert_response :locked file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
# end assert file.lock!, "File failed to be locked by #{User.current}"
# end assert_no_difference 'file.dmsf_file_revisions.count' do
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# def test_put_fails_revision_when_file_is_locked_and_user_is_administrator headers: @admin.merge!({ content_type: :text })
# @project1.enable_module! :dmsf # Flag module enabled assert_response :locked
# @role.add_permission! :view_dmsf_folders end
# @role.add_permission! :file_manipulation end
# log_user 'jsmith', 'jsmith' # login as jsmith
# file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' def test_put_accepts_revision_when_file_is_locked_and_user_is_same_as_lock_holder
# assert file.lock!, "File failed to be locked by #{User.current}" # Lock the file
# assert_no_difference 'file.dmsf_file_revisions.count' do User.current = @jsmith_user
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
# headers: @admin.merge!({ content_type: :text }) l = file.lock!
# assert_response :locked assert l, "File failed to be locked by #{User.current}"
# end assert_equal file.last_revision.id, l.dmsf_file_last_revision_id
# end
# # First PUT should always create new revision.
# def test_put_accepts_revision_when_file_is_locked_and_user_is_same_as_lock_holder User.current = @jsmith_user
# @project1.enable_module! :dmsf # Flag module enabled assert_difference 'file.dmsf_file_revisions.count', +1 do
# @role.add_permission! :view_dmsf_folders put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# @role.add_permission! :file_manipulation headers: @jsmith.merge!({ content_type: :text })
# assert_response :created
# # Lock the file end
# User.current = @jsmith_user
# file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' # Second PUT on a locked file should only update the revision that were created on the first PUT
# l = file.lock! User.current = @jsmith_user
# assert l, "File failed to be locked by #{User.current}" assert_no_difference 'file.dmsf_file_revisions.count' do
# assert_equal file.last_revision.id, l.dmsf_file_last_revision_id put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# headers: @jsmith.merge!({ content_type: :text })
# # First PUT should always create new revision. assert_response :created
# User.current = @jsmith_user end
# assert_difference 'file.dmsf_file_revisions.count', +1 do
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', # Unlock
# headers: @jsmith.merge!({ content_type: :text }) User.current = @jsmith_user
# assert_response :created assert file.unlock!, "File failed to be unlocked by #{User.current}"
# end
# # Lock file again, but this time delete the revision that were stored in the lock
# # Second PUT on a locked file should only update the revision that were created on the first PUT User.current = @jsmith_user
# User.current = @jsmith_user file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
# assert_no_difference 'file.dmsf_file_revisions.count' do l = file.lock!
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', assert l, "File failed to be locked by #{User.current}"
# headers: @jsmith.merge!({ content_type: :text }) assert_equal file.last_revision.id, l.dmsf_file_last_revision_id
# assert_response :created
# end # Delete the last revision, the revision that were stored in the lock.
# file.last_revision.delete(true)
# # Unlock
# User.current = @jsmith_user # First PUT should always create new revision.
# assert file.unlock!, "File failed to be unlocked by #{User.current}" User.current = @jsmith_user
# assert_difference 'file.dmsf_file_revisions.count', +1 do
# # Lock file again, but this time delete the revision that were stored in the lock put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# User.current = @jsmith_user headers: @jsmith.merge!({ content_type: :text })
# file = DmsfFile.find_file_by_name @project1, nil, 'test.txt' assert_response :created
# l = file.lock! end
# assert l, "File failed to be locked by #{User.current}"
# assert_equal file.last_revision.id, l.dmsf_file_last_revision_id # Second PUT on a locked file should only update the revision that were created on the first PUT
# User.current = @jsmith_user
# # Delete the last revision, the revision that were stored in the lock. assert_no_difference 'file.dmsf_file_revisions.count' do
# file.last_revision.delete(true) put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# headers: @jsmith.merge!({ content_type: :text })
# # First PUT should always create new revision. assert_response :created
# User.current = @jsmith_user end
# assert_difference 'file.dmsf_file_revisions.count', +1 do end
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234',
# headers: @jsmith.merge!({ content_type: :text }) def test_put_ignored_files_default
# assert_response :created # Ignored patterns: /^(\._|\.DS_Store$|Thumbs.db$)/
# end put "/dmsf/webdav/#{@project1.identifier}/._test.txt", params: '1234',
# headers: @admin.merge!({ content_type: :text })
# # Second PUT on a locked file should only update the revision that were created on the first PUT assert_response :no_content
# User.current = @jsmith_user put "/dmsf/webdav/#{@project1.identifier}/.DS_Store", params: '1234', headers: @admin.merge!({ content_type: :text })
# assert_no_difference 'file.dmsf_file_revisions.count' do assert_response :no_content
# put "/dmsf/webdav/#{@project1.identifier}/test.txt", params: '1234', put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", params: '1234', headers: @admin.merge!({ content_type: :text })
# headers: @jsmith.merge!({ content_type: :text }) assert_response :no_content
# assert_response :created original = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore']
# end Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = '.dump$'
# end put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text })
# assert_response :no_content
# def test_put_ignored_files_default Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = original
# # Ignored patterns: /^(\._|\.DS_Store$|Thumbs.db$)/ end
# @project1.enable_module! :dmsf
# @role.add_permission! :view_dmsf_folders def test_put_non_versioned_files
# @role.add_permission! :file_manipulation credentials = @admin.merge!({ content_type: :text })
# put "/dmsf/webdav/#{@project1.identifier}/._test.txt", params: '1234',
# headers: @admin.merge!({ content_type: :text }) put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '1234', headers: credentials
# assert_response :no_content assert_response :success
# put "/dmsf/webdav/#{@project1.identifier}/.DS_Store", params: '1234', headers: @admin.merge!({ content_type: :text }) file1 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder: nil, name: 'file1.tmp')
# assert_response :no_content assert file1
# put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", params: '1234', headers: @admin.merge!({ content_type: :text }) assert_difference 'file1.dmsf_file_revisions.count', 0 do
# assert_response :no_content put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '5678', headers: credentials
# original = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] assert_response :created
# Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = '.dump$' end
# put "/dmsf/webdav/#{@project1.identifier}/test.dump", params: '1234', headers: @admin.merge!({ content_type: :text }) assert_difference 'file1.dmsf_file_revisions.count', 0 do
# assert_response :no_content put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '9ABC', headers: credentials
# Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = original assert_response :created
# end end
#
# def test_put_non_versioned_files put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '1234', headers: credentials
# @project1.enable_module! :dmsf assert_response :success
# @role.add_permission! :view_dmsf_folders file2 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: '~$file2.txt')
# @role.add_permission! :file_manipulation assert file2
# credentials = @admin.merge!({ content_type: :text }) assert_difference 'file2.dmsf_file_revisions.count', 0 do
# put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '5678', headers: credentials
# put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '1234', headers: credentials assert_response :created
# assert_response :success end
# file1 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder: nil, name: 'file1.tmp') assert_difference 'file2.dmsf_file_revisions.count', 0 do
# assert file1 put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '9ABC', headers: credentials
# assert_difference 'file1.dmsf_file_revisions.count', 0 do assert_response :created
# put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '5678', headers: credentials end
# assert_response :created
# end original = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning']
# assert_difference 'file1.dmsf_file_revisions.count', 0 do Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$'
# put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", params: '9ABC', headers: credentials put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials
# assert_response :created assert_response :success
# end file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump')
# assert file3
# put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '1234', headers: credentials assert_difference 'file3.dmsf_file_revisions.count', 0 do
# assert_response :success put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '5678', headers: credentials
# file2 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: '~$file2.txt') assert_response :created
# assert file2 end
# assert_difference 'file2.dmsf_file_revisions.count', 0 do assert_difference 'file3.dmsf_file_revisions.count', 0 do
# put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '5678', headers: credentials put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '9ABC', headers: credentials
# assert_response :created assert_response :created
# end end
# assert_difference 'file2.dmsf_file_revisions.count', 0 do Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = original
# put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", params: '9ABC', headers: credentials end
# assert_response :created
# end def test_put_into_subproject
# put "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/test-1234.txt", params: '1234',
# original = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] headers: @admin.merge!({ content_type: :text })
# Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$' assert_response :created
# put "/dmsf/webdav/#{@project1.identifier}/file3.dump", params: '1234', headers: credentials assert DmsfFile.find_by(project_id: @project3.id, dmsf_folder: nil, name: 'test-1234.txt')
# assert_response :success end
# 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 end

View File

@ -27,55 +27,6 @@ class DmsfWebdavUnlockTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks :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 def test_unlock_file
log_user 'admin', 'admin' log_user 'admin', 'admin'
@ -123,7 +74,6 @@ class DmsfWebdavUnlockTest < RedmineDmsf::Test::IntegrationTest
def test_unlock_folder def test_unlock_folder
log_user 'jsmith', 'jsmith' log_user 'jsmith', 'jsmith'
l = @folder2.locks.first l = @folder2.locks.first
puts ">>> process unlock"
process :unlock, "/dmsf/webdav/#{@folder2.project.identifier}/#{@folder2.dmsf_folder.title}/#{@folder2.title}", process :unlock, "/dmsf/webdav/#{@folder2.project.identifier}/#{@folder2.dmsf_folder.title}/#{@folder2.title}",
params: nil, params: nil,
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_LOCK_TOKEN: l.uuid }) headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_LOCK_TOKEN: l.uuid })

View File

@ -23,14 +23,101 @@
module RedmineDmsf module RedmineDmsf
module Test module Test
class IntegrationTest < Redmine::IntegrationTest class IntegrationTest < Redmine::IntegrationTest
def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures') def setup
table_names.each do |x| @admin = credentials('admin', 'admin')
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml") @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 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 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 end
end end

View File

@ -29,26 +29,70 @@ module RedmineDmsf
# Ultimately it allows for better integration without blowing redmine fixtures up, # Ultimately it allows for better integration without blowing redmine fixtures up,
# and allowing us to suppliment redmine fixtures if we need to. # and allowing us to suppliment redmine fixtures if we need to.
def self.fixtures(*table_names) def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures') dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x| 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 end
super(table_names) super table_names
end end
def setup def setup
if ::Rails::VERSION::MAJOR >= 5 @admin = User.find_by(login: 'admin')
if ::Rails::VERSION::MINOR >= 1 @jsmith = User.find_by(login: 'jsmith')
@request = ActionController::TestRequest.create(self.class.controller_class) @dlopper = User.find_by(login: 'dlopper')
else @someone = User.find_by(login: 'someone')
@request = ActionController::TestRequest.create @project1 = Project.find 1
end Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
else @project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
@request = ActionController::TestRequest.new @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 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 end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
end
end end
end end
end end

View File

@ -25,6 +25,7 @@ class AttachablePatchTest < RedmineDmsf::Test::UnitTest
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :issues fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :issues
def setup def setup
super
@issue1 = Issue.find 1 @issue1 = Issue.find 1
@issue2 = Issue.find 2 @issue2 = Issue.find 2
end end

View File

@ -24,43 +24,18 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
include Redmine::I18n include Redmine::I18n
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members, fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles,
:member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps, :members, :member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps,
:dmsf_workflow_step_assignments, :dmsf_workflow_step_actions :dmsf_workflow_step_assignments, :dmsf_workflow_step_actions
def setup def setup
super
@revision1 = DmsfFileRevision.find 1 @revision1 = DmsfFileRevision.find 1
@revision2 = DmsfFileRevision.find 2 @revision2 = DmsfFileRevision.find 2
@revision3 = DmsfFileRevision.find 3 @revision3 = DmsfFileRevision.find 3
@revision5 = DmsfFileRevision.find 5 @revision5 = DmsfFileRevision.find 5
@revision8 = DmsfFileRevision.find 8 @revision8 = DmsfFileRevision.find 8
@wf1 = DmsfWorkflow.find 1 @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 end
def test_delete_restore def test_delete_restore

View File

@ -28,42 +28,10 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
:dmsf_workflow_step_assignments :dmsf_workflow_step_assignments
def setup def setup
@admin = User.find 1 super
@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
@issue1 = Issue.find 1 @issue1 = Issue.find 1
@wf1 = DmsfWorkflow.find 1 @wf1 = DmsfWorkflow.find 1
@wf2 = DmsfWorkflow.find 2 @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 end
def test_project_file_count_differs_from_project_visibility_count 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 def test_file_locked_is_not_locked_for_user_who_locked
User.current = @admin User.current = @admin
@file1.lock! assert !@file2.locked_for_user?, "#{@file2.name} is locked for #{User.current}"
assert !@file1.locked_for_user?,
"#{@file1.name} is locked for #{User.current}"
@file1.unlock!
end end
def test_file_locked_is_locked_for_user_who_didnt_lock def test_file_locked_is_locked_for_user_who_didnt_lock
User.current = @admin
@file1.lock!
User.current = @jsmith User.current = @jsmith
assert @file1.locked_for_user?, assert @file2.locked_for_user?, "#{@file1.name} is locked for #{User.current}"
"#{@file1.name} is locked for #{User.current}"
User.current = @admin
@file1.unlock!
end end
def test_file_with_no_locks_reported_unlocked 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 assert_equal 0, @file4.dmsf_file_revisions.visible.all.size
# Links should not be deleted # Links should not be deleted
assert_equal 2, @file4.referenced_links.visible.all.size assert_equal 2, @file4.referenced_links.visible.all.size
@file4.dmsf_folder.lock!
end end
def test_restore def test_restore
@ -138,7 +97,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert !@file4.deleted?, "File #{@file4} hasn't been restored" assert !@file4.deleted?, "File #{@file4} hasn't been restored"
assert_equal 1, @file4.dmsf_file_revisions.visible.all.size assert_equal 1, @file4.dmsf_file_revisions.visible.all.size
assert_equal 2, @file4.referenced_links.visible.all.size assert_equal 2, @file4.referenced_links.visible.all.size
@file4.dmsf_folder.lock!
end end
def test_destroy def test_destroy
@ -149,7 +107,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
@file4.delete true @file4.delete true
assert_equal 0, @file4.dmsf_file_revisions.all.size assert_equal 0, @file4.dmsf_file_revisions.all.size
assert_equal 0, @file4.referenced_links.all.size assert_equal 0, @file4.referenced_links.all.size
@file4.dmsf_folder.lock!
end end
def test_copy_to_filename def test_copy_to_filename

View File

@ -25,15 +25,10 @@ class DmsfFolderPermissionTest < RedmineDmsf::Test::UnitTest
fixtures :dmsf_folder_permissions, :dmsf_folders fixtures :dmsf_folder_permissions, :dmsf_folders
def setup def setup
@folder1 = DmsfFolder.find 1 super
@permission1 = DmsfFolderPermission.find 1 @permission1 = DmsfFolderPermission.find 1
end end
def test_truth
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolderPermission, @permission1
end
def test_scope def test_scope
assert_equal 2, DmsfFolderPermission.all.size assert_equal 2, DmsfFolderPermission.all.size
end end

View File

@ -26,56 +26,20 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles, fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles,
:dmsf_folder_permissions, :dmsf_locks :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 def test_visiblity
# The role has got permissions # The role has got permissions
User.current = @jsmith User.current = @jsmith
assert_equal 7, DmsfFolder.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: 1).all.size assert_equal 5, DmsfFolder.visible.where(project_id: @project1.id).all.size
# The user has got permissions # The user has got permissions
User.current = @dlopper User.current = @dlopper
# Hasn't got permissions for @folder7 # Hasn't got permissions for @folder7
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all @folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
assert_equal 4, DmsfFolder.visible.where(project_id: 1).all.size assert_equal 4, DmsfFolder.visible.where(project_id: @project1.id).all.size
# Anonymous user # Anonymous user
User.current = User.anonymous User.current = User.anonymous
@project1.add_default_member 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 end
def test_permissions def test_permissions
@ -210,10 +174,11 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
end end
def test_move_to def test_move_to
User.current = @jsmith
assert @folder1.move_to(@project2, nil) assert @folder1.move_to(@project2, nil)
assert_equal @project2, @folder1.project assert_equal @project2, @folder1.project
@folder1.dmsf_folders.each do |d| @folder1.dmsf_folders.each do |d|
assert_equal @project2, d.project assert_equal @project2.identifier, d.project.identifier
end end
@folder1.dmsf_files.each do |f| @folder1.dmsf_files.each do |f|
assert_equal @project2, f.project assert_equal @project2, f.project

View File

@ -23,28 +23,14 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfLinksTest < RedmineDmsf::Test::UnitTest class DmsfLinksTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions, fixtures :users, :email_addresses, :roles, :projects, :members, :member_roles, :dmsf_files,
:dmsf_folders, :dmsf_links :dmsf_file_revisions, :dmsf_folders, :dmsf_links
def setup def setup
@project1 = Project.find 1 super
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@file1 = DmsfFile.find 1
@file4 = DmsfFile.find 4
@folder_link = DmsfLink.find 1 @folder_link = DmsfLink.find 1
@file_link = DmsfLink.find 2 @file_link = DmsfLink.find 2
end 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 def test_create_folder_link
folder_link = DmsfLink.new folder_link = DmsfLink.new

View File

@ -23,25 +23,12 @@
require File.expand_path('../../test_helper.rb', __FILE__) require File.expand_path('../../test_helper.rb', __FILE__)
class DmsfLockTest < RedmineDmsf::Test::UnitTest class DmsfLockTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles,
:dmsf_file_revisions, :roles, :members, :member_roles, :enabled_modules, :members, :member_roles, :enabled_modules, :enumerations, :dmsf_locks
:enumerations, :dmsf_locks
def setup def setup
super
@lock = DmsfLock.find 1 @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 end
def test_lock_type_is_enumerable def test_lock_type_is_enumerable
@ -114,7 +101,6 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
end end
end end
@folder2.lock! @folder2.lock!
User.current = nil
end end
def test_expired def test_expired

View File

@ -24,29 +24,18 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfMailerTest < RedmineDmsf::Test::UnitTest class DmsfMailerTest < RedmineDmsf::Test::UnitTest
include Redmine::I18n include Redmine::I18n
fixtures :users, :projects, :dmsf_files, :dmsf_workflows, :dmsf_file_revisions, :members, :email_addresses, fixtures :users, :email_addresses, :projects, :dmsf_files, :dmsf_workflows, :dmsf_folders,
:roles, :member_roles :dmsf_file_revisions, :members, :roles, :member_roles
def setup def setup
@user2 = User.find 2 super
@file1 = DmsfFile.find 1
@file1.notify_activate @file1.notify_activate
@wf1 = DmsfWorkflow.find 1 @wf1 = DmsfWorkflow.find 1
@rev2 = DmsfFileRevision.find 2 @rev2 = DmsfFileRevision.find 2
@project1 = Project.find 1
# Mailer settings # Mailer settings
ActionMailer::Base.deliveries.clear ActionMailer::Base.deliveries.clear
Setting.plain_text_mail = '0' Setting.plain_text_mail = '0'
Setting.default_language = 'en' 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 end
def test_files_updated def test_files_updated
@ -66,22 +55,22 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest
def test_send_documents def test_send_documents
email_params = Hash.new email_params = Hash.new
body = 'Test' body = 'Test'
email_params[:to] = @user2.mail email_params[:to] = @jsmith.mail
email_params[:from] = @user2.mail email_params[:from] = @jsmith.mail
email_params[:body] = body email_params[:body] = body
email_params[:links_only] = '1' email_params[:links_only] = '1'
email_params[:public_urls] == '0' email_params[:public_urls] == '0'
email_params[:expired_at] = DateTime.current.to_s email_params[:expired_at] = DateTime.current.to_s
email_params[:folders] = nil email_params[:folders] = nil
email_params[:files] = "[\"#{@file1.id}\"]" 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 email = last_email
assert text_part(email).body.include? body assert text_part(email).body.include? body
assert html_part(email).body.include? body assert html_part(email).body.include? body
end end
def test_workflow_notification 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) :text_email_started, :text_email_to_proceed)
email = last_email email = last_email
assert text_part(email).body.include? l(:text_email_subject_started) 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]) users = DmsfMailer.get_notify_users(@project1, [@file1])
assert users.blank? assert users.blank?
end 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 end

View File

@ -23,24 +23,17 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfPublicUrlsTest < RedmineDmsf::Test::UnitTest 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 def setup
@file1 = DmsfFile.find 1 super
@dmsf_public_url1 = DmsfPublicUrl.find 1 @dmsf_public_url1 = DmsfPublicUrl.find 1
@user2 = User.find 2
end 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 def test_create
url = DmsfPublicUrl.new url = DmsfPublicUrl.new
url.dmsf_file = @file1 url.dmsf_file = @file1
url.user = @user2 url.user = @jsmith
url.expire_at = DateTime.current + 1.day url.expire_at = DateTime.current + 1.day
assert url.save, url.errors.full_messages.to_sentence assert url.save, url.errors.full_messages.to_sentence
assert_not_nil url.token assert_not_nil url.token

View File

@ -32,12 +32,6 @@ class DmsfWorkflowStepActionTest < RedmineDmsf::Test::UnitTest
@wfsac3 = DmsfWorkflowStepAction.find 3 @wfsac3 = DmsfWorkflowStepAction.find 3
end end
def test_truth
assert_kind_of DmsfWorkflowStepAction, @wfsac1
assert_kind_of DmsfWorkflowStepAction, @wfsac2
assert_kind_of DmsfWorkflowStepAction, @wfsac3
end
def test_create def test_create
wfsac = DmsfWorkflowStepAction.new wfsac = DmsfWorkflowStepAction.new
wfsac.dmsf_workflow_step_assignment_id = 1 wfsac.dmsf_workflow_step_assignment_id = 1

View File

@ -31,11 +31,6 @@ class WorkflowStepAssignmentTest < RedmineDmsf::Test::UnitTest
@wfsa2 = DmsfWorkflowStepAssignment.find 2 @wfsa2 = DmsfWorkflowStepAssignment.find 2
end end
def test_truth
assert_kind_of DmsfWorkflowStepAssignment, @wfsa1
assert_kind_of DmsfWorkflowStepAssignment, @wfsa2
end
def test_create def test_create
wfsa = DmsfWorkflowStepAssignment.new wfsa = DmsfWorkflowStepAssignment.new
wfsa.dmsf_workflow_step_id = 5 wfsa.dmsf_workflow_step_id = 5

View File

@ -35,16 +35,7 @@ class DmsfWorkflowStepTest < RedmineDmsf::Test::UnitTest
@revision2 = DmsfFileRevision.find 2 @revision2 = DmsfFileRevision.find 2
@wf2 = DmsfWorkflow.find 2 @wf2 = DmsfWorkflow.find 2
end 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 def test_create
wfs = DmsfWorkflowStep.new wfs = DmsfWorkflowStep.new
wfs.dmsf_workflow_id = 1 wfs.dmsf_workflow_id = 1

View File

@ -23,11 +23,12 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
fixtures :users, :email_addresses, :projects, :members, :dmsf_files, fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles, :dmsf_files,
:dmsf_file_revisions, :dmsf_workflows, :dmsf_workflow_steps, :dmsf_file_revisions, :dmsf_workflows, :dmsf_workflow_steps, :dmsf_workflow_step_assignments,
:dmsf_workflow_step_assignments, :dmsf_workflow_step_actions :dmsf_workflow_step_actions
def setup def setup
super
@wf1 = DmsfWorkflow.find 1 @wf1 = DmsfWorkflow.find 1
@wf2 = DmsfWorkflow.find 2 @wf2 = DmsfWorkflow.find 2
@wf3 = DmsfWorkflow.find 3 @wf3 = DmsfWorkflow.find 3
@ -40,25 +41,6 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
@wfsac1 = DmsfWorkflowStepAction.find 1 @wfsac1 = DmsfWorkflowStepAction.find 1
@revision1 = DmsfFileRevision.find 1 @revision1 = DmsfFileRevision.find 1
@revision2 = DmsfFileRevision.find 2 @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 end
def test_create def test_create
@ -69,11 +51,11 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
def test_update def test_update
@wf1.name = 'wf1a' @wf1.name = 'wf1a'
@wf1.project_id = 5 @wf1.project_id = @project5.id
assert @wf1.save, @wf1.errors.full_messages.to_sentence assert @wf1.save, @wf1.errors.full_messages.to_sentence
@wf1.reload @wf1.reload
assert_equal 'wf1a', @wf1.name assert_equal 'wf1a', @wf1.name
assert_equal 5, @wf1.project_id assert_equal @project5.id, @wf1.project_id
end end
def test_validate_name_length def test_validate_name_length
@ -111,7 +93,7 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
# Global workflow # Global workflow
assert_nil @wf2.project assert_nil @wf2.project
# Project workflow # Project workflow
@wf2.project_id = 5 @wf2.project_id = @project5.id
assert @wf2.project assert @wf2.project
end end
@ -205,10 +187,10 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
wsa = DmsfWorkflowStepAction.new wsa = DmsfWorkflowStepAction.new
wsa.dmsf_workflow_step_assignment_id = 9 wsa.dmsf_workflow_step_assignment_id = 9
wsa.action = DmsfWorkflowStepAction::ACTION_APPROVE wsa.action = DmsfWorkflowStepAction::ACTION_APPROVE
wsa.author_id = User.current.id wsa.author_id = @jsmith.id
assert wsa.save assert wsa.save
# The workflow is finished # The workflow is finished
assert @wf1.try_finish(@revision1, @wfsac1, User.current.id) assert @wf1.try_finish(@revision1, @wfsac1, @jsmith.id)
@revision1.reload @revision1.reload
assert_equal DmsfWorkflow::STATE_APPROVED, @revision1.workflow assert_equal DmsfWorkflow::STATE_APPROVED, @revision1.workflow
end end
@ -217,7 +199,7 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
# The forkflow is waiting for an approval # The forkflow is waiting for an approval
assert_equal DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, @revision1.workflow assert_equal DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, @revision1.workflow
# The workflow is not finished # The workflow is not finished
assert !@wf1.try_finish(@revision1, @wfsac1, User.current.id) assert !@wf1.try_finish(@revision1, @wfsac1, @jsmith.id)
@revision1.reload @revision1.reload
assert_equal DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, @revision1.workflow assert_equal DmsfWorkflow::STATE_WAITING_FOR_APPROVAL, @revision1.workflow
end end

View File

@ -22,20 +22,8 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class ProjectPatchTest < RedmineDmsf::Test::UnitTest class ProjectPatchTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_links, :dmsf_folders, :dmsf_workflows, :users fixtures :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_links, :dmsf_folders, :dmsf_workflows,
:users, :email_addresses, :dmsf_locks, :roles, :members, :member_roles
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
def test_project_has_dmsf_files def test_project_has_dmsf_files
assert @project1.respond_to?(:dmsf_files) assert @project1.respond_to?(:dmsf_files)
@ -79,8 +67,9 @@ class ProjectPatchTest < RedmineDmsf::Test::UnitTest
end end
def test_copy_dmsf def test_copy_dmsf
User.current = @jsmith
assert_equal 4, @project1.dmsf_files.visible.all.size 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 2, @project1.file_links.visible.all.size
assert_equal 1, @project1.folder_links.visible.all.size assert_equal 1, @project1.folder_links.visible.all.size
assert_equal 1, @project1.url_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 assert_equal 0, @project3.url_links.visible.all.size
@project3.copy_dmsf @project1 @project3.copy_dmsf @project1
assert_equal 4, @project3.dmsf_files.visible.all.size 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 2, @project3.file_links.visible.all.size
assert_equal 1, @project3.folder_links.visible.all.size assert_equal 1, @project3.folder_links.visible.all.size
assert_equal 1, @project3.url_links.visible.all.size assert_equal 1, @project3.url_links.visible.all.size

View File

@ -22,19 +22,12 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class UserPatchTest < RedmineDmsf::Test::UnitTest class UserPatchTest < RedmineDmsf::Test::UnitTest
fixtures :users, :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_folders, :dmsf_links fixtures :users, :email_addresses, :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
def test_remove_dmsf_references def test_remove_dmsf_references
id = @user2.id id = @jsmith.id
@user2.destroy @jsmith.destroy
assert_equal 0, DmsfFileRevisionAccess.where(user_id: id).all.size 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(user_id: id).all.size
assert_equal 0, DmsfFileRevision.where(dmsf_workflow_assigned_by_user_id: id).all.size assert_equal 0, DmsfFileRevision.where(dmsf_workflow_assigned_by_user_id: id).all.size

View File

@ -25,16 +25,78 @@ module RedmineDmsf
module Test module Test
class UnitTest < ActiveSupport::TestCase 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. # Allow us to override the fixtures method to implement fixtures for our plugin.
# Ultimately it allows for better integration without blowing redmine fixtures up, # Ultimately it allows for better integration without blowing redmine fixtures up,
# and allowing us to suppliment redmine fixtures if we need to. # and allowing us to suppliment redmine fixtures if we need to.
def self.fixtures(*table_names) def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures') dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x| 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 end
super(table_names) super table_names
end 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 end
end end