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