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
flash[:error] = @folder.errors.full_messages.to_sentence
end
redirect_to :back
redirect_back fallback_location: trash_dmsf_path(@project)
end
def edit_root

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -28,90 +28,65 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
:enabled_modules, :dmsf_file_revisions
def setup
@project = Project.find 1
@project.enable_module! :dmsf
@file = DmsfFile.find 1
@role = Role.find 1
User.current = nil
@request.session[:user_id] = 2
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project
assert_kind_of DmsfFile, @file
assert_kind_of Role, @role
super
@request.session[:user_id] = @jsmith.id
end
def test_show_file_ok
# Permissions OK
@role.add_permission! :view_dmsf_files
get :show, params: { id: @file.id }
get :show, params: { id: @file1.id }
assert_response :success
end
def test_show_file_forbidden
# Missing permissions
get :show, params: { id: @file.id }
@role_manager.remove_permission! :view_dmsf_files
get :show, params: { id: @file1.id }
assert_response :forbidden
end
def test_view_file_ok
# Permissions OK
@role.add_permission! :view_dmsf_files
get :view, params: { id: @file.id }
get :view, params: { id: @file1.id }
assert_response :success
end
def test_view_file_forbidden
# Missing permissions
get :view, params: { id: @file.id }
@role_manager.remove_permission! :view_dmsf_files
get :view, params: { id: @file1.id }
assert_response :forbidden
end
def delete_forbidden
# Missing permissions
delete @file, params: { commit: false }
@role_manager.remove_permission! :file_manipulation
delete @file1, params: { commit: false }
assert_response :forbidden
end
def delete_locked
# Permissions OK but the file is locked
@role.add_permission! :file_delete
delete @file, params: { commit: false }
delete @file2, params: { commit: false }
assert_response :redirect
assert_include l(:error_file_is_locked), flash[:error]
end
def delete_ok
# Permissions OK and not locked
flash[:error].clear
@file.unlock!
delete @file, params: { commit: false }
delete @file1, params: { commit: false }
assert_response :redirect
assert_equal 0, flash[:error].size
end
def test_obsolete_revision_ok
@role.add_permission! :file_manipulation
get :obsolete_revision, params: { id: @file.last_revision.id }
assert_redirected_to action: 'show', id: @file
get :obsolete_revision, params: { id: @file1.last_revision.id }
assert_redirected_to action: 'show', id: @file1
end
def test_obsolete_revision_missing_permissions
get :obsolete_revision, params: { id: @file.last_revision.id }
@role_manager.remove_permission! :file_manipulation
get :obsolete_revision, params: { id: @file1.last_revision.id }
assert :forbiden
end

View File

@ -29,49 +29,8 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
:enabled_modules, :dmsf_file_revisions, :dmsf_folders, :dmsf_locks
def setup
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project5 = Project.find 5
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@admin = User.find 1
@jsmith = User.find 2
@user_non_member = User.find 3
@role_manager = Role.find_by(name: 'Manager')
User.current = nil
super
@request.session[:user_id] = @jsmith.id
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
@role_manager.add_permission! :file_manipulation
@role_manager.add_permission! :view_dmsf_folders
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project5
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder2
assert_kind_of User, @admin
assert_kind_of User, @jsmith
assert_kind_of User, @user_non_member
assert_kind_of Role, @role_manager
end
def test_authorize_admin
@ -82,7 +41,7 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_authorize_non_member
@request.session[:user_id] = @user_non_member.id
@request.session[:user_id] = @someone.id
get :new, params: { id: @file1.id }
assert_response :forbidden
end
@ -142,20 +101,19 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_copy_to_dmsf_not_enabled
@project5.disable_module! :dmsf
post :copy, params: { id: @file1.id, target_project_id: @project5.id }
@project2.disable_module! :dmsf
post :copy, params: { id: @file1.id, target_project_id: @project2.id }
assert_response :forbidden
end
def test_copy_to_dmsf_enabled
@project5.enable_module! :dmsf
post :copy, params: { id: @file1.id, target_project_id: @project5.id }
post :copy, params: { id: @file1.id, target_project_id: @project2.id }
assert_response :redirect
assert_nil flash[:error]
assert flash[:error].empty?
end
def test_copy_to_as_non_member
@request.session[:user_id] = @user_non_member.id
@request.session[:user_id] = @someone.id
post :copy, params: { id: @file1.id, target_project_id: @project2.id }
assert_response :forbidden
end
@ -173,7 +131,6 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_move_locked_file
@request.session[:user_id] = @jsmith.id
post :move, params: { id: @file2.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
assert_response :forbidden
end
@ -185,21 +142,20 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_move_to_dmsf_not_enabled
@project5.disable_module! :dmsf
post :move, params: { id: @file1.id, target_project_id: @project5.id }
@project2.disable_module! :dmsf
post :move, params: { id: @file9.id, target_project_id: @project2.id }
assert_response :forbidden
end
def test_move_to_dmsf_enabled
@project5.enable_module! :dmsf
post :move, params: { id: @file1.id, target_project_id: @project5.id }
post :move, params: { id: @file9.id, target_project_id: @project2.id }
assert_response :redirect
assert_nil flash[:error]
end
def test_move_to_as_non_member
@request.session[:user_id] = @user_non_member.id
post :move, params: { id: @file1.id, target_project_id: @project2.id }
@request.session[:user_id] = @someone.id
post :move, params: { id: @file9.id, target_project_id: @project2.id }
assert_response :forbidden
end

View File

@ -26,24 +26,8 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase
:email_addresses
def setup
@project1 = Project.find 1
@project1.enable_module! :dmsf
@folder7 = DmsfFolder.find 7
@manager = User.find 2
@developer = User.find 3
@manager_role = Role.find 1
User.current = nil
@request.session[:user_id] = @manager.id
@manager_role.add_permission! :view_dmsf_folders
@manager_role.add_permission! :folder_manipulation
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of DmsfFolder, @folder7
assert_kind_of User, @manager
assert_kind_of User, @developer
assert_kind_of Role, @manager_role
super
@request.session[:user_id] = @jsmith.id
end
def test_new
@ -57,11 +41,11 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase
get :autocomplete_for_user, params: { project_id: @project1, dmsf_folder_id: @folder7, q: 'smi', format: 'js' },
xhr: true
assert_response :success
assert_include 'John Smith', response.body
assert_include @jsmith.name, response.body
end
def test_append
get :new, params: { project_id: @project1, dmsf_folder_id: @folder7, user_ids: [@manager.id], format: 'js' },
get :new, params: { project_id: @project1, dmsf_folder_id: @folder7, user_ids: [@jsmith.id], format: 'js' },
xhr: true
assert_response :success
assert_template 'new'

View File

@ -28,48 +28,8 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
:email_addresses, :dmsf_locks
def setup
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project2.enable_module! :dmsf
@project5 = Project.find 5
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@folder6 = DmsfFolder.find 6
@admin = User.find 1
@jsmith = User.find 2
@user_non_member = User.find 3
@role_manager = Role.find_by(name: 'Manager')
User.current = nil
super
@request.session[:user_id] = @jsmith.id
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
@role_manager.add_permission! :folder_manipulation
@role_manager.add_permission! :view_dmsf_folders
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project5
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder2
assert_kind_of DmsfFolder, @folder6
assert_kind_of User, @admin
assert_kind_of User, @jsmith
assert_kind_of User, @user_non_member
assert_kind_of Role, @role_manager
end
def test_authorize_admin
@ -80,7 +40,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_authorize_non_member
@request.session[:user_id] = @user_non_member.id
@request.session[:user_id] = @someone.id
get :new, params: { id: @folder1.id }
assert_response :not_found
end
@ -129,7 +89,6 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
def test_copy_to_another_project
@request.session[:user_id] = @admin.id
@project2.enable_module! :dmsf
assert_equal @project1.id, @folder1.project_id
post :copy, params: { id: @folder1.id, target_project_id: @project2.id }
assert_response :redirect
@ -149,19 +108,19 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_copy_to_dmsf_not_enabled
post :copy, params: { id: @folder6.id, target_project_id: @project5.id }
@project2.disable_module! :dmsf
post :copy, params: { id: @folder6.id, target_project_id: @project2.id }
assert_response :forbidden
end
def test_copy_to_dmsf_enabled
@project5.enable_module! :dmsf
post :copy, params: { id: @folder6.id, target_project_id: @project5.id }
post :copy, params: { id: @folder6.id, target_project_id: @project2.id }
assert_response :redirect
assert_nil flash[:error]
end
def test_copy_to_as_non_member
@request.session[:user_id] = @user_non_member.id
@request.session[:user_id] = @someone.id
post :copy, params: { id: @folder6.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
assert_response :not_found
end
@ -185,8 +144,6 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_move_locked_folder
User.current.id = @admin.id
assert @folder2.locked_for_user?
@request.session[:user_id] = @admin.id
post :move, params: { id: @folder2.id, target_project_id: @folder6.project.id, target_folder_id: @folder6.id }
assert_response :forbidden
@ -199,19 +156,19 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_move_to_dmsf_not_enabled
post :move, params: { id: @folder6.id, target_project_id: @project5.id }
@project2.disable_module! :dmsf
post :move, params: { id: @folder6.id, target_project_id: @project2.id }
assert_response :forbidden
end
def test_move_to_dmsf_enabled
@project5.enable_module! :dmsf
post :move, params: { id: @folder6.id, target_project_id: @project5.id }
post :move, params: { id: @folder6.id, target_project_id: @project2.id }
assert_response :redirect
assert_nil flash[:error]
end
def test_move_to_as_non_member
@request.session[:user_id] = @user_non_member.id
@request.session[:user_id] = @someone.id
post :move, params: { id: @folder6.id, target_project_id: @folder1.project.id, target_folder_id: @folder1.id }
assert_response :not_found
end

View File

@ -28,79 +28,39 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
:dmsf_file_revisions, :dmsf_folders, :dmsf_links, :roles, :member_roles
def setup
@user_admin = User.find 1
@user_member = User.find 2
@user_non_member = User.find 3
@role_manager = Role.find_by(name: 'Manager')
assert_not_nil @role_manager
@role_manager.add_permission! :file_manipulation
@role_developer = Role.find_by(name: 'Developer')
assert_not_nil @role_developer
@role_developer.add_permission! :file_manipulation
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project2.enable_module! :dmsf
@folder1 = DmsfFolder.find 1 # project1/folder1
@folder2 = DmsfFolder.find 2 # project1/folder1/folder2
@folder3 = DmsfFolder.find 3 # project2/folder3
@file1 = DmsfFile.find 1 # project1/file1
@file2 = DmsfFile.find 2 # project2/file2
@file4 = DmsfFile.find 4 # project1/folder2/file4
@file6 = DmsfFile.find 6 # project2/folder3/file6
super
@file_link = DmsfLink.find 1
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1.id, folder_id: @folder1.id)
@request.session[:user_id] = @user_member.id
User.current = nil
end
def test_truth
assert_kind_of User, @user_admin
assert_kind_of User, @user_member
assert_kind_of User, @user_non_member
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Role, @role_manager
assert_kind_of Role, @role_developer
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder2
assert_kind_of DmsfFolder, @folder3
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file4
assert_kind_of DmsfFile, @file6
assert_kind_of DmsfLink, @file_link
@request.session[:user_id] = @jsmith.id
end
def test_authorize_admin
@request.session[:user_id] = @user_admin.id
@request.session[:user_id] = @admin.id
get :new, params: { project_id: @project1.id }
assert_response :success
assert_template 'new'
end
def test_authorize_non_member
@request.session[:user_id] = @user_non_member.id
@request.session[:user_id] = @someone.id
get :new, params: { project_id: @project2.id }
assert_response :forbidden
end
def test_authorize_member_ok
@request.session[:user_id] = @user_member.id
@request.session[:user_id] = @jsmith.id
get :new, params: { project_id: @project1.id }
assert_response :success
end
def test_authorize_member_no_module
# Without the module
@project1.disable_module!(:dmsf)
@project1.disable_module! :dmsf
get :new, params: { project_id: @project1.id }
assert_response :forbidden
end
def test_authorize_forbidden
# Without permissions
@project1.enable_module!(:dmsf)
@role_manager.remove_permission! :file_manipulation
get :new, params: { project_id: @project1.id }
assert_response :forbidden
@ -113,7 +73,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
end
def test_new_fast_links_enabled
member = Member.where(user_id: @user_member.id, project_id: @project1.id).first
member = Member.find_by(user_id: @jsmith.id, project_id: @project1.id)
assert member
member.update_attribute :dmsf_fast_links, true
get :new, params: { project_id: @project1.id, type: 'link_to'}
@ -344,7 +304,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
assert_difference 'DmsfLink.visible.count', -1 do
delete :destroy, params: { project_id: @project1.id, id: @file_link.id }
end
assert_redirected_to dmsf_folder_path(id: @project1.id, folder_id: @folder1.id)
assert_redirected_to dmsf_folder_path(id: @file_link&.project, folder_id: @file_link&.dmsf_folder)
end
def test_restore_forbidden
@ -358,7 +318,6 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_restore_ok
# Permissions OK
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1.id)
@role_manager.add_permission! :file_manipulation
get :restore, params: { project_id: @project1.id, id: @file_link.id }
assert_response :redirect
end

View File

@ -25,16 +25,6 @@ class DmsfPublicUrlsControllerTest < RedmineDmsf::Test::TestCase
fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls
def setup
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_show_valid_url
get :show, params: { token: 'd8d33e21914a433b280fdc94450ee212' }
assert_response :success

View File

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

View File

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

View File

@ -28,35 +28,9 @@ class IssuesControllerTest < RedmineDmsf::Test::TestCase
:enabled_modules, :enumerations, :issue_statuses
def setup
@user_manager = User.find 2
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project1.enable_module! :issue_tracking
@project2 = Project.find 2
@project2.enable_module! :dmsf
@project2.enable_module! :issue_tracking
super
@issue1 = Issue.find 1
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
@request.session[:user_id] = @user_manager.id
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Issue, @issue1
@request.session[:user_id] = @jsmith.id
end
def test_put_update_with_project_change

View File

@ -29,17 +29,10 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
:dmsf_files, :dmsf_locks
def setup
@admin = User.find 1
@jsmith = User.find 2
User.current = nil
super
@request.session[:user_id] = @jsmith.id
end
def test_truth
assert_kind_of User, @admin
assert_kind_of User, @jsmith
end
def test_page_with_open_approvals_one_approval
DmsfFileRevision.where(id: 5).delete_all
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }

View File

@ -29,11 +29,11 @@ module RedmineDmsf
# Ultimately it allows for better integration without blowing redmine fixtures up,
# and allowing us to suppliment redmine fixtures if we need to.
def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures')
dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x|
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml")
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml"))
end
super(table_names)
super table_names
end
end
end

View File

@ -24,42 +24,16 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n
fixtures :projects, :users, :dmsf_files, :dmsf_file_revisions, :members, :roles, :member_roles
fixtures :projects, :users, :email_addresses, :dmsf_files, :dmsf_file_revisions, :members, :roles,
:member_roles, :dmsf_locks
def setup
@admin = User.find 1
@jsmith = User.find 2
@file1 = DmsfFile.find 1
super
Setting.rest_api_enabled = '1'
@role = Role.find_by(name: 'Manager')
@project1 = Project.find 1
@project1.enable_module! :dmsf
@token = Token.create!(user: @jsmith, action: 'api')
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of User, @admin
assert_kind_of User, @jsmith
assert_kind_of DmsfFile, @file1
assert_kind_of Role, @role
assert_kind_of Project, @project1
@token = Token.create!(user: @jsmith_user, action: 'api')
end
def test_get_document
@role.add_permission! :view_dmsf_files
#curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} http://localhost:3000/dmsf/files/17216.xml
get "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}"
assert_response :success
@ -131,7 +105,6 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_upload_document
@role.add_permission! :file_manipulation
#curl --data-binary "@cat.gif" -H "Content-Type: application/octet-stream" -X POST -u ${1}:${2} http://localhost:3000/projects/12/dmsf/upload.xml?filename=cat.gif
post "/projects/#{@project1.id}/dmsf/upload.xml?filename=test.txt&key=#{@token.value}", params: 'File content', headers: { "CONTENT_TYPE" => 'application/octet-stream' }
assert_response :created
@ -174,24 +147,23 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_delete_file
@role.add_permission! :file_delete
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :success
@file1.reload
assert_equal DmsfFile::STATUS_DELETED, @file1.deleted
assert_equal @jsmith, @file1.deleted_by_user
assert_equal @jsmith_user, @file1.deleted_by_user
end
def test_delete_file_no_permissions
token = Token.create!(user: @jsmith, action: 'api')
@role.remove_permission! :file_delete
token = Token.create!(user: @jsmith_user, action: 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml
delete "/dmsf/files/#{@file1.id}.xml?key=#{token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :forbidden
end
def test_delete_folder_commit_yes
@role.add_permission! :file_delete
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml&commit=yes
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}&commit=yes", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :success
@ -199,9 +171,9 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_delete_file_locked
@role.add_permission! :file_delete
User.current = @admin
User.current = @admin_user
@file1.lock!
User.current = nil
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response 422
@ -209,7 +181,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
# <errors type="array">
# <error>Locked by Admin</error>
# </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
assert_equal DmsfFile::STATUS_ACTIVE, @file1.deleted
end

View File

@ -24,49 +24,18 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :projects, :users, :members, :roles,
:member_roles
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :projects, :users, :email_addresses, :members,
:roles, :member_roles, :dmsf_locks
def setup
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
@admin = User.find 1
@jsmith = User.find 2
@file1 = DmsfFile.find 1
@folder1 = DmsfFolder.find 1
@folder7 = DmsfFolder.find 7
super
Setting.rest_api_enabled = '1'
@role = Role.find_by(name: 'Manager')
@project1 = Project.find 1
@project1.enable_module! :dmsf
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of User, @admin
assert_kind_of User, @jsmith
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder7
assert_kind_of DmsfFile, @file1
assert_kind_of Role, @role
assert_kind_of Project, @project1
@token = Token.create!(user: @jsmith_user, action: 'api')
end
def test_list_folder
@role.add_permission! :view_dmsf_folders
token = Token.create!(user: @jsmith, action: 'api')
#curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} http://localhost:3000/dmsf/files/17216.xml
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}"
assert_response :success
assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?>
@ -86,10 +55,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_list_folder_limit_and_offset
@role.add_permission! :view_dmsf_folders
token = Token.create!(user: @jsmith, action: 'api')
#curl -v -H "Content-Type: application/xml" -X GET -u ${1}:${2} "http://localhost:3000/dmsf/files/17216.xml?limit=1&offset=1"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&limit=1&offset=2"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&limit=1&offset=2"
assert_response :success
assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?>
@ -109,8 +76,6 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_create_folder
@role.add_permission! :folder_manipulation
token = Token.create!(user: @jsmith, action: 'api')
#curl -v -H "Content-Type: application/xml" -X POST --data "@folder.xml" -u ${1}:${2} http://localhost:3000/projects/12/dmsf/create.xml
payload = %{<?xml version="1.0" encoding="utf-8" ?>
<dmsf_folder>
@ -118,7 +83,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
<description>A folder created via REST API</description>
<dmsf_folder_id/>
</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
# <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_folder>
@ -129,10 +94,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_find_folder_by_title
@role.add_permission! :view_dmsf_folders
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000/projects/1/dmsf.json?folder_title=Updated%20title
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_title=#{@folder1.title}"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_title=#{@folder1.title}"
assert_response :success
assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?>
@ -157,18 +120,14 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_find_folder_by_title_not_found
@role.add_permission! :view_dmsf_folders
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000/projects/1/dmsf.json?folder_title=Updated%20title
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_title=xxx"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_title=xxx"
assert_response :not_found
end
def test_find_folder_by_id
@role.add_permission! :view_dmsf_folders
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KE" http://localhost:3000/projects/1/dmsf.json?folder_id=3
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_id=#{@folder1.id}"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_id=#{@folder1.id}"
assert_response :success
assert_equal 'application/xml', @response.content_type
# <?xml version="1.0" encoding="UTF-8"?>
@ -193,23 +152,19 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_find_folder_by_id_not_found
@role.add_permission! :view_dmsf_folders
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/json" -X GET -H "X-Redmine-API-Key: USERS_API_KE" http://localhost:3000/projects/1/dmsf.json?folder_id=3
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{token.value}&folder_id=none"
get "/projects/#{@project1.identifier}/dmsf.xml?key=#{@token.value}&folder_id=none"
assert_response :not_found
end
def test_update_folder
@role.add_permission! :folder_manipulation
token = Token.create!(user: @jsmith, action: 'api')
#curl -v -H "Content-Type: application/json" -X POST --data "@update-folder-payload.json" -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000//projects/#{project_id}/dmsf/save.json
payload = %{<?xml version="1.0" encoding="utf-8" ?>
<dmsf_folder>
<title>rest_api</title>
<description>A folder updated via REST API</description>
</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
# <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_folder>
@ -221,43 +176,34 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
end
def test_delete_folder
@role.add_permission! :folder_manipulation
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}",
delete "/projects/#{@folder6.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder6.id}",
headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response :success
@folder1.reload
assert_equal DmsfFolder::STATUS_DELETED, @folder1.deleted
assert_equal @jsmith, @folder1.deleted_by_user
@folder6.reload
assert_equal DmsfFolder::STATUS_DELETED, @folder6.deleted
assert_equal @jsmith_user, @folder6.deleted_by_user
end
def test_delete_folder_no_permission
token = Token.create!(user: @jsmith, action: 'api')
@role.remove_permission! :folder_manipulation
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}",
delete "/projects/#{@folder6.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder6.id}",
headers: {'CONTENT_TYPE' => 'application/xml'}
assert_response :forbidden
end
def test_delete_folder_commit_yes
@role.add_permission! :folder_manipulation
assert !@folder1.locked?
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}&commit=yes",
delete "/projects/#{@folder6.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder6.id}&commit=yes",
headers: { CONTENT_TYPE: 'application/xml' }
assert_response :success
assert_nil DmsfFolder.find_by(id: @folder1.id)
assert_nil DmsfFolder.find_by(id: @folder6.id)
end
def test_delete_folder_locked
@role.add_permission! :folder_manipulation
User.current = @admin
@folder1.lock!
token = Token.create!(user: @jsmith, action: 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.identifier}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}",
delete "/projects/#{@folder2.project.identifier}/dmsf/delete.xml?key=#{@token.value}&folder_id=#{@folder2.id}",
headers: { 'CONTENT_TYPE' => 'application/xml' }
assert_response 422
# <?xml version="1.0" encoding="UTF-8"?>
@ -265,8 +211,8 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
# <error>Folder is locked</error>
# </errors>
assert_select 'errors > error', text: l(:error_folder_is_locked)
@folder1.reload
assert_equal DmsfFolder::STATUS_ACTIVE, @folder1.deleted
@folder2.reload
assert_equal DmsfFolder::STATUS_ACTIVE, @folder2.deleted
end
end

View File

@ -24,29 +24,16 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfLinkApiTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n
fixtures :projects, :users, :dmsf_files, :dmsf_file_revisions, :members, :roles, :member_roles
fixtures :projects, :users, :email_addresses, :dmsf_files, :dmsf_file_revisions, :members, :roles,
:member_roles
def setup
@admin = User.find 1
@jsmith = User.find 2
@file1 = DmsfFile.find 1
super
Setting.rest_api_enabled = '1'
@role = Role.find 1
@project1 = Project.find 1
@project1.enable_module! :dmsf
end
def test_truth
assert_kind_of User, @admin
assert_kind_of User, @jsmith
assert_kind_of DmsfFile, @file1
assert_kind_of Role, @role
assert_kind_of Project, @project1
end
def test_create_link
@role.add_permission! :file_manipulation
token = Token.create!(user: @jsmith, action: 'api')
token = Token.create!(user: @jsmith_user, action: 'api')
name = 'REST API link test'
# curl -v -H "Content-Type: application/xml" -X POST --data "@link.xml" -H "X-Redmine-API-Key: USERS_API_KEY" http://localhost:3000/dmsf_links.xml
payload = %{<?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
def setup
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
end
fixtures :users, :email_addresses, :projects, :members, :roles, :member_roles, :dmsf_folders, :dmsf_files
def test_options_for_root_path
process :options, '/'

View File

@ -25,61 +25,10 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
include Redmine::I18n
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions,
:dmsf_locks
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project2 = Project.find 2
@project3 = Project.find 3 # Sub-project of project 1
@role = Role.find_by(name: 'Manager')
@folder1 = DmsfFolder.find 1
@folder6 = DmsfFolder.find 6
@folder10 = DmsfFolder.find 10
@file1 = DmsfFile.find 1
@file12 = DmsfFile.find 12
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
@project1.enable_module! :dmsf # Enable DMSF module
@project3.enable_module! :dmsf
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder6
assert_kind_of DmsfFolder, @folder10
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file12
assert_kind_of Role, @role
end
def test_not_authenticated
delete '/dmsf/webdav'
assert_response :unauthorized
@ -135,6 +84,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_unathorized_user
@role.remove_permission! :view_dmsf_folders
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :not_found # Without folder_view permission, he will not even be aware of its existence.
@file1.reload
@ -142,15 +92,15 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_unathorized_user_forbidden
@role.add_permission! :view_dmsf_folders
@role.remove_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :forbidden # Now jsmith's role has view_folder rights, however they do not hold file manipulation rights.
assert_response :forbidden
@file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
end
def test_view_folder_not_allowed
@role.add_permission! :file_manipulation
@role.remove_permission! :view_dmsf_folders
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, headers: @jsmith
assert_response :not_found # Without folder_view permission, he will not even be aware of its existence.
@folder1.reload
@ -158,7 +108,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_folder_manipulation_not_allowed
@role.add_permission! :view_dmsf_folders
@role.remove_permission! :folder_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil, headers: @jsmith
assert_response :forbidden # Without manipulation permission, action is forbidden.
@folder1.reload
@ -169,12 +119,10 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @admin
assert_response :success
@folder6.reload
assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist"
assert @folder6.deleted?, "Folder #{@folder6.title} is not expected to exist"
end
def test_folder_delete_by_user
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :success
@folder6.reload
@ -183,8 +131,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_folder_delete_by_user_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
@ -202,8 +148,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_file_delete_by_user
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :success
@file1.reload
@ -211,9 +155,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_file_delete_by_user_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
@ -224,15 +166,11 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_folder_delete_fragments
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/#frament=HTTP/1.1", params: nil, headers: @jsmith
assert_response :bad_request
end
def test_locked_folder
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@folder6.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", params: nil, headers: @jsmith
assert_response :locked
@ -241,8 +179,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_locked_file
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
@file1.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :locked
@ -251,8 +187,6 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_non_versioned_file
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil, headers: @jsmith
assert_response :success
# The file should be destroyed

View File

@ -27,57 +27,6 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project2 = Project.find 2
@project3 = Project.find 3
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@folder1 = DmsfFolder.find 1
@folder3 = DmsfFolder.find 3
@folder10 = DmsfFolder.find 10
@file12 = DmsfFile.find 12
@role = Role.find_by(name: 'Manager')
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file12
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder3
assert_kind_of DmsfFolder, @folder10
assert_kind_of Role, @role
end
def test_should_deny_anonymous
get '/dmsf/webdav'
assert_response :unauthorized
@ -129,7 +78,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end
def test_should_return_status_200_when_dmsf_not_enabled_for_project
assert !@project2.module_enabled?('dmsf')
@project2.disable_module! :dmsf
get "/dmsf/webdav/#{@project2.identifier}", params: nil, headers: @jsmith
assert_response :success
# Folders and files are not listed
@ -138,8 +87,6 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end
def test_should_not_list_files_without_permissions
assert @project1.module_enabled?('dmsf')
@role.add_permission! :view_dmsf_folders
@role.remove_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :success
@ -149,9 +96,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end
def test_should_not_list_folders_without_permissions
assert @project1.module_enabled?('dmsf')
@role.remove_permission! :view_dmsf_folders
@role.add_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :success
# Folders are not listed
@ -175,7 +120,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
assert_response :success
folder = DmsfFolder.find_by(id: 1)
assert_not_nil folder
assert response.body.match(folder.title),
assert response.body.match(@folder1.title),
"Expected to find #{folder.title} in return data"
file = DmsfFile.find_by(id: 1)
assert_not_nil file
@ -189,43 +134,33 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end
def test_user_assigned_to_archived_project
@project1.enable_module! :dmsf
@project1.archive
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :not_found
end
def test_user_assigned_to_project_folder_ok
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.add_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith
assert_response :success
end
def test_user_assigned_to_project_file_forbidden
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.remove_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith
assert_response :forbidden
end
def test_user_assigned_to_project_file_ok
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.add_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @jsmith
assert_response :success
end
def test_get_file_in_subproject
@project3.enable_module! :dmsf
get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin
assert_response :success
end
def test_get_folder_in_subproject
@project3.enable_module! :dmsf
get "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin
assert_response :success
end

View File

@ -25,51 +25,7 @@ require File.expand_path('../../../test_helper', __FILE__)
class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project1.enable_module! 'dmsf'
@project2 = Project.find 2
@project3 = Project.find 3
@folder10 = DmsfFolder.find 10
@file12 = DmsfFile.find 12
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
@project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFolder, @folder10
assert_kind_of DmsfFile, @file12
end
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
def test_head_requires_authentication
head "/dmsf/webdav/#{@project1.identifier}"
@ -81,7 +37,7 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin
assert_response :success
check_headers_exist
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
head "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @admin
assert_response :not_found
head "/dmsf/webdav/#{@project1_uri}", params: nil, headers: @admin
@ -96,8 +52,8 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
def test_head_responds_to_file
head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin
assert_response :success
check_headers_exist # Note it'll allow 1 out of the 3 expected to fail
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
check_headers_exist
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
head "/dmsf/webdav/#{@project1.identifier}/test.txt", params: nil, headers: @admin
assert_response :not_found
head "/dmsf/webdav/#{@project1_uri}/test.txt", params: nil, headers: @admin
@ -141,48 +97,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
end
def test_head_file_in_subproject
@project3.enable_module! :dmsf # Flag module enabled
head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin
assert_response :success
end
head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@file12.name}", params: nil, headers: @admin
assert_response :success
end
def test_head_folder_in_subproject
@project3.enable_module! :dmsf # Flag module enabled
head "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}/#{@folder10.title}", params: nil, headers: @admin
assert_response :success
end
private
def check_headers_exist
assert !(response.headers.nil? || response.headers.empty?),
'Head returned without headers' # Headers exist?
values = {}
values[:etag] = { optional: true, content: response.headers['Etag'] }
values[:content_type] = response.headers['Content-Type']
values[:last_modified] = { optional: true, content: response.headers['Last-Modified'] }
single_optional = false
values.each do |key,val|
if val.is_a?(Hash)
if val[:optional].nil? || !val[:optional]
assert(!(val[:content].nil? || val[:content].empty?), "Expected header #{key} was empty." ) if single_optional
else
single_optional = true
end
else
assert !(val.nil? || val.empty?), "Expected header #{key} was empty."
end
end
end
def check_headers_dont_exist
assert !(response.headers.nil? || response.headers.empty?), 'Head returned without headers' # Headers exist?
values = {}
values[:etag] = response.headers['Etag']
values[:last_modified] = response.headers['Last-Modified']
values.each do |key,val|
assert (val.nil? || val.empty?), "Expected header #{key} should be empty."
end
end
end

View File

@ -29,144 +29,101 @@ class DmsfWebdavLockTest < RedmineDmsf::Test::IntegrationTest
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@admin_user = User.find_by(login: 'admin')
@project1 = Project.find 1
@project1.enable_module! 'dmsf'
@project2 = Project.find 2
@project2.enable_module! 'dmsf'
@project3 = Project.find 3
@project3.enable_module! 'dmsf'
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@file9 = DmsfFile.find 9
@file12 = DmsfFile.find 12
@folder10 = DmsfFolder.find 10
# Fix permissions for jsmith's role
@role = Role.find_by(name: 'Manager')
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_files
@role.add_permission! :file_manipulation
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
super
@xml = %{<?xml version="1.0" encoding="utf-8" ?>
<d:lockinfo xmlns:d="DAV:">
<d:lockscope><d:exclusive/></d:lockscope>
<d:locktype><d:write/></d:locktype>
<d:owner>jsmith</d:owner>
</d:lockinfo>}
User.current = nil
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
def test_lock_file_already_locked_by_other
log_user 'admin', 'admin'
process :lock, "/dmsf/webdav/#{@file2.project.identifier}/#{@file2.name}", params: @xml,
headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :multi_status
assert_match '<d:status>HTTP/1.1 409 Conflict</d:status>', response.body
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file9
assert_kind_of DmsfFile, @file12
assert_kind_of DmsfFolder, @folder10
assert_kind_of Role, @role
assert_kind_of User, @admin_user
def test_lock_file
log_user 'jsmith', 'jsmith'
create_time = Time.utc(2000, 1, 2, 3, 4, 5)
refresh_time = Time.utc(2000, 1, 2, 6, 7, 8)
lock_token = nil
# Time travel, will make the usec part of the time 0
travel_to create_time do
# Lock file
process :lock, "/dmsf/webdav/#{@file9.project.identifier}/#{@file9.name}", params: @xml,
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :success
# Verify the response
# <?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_already_locked_by_other
# log_user 'admin', 'admin'
# process :lock, "/dmsf/webdav/#{@file2.project.identifier}/#{@file2.name}", params: @xml,
# headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
# assert_response :multi_status
# assert_match '<d:status>HTTP/1.1 409 Conflict</d:status>', response.body
# end
#
# def test_lock_file
# log_user 'jsmith', 'jsmith'
# create_time = Time.utc(2000, 1, 2, 3, 4, 5)
# refresh_time = Time.utc(2000, 1, 2, 6, 7, 8)
# lock_token = nil
#
# # Time travel, will make the usec part of the time 0
# travel_to create_time do
# # Lock file
# process :lock, "/dmsf/webdav/#{@file9.project.identifier}/#{@file9.name}", params: @xml,
# headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
# assert_response :success
# # Verify the response
# # <?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_file_in_subproject
log_user 'admin', 'admin'
process :lock, "/dmsf/webdav/#{@file12.project.parent.identifier}/#{@file12.project.identifier}/#{@file12.name}",
params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :success
end
def test_lock_folder_in_subproject
log_user 'admin', 'admin'
process :lock,
"/dmsf/webdav/#{@folder10.project.parent.identifier}/#{@folder10.project.identifier}/#{@folder10.title}",
params: @xml, headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :success
end
def test_lock_subproject
log_user 'admin', 'admin'
puts ">>> process lock"
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@project3.identifier}", params: @xml,
headers: @admin.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :multi_status

View File

@ -27,51 +27,6 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project3 = Project.find 3
@project3.enable_module! :dmsf
@role = Role.find_by(name: 'Manager')
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_folders
@folder6 = DmsfFolder.find 6
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of Role, @role
assert_kind_of DmsfFolder, @folder6
end
def test_mkcol_requires_authentication
process :mkcol, '/dmsf/webdav/test1'
assert_response :unauthorized

View File

@ -28,64 +28,6 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
def setup
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@jsmith_user = User.find_by(login: 'jsmith')
@admin_user = User.find_by(login: 'admin')
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project2.enable_module! :dmsf
@project3 = Project.find 3
@project3.enable_module! :dmsf
@file1 = DmsfFile.find 1
@file10 = DmsfFile.find 10
@file12 = DmsfFile.find 12
@folder1 = DmsfFolder.find 1
@folder10 = DmsfFolder.find 10
@role = Role.find 1
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@role.add_permission! :file_manipulation
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of Role, @role
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file10
assert_kind_of DmsfFile, @file12
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder10
assert_kind_of User, @jsmith_user
assert_kind_of User, @admin_user
end
def test_move_denied_for_anonymous
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do

View File

@ -27,33 +27,6 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project2 = Project.find 2
@project3 = Project.find 3
@project3.enable_module! :dmsf
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
end
def test_options_requires_no_authentication_for_root_level
process :options, '/dmsf/webdav'
assert_response :success

View File

@ -26,17 +26,7 @@ class DmsfWebdavPostTest < RedmineDmsf::Test::IntegrationTest
fixtures :users, :email_addresses
def setup
@admin = credentials 'admin'
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
end
# Test that any post request is authenticated
# Test that any post request is authenticated
def test_post_request_authenticated
post '/dmsf/webdav/'
assert_response :unauthorized

View File

@ -28,67 +28,20 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project2.enable_module! :dmsf
@project3 = Project.find 3
@project3.enable_module! :dmsf
@folder1 = DmsfFolder.find 1
@folder6 = DmsfFolder.find 6
@folder10 = DmsfFolder.find 10
@file1 = DmsfFile.find 1
@file9 = DmsfFile.find 9
@file10 = DmsfFile.find 10
@file12 = DmsfFile.find 12
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
# Temporarily enable project names to generate names for project1
@dmsf_webdav_use_project_names = Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names']
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
@project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
@project1_uri = Addressable::URI.escape(@project1_name)
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = false
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = @dmsf_webdav_use_project_names
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder6
assert_kind_of DmsfFolder, @folder10
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file9
assert_kind_of DmsfFile, @file10
assert_kind_of DmsfFile, @file12
end
def test_propfind_denied_for_anonymous
process :propfind, '/dmsf/webdav/', params: nil, headers: { HTTP_DEPTH: '0' }
process :propfind, '/dmsf/webdav/', params: nil, headers: @anonymous.merge!({ HTTP_DEPTH: '0' })
assert_response :unauthorized
end
def test_propfind_depth0_on_root_for_non_member
def test_propfind_depth0_on_root_for_user
process :propfind, '/dmsf/webdav/', params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '0' })
assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?('<d:displayname>/</d:displayname>')
end
def test_propfind_depth1_on_root_for_non_member
process :propfind, '/dmsf/webdav/', params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '1' })
def test_propfind_depth1_on_root_for_user
process :propfind, '/dmsf/webdav/', params: nil, headers: @someone.merge!({ HTTP_DEPTH: '1' })
assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?( '<d:displayname>/</d:displayname>')
@ -116,19 +69,19 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end
def test_propfind_depth0_on_project1_for_non_member
process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @jsmith.merge!({ HTTP_DEPTH: '0' })
process :propfind, "/dmsf/webdav/#{@project1.identifier}", params: nil, headers: @someone.merge!({ HTTP_DEPTH: '0' })
assert_response :success
end
def test_propfind_depth0_on_folder1_for_non_member
process :propfind, "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", params: nil,
headers: @jsmith.merge!({ HTTP_DEPTH: '0' })
headers: @someone.merge!({ HTTP_DEPTH: '0' })
assert_response :not_found
end
def test_propfind_depth0_on_file1_for_non_member
process :propfind, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", params: nil,
headers: @jsmith.merge!({ HTTP_DEPTH: '0' })
headers: @someone.merge!({ HTTP_DEPTH: '0' })
assert_response :not_found
end

View File

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

View File

@ -28,55 +28,6 @@ class DmsfWebdavUnlockTest < RedmineDmsf::Test::IntegrationTest
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles,
:enabled_modules, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks
def setup
@admin = credentials 'admin'
@jsmith = credentials 'jsmith'
@admin_user = User.find_by(login: 'admin')
@jsmith_user = User.find_by(login: 'jsmith')
@project1 = Project.find 1
@project1.enable_module! 'dmsf'
@project2 = Project.find 2
@project2.enable_module! 'dmsf'
@project3 = Project.find 3
@project3.enable_module! 'dmsf'
@file2 = DmsfFile.find 2
@file9 = DmsfFile.find 9
@file12 = DmsfFile.find 12
@folder2 = DmsfFolder.find 2
@folder6 = DmsfFolder.find 6
@folder10 = DmsfFolder.find 10
# Fix permissions for jsmith's role
@role = Role.find_by(name: 'Manager')
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_files
@role.add_permission! :file_manipulation
@dmsf_webdav = Setting.plugin_redmine_dmsf['dmsf_webdav']
Setting.plugin_redmine_dmsf['dmsf_webdav'] = true
@dmsf_webdav_strategy = Setting.plugin_redmine_dmsf['dmsf_webdav_strategy']
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
end
def teardown
Setting.plugin_redmine_dmsf['dmsf_webdav'] = @dmsf_webdav
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = @dmsf_webdav_strategy
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of Project, @project3
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file9
assert_kind_of DmsfFile, @file12
assert_kind_of DmsfFolder, @folder2
assert_kind_of DmsfFolder, @folder6
assert_kind_of DmsfFolder, @folder10
assert_kind_of Role, @role
assert_kind_of User, @admin_user
assert_kind_of User, @jsmith_user
end
def test_unlock_file
log_user 'admin', 'admin'
l = @file2.locks.first
@ -123,7 +74,6 @@ class DmsfWebdavUnlockTest < RedmineDmsf::Test::IntegrationTest
def test_unlock_folder
log_user 'jsmith', 'jsmith'
l = @folder2.locks.first
puts ">>> process unlock"
process :unlock, "/dmsf/webdav/#{@folder2.project.identifier}/#{@folder2.dmsf_folder.title}/#{@folder2.title}",
params: nil,
headers: @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_LOCK_TOKEN: l.uuid })

View File

@ -23,14 +23,101 @@
module RedmineDmsf
module Test
class IntegrationTest < Redmine::IntegrationTest
def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures')
table_names.each do |x|
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml")
def setup
@admin = credentials('admin', 'admin')
@admin_user = User.find_by(login: 'admin')
@jsmith = credentials('jsmith', 'jsmith')
@jsmith_user = User.find_by(login: 'jsmith')
@someone = credentials('someone', 'foo')
@anonymous = credentials('')
@project1 = Project.find 1
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
@project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
@project1_uri = Addressable::URI.escape(@project1_name)
@project2 = Project.find 2
@project3 = Project.find 3
[@project1, @project2, @project3].each do |project|
project.enable_module! :dmsf
end
super(table_names)
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@file9 = DmsfFile.find 9
@file10 = DmsfFile.find 10
@file12 = DmsfFile.find 12
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@folder3 = DmsfFolder.find 3
@folder6 = DmsfFolder.find 6
@folder7 = DmsfFolder.find 7
@folder10 = DmsfFolder.find 10
@role = Role.find_by(name: 'Manager')
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_files
@role.add_permission! :file_manipulation
@role.add_permission! :file_delete
Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1'
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf))
FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
end
def self.fixtures(*table_names)
dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x|
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml"))
end
super table_names
end
protected
def check_headers_exist
assert !(response.headers.nil? || response.headers.empty?),
'Head returned without headers' # Headers exist?
values = {}
values[:etag] = { optional: true, content: response.headers['Etag'] }
values[:content_type] = response.headers['Content-Type']
values[:last_modified] = { optional: true, content: response.headers['Last-Modified'] }
single_optional = false
values.each do |key,val|
if val.is_a?(Hash)
if val[:optional].nil? || !val[:optional]
assert(!(val[:content].nil? || val[:content].empty?), "Expected header #{key} was empty." ) if single_optional
else
single_optional = true
end
else
assert !(val.nil? || val.empty?), "Expected header #{key} was empty."
end
end
end
def check_headers_dont_exist
assert !(response.headers.nil? || response.headers.empty?), 'Head returned without headers' # Headers exist?
values = {}
values[:etag] = response.headers['Etag']
values[:last_modified] = response.headers['Last-Modified']
values.each do |key,val|
assert (val.nil? || val.empty?), "Expected header #{key} should be empty."
end
end
end
end
end

View File

@ -29,24 +29,68 @@ module RedmineDmsf
# Ultimately it allows for better integration without blowing redmine fixtures up,
# and allowing us to suppliment redmine fixtures if we need to.
def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures')
dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x|
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml")
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml"))
end
super(table_names)
super table_names
end
def setup
if ::Rails::VERSION::MAJOR >= 5
if ::Rails::VERSION::MINOR >= 1
@request = ActionController::TestRequest.create(self.class.controller_class)
else
@request = ActionController::TestRequest.create
end
else
@request = ActionController::TestRequest.new
@admin = User.find_by(login: 'admin')
@jsmith = User.find_by(login: 'jsmith')
@dlopper = User.find_by(login: 'dlopper')
@someone = User.find_by(login: 'someone')
@project1 = Project.find 1
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = '1'
@project1_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
@project1_uri = Addressable::URI.escape(@project1_name)
@project2 = Project.find 2
@project3 = Project.find 3
[@project1, @project2, @project3].each do |project|
project.enable_module! :dmsf
project.enable_module! :issue_tracking
end
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@file6 = DmsfFile.find 6
@file9 = DmsfFile.find 9
@file10 = DmsfFile.find 10
@file12 = DmsfFile.find 12
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@folder3 = DmsfFolder.find 3
@folder4 = DmsfFolder.find 4
@folder5 = DmsfFolder.find 5
@folder6 = DmsfFolder.find 6
@folder7 = DmsfFolder.find 7
@role_manager = Role.find_by(name: 'Manager')
@role_developer = Role.find_by(name: 'Developer')
[@role_manager, @role_developer].each do |role|
role.add_permission! :view_dmsf_folders
role.add_permission! :folder_manipulation
role.add_permission! :view_dmsf_files
role.add_permission! :file_manipulation
role.add_permission! :file_delete
role.add_permission! :email_documents
role.add_permission! :manage_workflows
role.add_permission! :file_approval
end
Setting.plugin_redmine_dmsf['dmsf_webdav'] = '1'
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_WRITE'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = nil
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf))
FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
@response = ActionController::TestResponse.new
end
end

View File

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

View File

@ -24,43 +24,18 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfFileRevisionTest < RedmineDmsf::Test::UnitTest
include Redmine::I18n
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members,
:member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps,
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles,
:members, :member_roles, :enabled_modules, :enumerations, :dmsf_locks, :dmsf_workflows, :dmsf_workflow_steps,
:dmsf_workflow_step_assignments, :dmsf_workflow_step_actions
def setup
super
@revision1 = DmsfFileRevision.find 1
@revision2 = DmsfFileRevision.find 2
@revision3 = DmsfFileRevision.find 3
@revision5 = DmsfFileRevision.find 5
@revision8 = DmsfFileRevision.find 8
@wf1 = DmsfWorkflow.find 1
@admin = User.find 1
@jsmith = User.find 2
@dmsf_storage_directory = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = 'files/dmsf'
FileUtils.cp_r File.join(File.expand_path('../../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = @dmsf_storage_directory
end
def test_truth
assert_kind_of DmsfFileRevision, @revision1
assert_kind_of DmsfFileRevision, @revision2
assert_kind_of DmsfFileRevision, @revision3
assert_kind_of DmsfFileRevision, @revision5
assert_kind_of DmsfFileRevision, @revision8
assert_kind_of DmsfWorkflow, @wf1
assert_kind_of User, @admin
assert_kind_of User, @jsmith
end
def test_delete_restore

View File

@ -28,42 +28,10 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
:dmsf_workflow_step_assignments
def setup
@admin = User.find 1
@jsmith = User.find 2
@project1 = Project.find 1
@project2 = Project.find 2
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@file3 = DmsfFile.find 3
@file4 = DmsfFile.find 4
@file5 = DmsfFile.find 5
@file6 = DmsfFile.find 6
@file7 = DmsfFile.find 7
@file8 = DmsfFile.find 8
@folder1 = DmsfFolder.find 1
super
@issue1 = Issue.find 1
@wf1 = DmsfWorkflow.find 1
@wf2 = DmsfWorkflow.find 2
User.current = nil
end
def test_truth
assert_kind_of User, @admin
assert_kind_of User, @jsmith
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file3
assert_kind_of DmsfFile, @file4
assert_kind_of DmsfFile, @file5
assert_kind_of DmsfFile, @file6
assert_kind_of DmsfFile, @file7
assert_kind_of DmsfFile, @file8
assert_kind_of DmsfFolder, @folder1
assert_kind_of Issue, @issue1
assert_kind_of DmsfWorkflow, @wf1
assert_kind_of DmsfWorkflow, @wf2
end
def test_project_file_count_differs_from_project_visibility_count
@ -94,20 +62,12 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
def test_file_locked_is_not_locked_for_user_who_locked
User.current = @admin
@file1.lock!
assert !@file1.locked_for_user?,
"#{@file1.name} is locked for #{User.current}"
@file1.unlock!
assert !@file2.locked_for_user?, "#{@file2.name} is locked for #{User.current}"
end
def test_file_locked_is_locked_for_user_who_didnt_lock
User.current = @admin
@file1.lock!
User.current = @jsmith
assert @file1.locked_for_user?,
"#{@file1.name} is locked for #{User.current}"
User.current = @admin
@file1.unlock!
assert @file2.locked_for_user?, "#{@file1.name} is locked for #{User.current}"
end
def test_file_with_no_locks_reported_unlocked
@ -127,7 +87,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert_equal 0, @file4.dmsf_file_revisions.visible.all.size
# Links should not be deleted
assert_equal 2, @file4.referenced_links.visible.all.size
@file4.dmsf_folder.lock!
end
def test_restore
@ -138,7 +97,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert !@file4.deleted?, "File #{@file4} hasn't been restored"
assert_equal 1, @file4.dmsf_file_revisions.visible.all.size
assert_equal 2, @file4.referenced_links.visible.all.size
@file4.dmsf_folder.lock!
end
def test_destroy
@ -149,7 +107,6 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
@file4.delete true
assert_equal 0, @file4.dmsf_file_revisions.all.size
assert_equal 0, @file4.referenced_links.all.size
@file4.dmsf_folder.lock!
end
def test_copy_to_filename

View File

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

View File

@ -26,56 +26,20 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :users, :email_addresses, :dmsf_folders, :roles, :members, :member_roles,
:dmsf_folder_permissions, :dmsf_locks
def setup
@project1 = Project.find 1
@project1.enable_module! :dmsf
@project2 = Project.find 2
@project2.enable_module! :dmsf
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@folder3 = DmsfFolder.find 3
@folder4 = DmsfFolder.find 4
@folder5 = DmsfFolder.find 5
@folder6 = DmsfFolder.find 6
@folder7 = DmsfFolder.find 7
@jsmith = User.find 2 # Manager
@dlopper = User.find 3 # Developer
@manager_role = Role.find_by(name: 'Manager')
@manager_role.add_permission! :view_dmsf_folders
developer_role = Role.find 2
developer_role.add_permission! :view_dmsf_folders
User.current = @jsmith
end
def test_truth
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder2
assert_kind_of DmsfFolder, @folder3
assert_kind_of DmsfFolder, @folder4
assert_kind_of DmsfFolder, @folder5
assert_kind_of DmsfFolder, @folder6
assert_kind_of DmsfFolder, @folder7
assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of User, @jsmith
assert_kind_of User, @dlopper
assert_kind_of Role, @manager_role
end
def test_visiblity
# The role has got permissions
User.current = @jsmith
assert_equal 7, DmsfFolder.where(project_id: 1).all.size
assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size
assert_equal 7, DmsfFolder.where(project_id: @project1.id).all.size
assert_equal 5, DmsfFolder.visible.where(project_id: @project1.id).all.size
# The user has got permissions
User.current = @dlopper
# Hasn't got permissions for @folder7
@folder7.dmsf_folder_permissions.where(object_type: 'User').delete_all
assert_equal 4, DmsfFolder.visible.where(project_id: 1).all.size
assert_equal 4, DmsfFolder.visible.where(project_id: @project1.id).all.size
# Anonymous user
User.current = User.anonymous
@project1.add_default_member User.anonymous
assert_equal 5, DmsfFolder.visible.where(project_id: 1).all.size
assert_equal 5, DmsfFolder.visible.where(project_id: @project1.id).all.size
end
def test_permissions
@ -210,10 +174,11 @@ class DmsfFolderTest < RedmineDmsf::Test::UnitTest
end
def test_move_to
User.current = @jsmith
assert @folder1.move_to(@project2, nil)
assert_equal @project2, @folder1.project
@folder1.dmsf_folders.each do |d|
assert_equal @project2, d.project
assert_equal @project2.identifier, d.project.identifier
end
@folder1.dmsf_files.each do |f|
assert_equal @project2, f.project

View File

@ -23,29 +23,15 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfLinksTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions,
:dmsf_folders, :dmsf_links
fixtures :users, :email_addresses, :roles, :projects, :members, :member_roles, :dmsf_files,
:dmsf_file_revisions, :dmsf_folders, :dmsf_links
def setup
@project1 = Project.find 1
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@file1 = DmsfFile.find 1
@file4 = DmsfFile.find 4
super
@folder_link = DmsfLink.find 1
@file_link = DmsfLink.find 2
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder2
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file4
assert_kind_of DmsfLink, @folder_link
assert_kind_of DmsfLink, @file_link
end
def test_create_folder_link
folder_link = DmsfLink.new
folder_link.target_project_id = @project1.id

View File

@ -23,25 +23,12 @@
require File.expand_path('../../test_helper.rb', __FILE__)
class DmsfLockTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files,
:dmsf_file_revisions, :roles, :members, :member_roles, :enabled_modules,
:enumerations, :dmsf_locks
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles,
:members, :member_roles, :enabled_modules, :enumerations, :dmsf_locks
def setup
super
@lock = DmsfLock.find 1
@folder2 = DmsfFolder.find 2
@folder7 = DmsfFolder.find 7
@file4 = DmsfFile.find 4
@jsmith = User.find 2
@admin = User.find 1
end
def test_truth
assert_kind_of DmsfLock, @lock
assert_kind_of DmsfFile, @file4
assert_kind_of DmsfFolder, @folder2
assert_kind_of User, @jsmith
assert_kind_of User, @admin
end
def test_lock_type_is_enumerable
@ -114,7 +101,6 @@ class DmsfLockTest < RedmineDmsf::Test::UnitTest
end
end
@folder2.lock!
User.current = nil
end
def test_expired

View File

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

View File

@ -23,24 +23,17 @@ require File.expand_path('../../test_helper', __FILE__)
class DmsfPublicUrlsTest < RedmineDmsf::Test::UnitTest
fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls, :users
fixtures :dmsf_files, :dmsf_file_revisions, :dmsf_public_urls, :users, :email_addresses
def setup
@file1 = DmsfFile.find 1
super
@dmsf_public_url1 = DmsfPublicUrl.find 1
@user2 = User.find 2
end
def test_truth
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfPublicUrl, @dmsf_public_url1
assert_kind_of User, @user2
end
def test_create
url = DmsfPublicUrl.new
url.dmsf_file = @file1
url.user = @user2
url.user = @jsmith
url.expire_at = DateTime.current + 1.day
assert url.save, url.errors.full_messages.to_sentence
assert_not_nil url.token

View File

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

View File

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

View File

@ -36,15 +36,6 @@ class DmsfWorkflowStepTest < RedmineDmsf::Test::UnitTest
@wf2 = DmsfWorkflow.find 2
end
def test_truth
assert_kind_of DmsfWorkflowStep, @wfs1
assert_kind_of DmsfWorkflowStep, @wfs2
assert_kind_of DmsfWorkflowStep, @wfs5
assert_kind_of DmsfFileRevision, @revision1
assert_kind_of DmsfFileRevision, @revision2
assert_kind_of DmsfWorkflow, @wf2
end
def test_create
wfs = DmsfWorkflowStep.new
wfs.dmsf_workflow_id = 1

View File

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

View File

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

View File

@ -22,19 +22,12 @@
require File.expand_path('../../test_helper', __FILE__)
class UserPatchTest < RedmineDmsf::Test::UnitTest
fixtures :users, :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_folders, :dmsf_links
def setup
@user2 = User.find 2
end
def test_truth
assert_kind_of User, @user2
end
fixtures :users, :email_addresses, :projects, :dmsf_files, :dmsf_file_revisions, :dmsf_folders,
:dmsf_links
def test_remove_dmsf_references
id = @user2.id
@user2.destroy
id = @jsmith.id
@jsmith.destroy
assert_equal 0, DmsfFileRevisionAccess.where(user_id: id).all.size
assert_equal 0, DmsfFileRevision.where(user_id: id).all.size
assert_equal 0, DmsfFileRevision.where(dmsf_workflow_assigned_by_user_id: id).all.size

View File

@ -25,16 +25,78 @@ module RedmineDmsf
module Test
class UnitTest < ActiveSupport::TestCase
def setup
@admin = User.find_by(login: 'admin')
@jsmith = User.find_by(login: 'jsmith')
@dlopper = User.find_by(login: 'dlopper')
@manager_role = Role.find_by(name: 'Manager')
@developer_role = Role.find_by(name: 'Developer')
[@manager_role, @developer_role].each do |role|
role.add_permission! :view_dmsf_folders
role.add_permission! :folder_manipulation
role.add_permission! :view_dmsf_files
role.add_permission! :file_manipulation
role.add_permission! :file_delete
end
@project1 = Project.find 1
@project2 = Project.find 2
@project3 = Project.find 3
@project5 = Project.find 5
[@project1, @project2, @project3, @project5].each do |project|
project.enable_module! :dmsf
end
@file1 = DmsfFile.find 1
@file2 = DmsfFile.find 2
@file4 = DmsfFile.find 4
@file5 = DmsfFile.find 5
@file7 = DmsfFile.find 7
@file8 = DmsfFile.find 8
@folder1 = DmsfFolder.find 1
@folder2 = DmsfFolder.find 2
@folder6 = DmsfFolder.find 6
@folder7 = DmsfFolder.find 7
Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = File.join(%w(files dmsf))
FileUtils.cp_r File.join(File.expand_path('../fixtures/files', __FILE__), '.'), DmsfFile.storage_path
User.current = nil
end
def teardown
# Delete our tmp folder
begin
FileUtils.rm_rf DmsfFile.storage_path
rescue => e
error e.message
end
end
# Allow us to override the fixtures method to implement fixtures for our plugin.
# Ultimately it allows for better integration without blowing redmine fixtures up,
# and allowing us to suppliment redmine fixtures if we need to.
def self.fixtures(*table_names)
dir = File.join( File.dirname(__FILE__), '/fixtures')
dir = File.join(File.dirname(__FILE__), 'fixtures')
table_names.each do |x|
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?("#{dir}/#{x}.yml")
ActiveRecord::FixtureSet.create_fixtures(dir, x) if File.exist?(File.join(dir, "#{x}.yml"))
end
super(table_names)
super table_names
end
protected
def last_email
mail = ActionMailer::Base.deliveries.last
assert_not_nil mail
mail
end
def text_part(email)
email.parts.detect {|part| part.content_type.include?('text/plain')}
end
def html_part(email)
email.parts.detect {|part| part.content_type.include?('text/html')}
end
end
end
end