Merge pull request #931 from ahorek/redmine4

redmine 4.0.0
This commit is contained in:
Karel Picman 2018-12-11 08:08:18 +01:00 committed by GitHub
commit 43b04bb8cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
90 changed files with 537 additions and 532 deletions

View File

@ -35,3 +35,7 @@ end
# Dav4Rack
gem 'ox'
group :test do
gem 'rails-controller-testing'
end

View File

@ -23,6 +23,8 @@
require_dependency 'zip'
require_dependency File.dirname(__FILE__) + '/lib/redmine_dmsf.rb'
ActiveSupport::Dependencies.autoload_paths << File.join(File.dirname(__FILE__), 'app', 'validators')
def init
# Administration menu extension
Redmine::MenuManager.map :admin_menu do |menu|
@ -100,7 +102,7 @@ else
init
end
ActionDispatch::Reloader.to_prepare do
RedmineExtensions::Reloader.to_prepare do
# Rubyzip configuration
Zip.unicode_names = true

View File

@ -178,7 +178,7 @@ class DmsfController < ApplicationController
if params[:email][:to].strip.blank?
flash[:error] = l(:error_email_to_must_be_entered)
else
DmsfMailer.send_documents(@project, params[:email]).deliver
DmsfMailer.deliver_send_documents(@project, params[:email])
File.delete(params[:email][:zipped_content])
flash[:notice] = l(:notice_email_sent, params[:email][:to])
end
@ -527,10 +527,7 @@ class DmsfController < ApplicationController
# Activities
unless deleted_files.empty?
begin
recipients = DmsfMailer.get_notify_users(@project, deleted_files)
recipients.each do |u|
DmsfMailer.files_deleted(u, @project, deleted_files).deliver
end
DmsfMailer.deliver_files_deleted(@project, deleted_files)
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.empty?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')

View File

@ -163,10 +163,7 @@ class DmsfFilesController < ApplicationController
@file.set_last_revision revision
flash[:notice] = (flash[:notice].nil? ? '' : flash[:notice]) + l(:notice_file_revision_created)
begin
recipients = DmsfMailer.get_notify_users(@project, [@file])
recipients.each do |u|
DmsfMailer.files_updated(u, @project, [@file]).deliver
end
DmsfMailer.deliver_files_updated(@project, [@file])
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.empty?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')
@ -196,10 +193,7 @@ class DmsfFilesController < ApplicationController
flash[:notice] = l(:notice_file_deleted)
unless commit
begin
recipients = DmsfMailer.get_notify_users(@project, [@file])
recipients.each do |u|
DmsfMailer.files_deleted(u, @project, [@file]).deliver
end
DmsfMailer.deliver_files_deleted(@project, [@file])
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.empty?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')

View File

@ -42,16 +42,16 @@ class DmsfUploadController < ApplicationController
def upload_files
uploaded_files = params[:dmsf_attachments]
@uploads = []
if uploaded_files && uploaded_files.is_a?(Hash)
if uploaded_files
# standard file input uploads
uploaded_files.each_value do |uploaded_file|
uploaded_files.each do |_, uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, uploaded_file)
@uploads.push(upload) if upload
end
else
# plupload multi upload completed
uploaded = params[:uploaded]
if uploaded && uploaded.is_a?(Hash)
if uploaded
uploaded.each_value do |uploaded_file|
@uploads.push(DmsfUpload.new(@project, @folder, uploaded_file))
end
@ -113,11 +113,11 @@ class DmsfUploadController < ApplicationController
def commit
@files = []
attachments = params[:attachments]
if attachments && attachments.is_a?(Hash)
if attachments
@folder = DmsfFolder.visible.find_by(id: attachments[:folder_id]) if attachments[:folder_id].present?
# standard file input uploads
uploaded_files = attachments.select { |key, value| key == 'uploaded_file'}
uploaded_files.each_value do |uploaded_file|
uploaded_files.each do |_, uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(@project, @folder, uploaded_file)
if upload
uploaded_file[:disk_filename] = upload.disk_filename

View File

@ -73,15 +73,13 @@ class DmsfWorkflowsController < ApplicationController
if revision.workflow == DmsfWorkflow::STATE_APPROVED
# Just approved
recipients = DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true)
recipients.each do |user|
DmsfMailer.workflow_notification(
user,
DmsfMailer.deliver_workflow_notification(
recipients,
@dmsf_workflow,
revision,
:text_email_subject_approved,
:text_email_finished_approved,
:text_email_to_see_history).deliver if user
end
:text_email_to_see_history)
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.blank?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')
@ -95,16 +93,14 @@ class DmsfWorkflowsController < ApplicationController
recipients.push User.find_by(id: revision.dmsf_workflow_assigned_by)
recipients.uniq!
recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true)
recipients.each do |user|
DmsfMailer.workflow_notification(
user,
DmsfMailer.deliver_workflow_notification(
recipients,
@dmsf_workflow,
revision,
:text_email_subject_rejected,
:text_email_finished_rejected,
:text_email_to_see_history,
action.note).deliver
end
action.note)
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.blank?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')
@ -118,14 +114,14 @@ class DmsfWorkflowsController < ApplicationController
# Delegation
delegate = User.find_by(id: params[:step_action].to_i / 10)
if DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(delegate)
DmsfMailer.workflow_notification(
delegate,
DmsfMailer.deliver_workflow_notification(
[delegate],
@dmsf_workflow,
revision,
:text_email_subject_delegated,
:text_email_finished_delegated,
:text_email_to_proceed,
action.note).deliver
action.note)
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
flash[:warning] = l(:warning_email_notifications, :to => delegate.name)
end
@ -138,24 +134,24 @@ class DmsfWorkflowsController < ApplicationController
# Next step
assignments.each do |assignment|
if assignment.user && DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(assignment.user)
DmsfMailer.workflow_notification(
assignment.user,
DmsfMailer.deliver_workflow_notification(
[assignment.user],
@dmsf_workflow,
revision,
:text_email_subject_requires_approval,
:text_email_finished_step,
:text_email_to_proceed).deliver
:text_email_to_proceed)
end
end
to = User.find_by(id: revision.dmsf_workflow_assigned_by)
if to && DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(to)
DmsfMailer.workflow_notification(
to,
DmsfMailer.deliver_workflow_notification(
[to],
@dmsf_workflow,
revision,
:text_email_subject_updated,
:text_email_finished_step_short,
:text_email_to_see_status).deliver
:text_email_to_see_status)
end
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
recipients = assignments.collect{ |a| a.user }

View File

@ -24,9 +24,9 @@ module DmsfUploadHelper
def self.commit_files_internal(commited_files, project, folder, controller = nil)
failed_uploads = []
files = []
if commited_files && commited_files.is_a?(Hash)
if commited_files
failed_uploads = []
commited_files.each_value do |commited_file|
commited_files.each do |_, commited_file|
name = commited_file[:name]
new_revision = DmsfFileRevision.new
file = DmsfFile.visible.find_file_by_name(project, folder, name)
@ -140,10 +140,7 @@ module DmsfUploadHelper
# Notifications
if (folder && folder.notification?) || (!folder && project.dmsf_notification?)
begin
recipients = DmsfMailer.get_notify_users(project, files)
recipients.each do |u|
DmsfMailer.files_updated(u, project, files).deliver
end
DmsfMailer.deliver_files_updated(project, files)
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.empty?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')

View File

@ -85,7 +85,7 @@ class DmsfFile < ActiveRecord::Base
end
end
def initialize
def initialize(*args)
@project = nil
super
end

View File

@ -24,6 +24,13 @@ require 'mailer'
class DmsfMailer < Mailer
layout 'mailer'
def self.deliver_files_updated(project, files)
users = get_notify_users(project, files)
users.each do |user|
files_updated(user, project, files).deliver_later
end
end
def files_updated(user, project, files)
if user && project && files.count > 0
files = files.select { |file| file.notify? }
@ -37,6 +44,13 @@ class DmsfMailer < Mailer
end
end
def self.deliver_files_deleted(project, files)
users = get_notify_users(project, files)
users.each do |user|
files_deleted(user, project, files).deliver_later
end
end
def files_deleted(user, project, files)
if user && files.count > 0
files = files.select { |file| file.notify? }
@ -50,7 +64,11 @@ class DmsfMailer < Mailer
end
end
def send_documents(project, email_params)
def self.deliver_send_documents(project, email_params)
send_documents(email_params[:to], project, email_params).deliver_later
end
def send_documents(user, project, email_params)
redmine_headers 'Project' => project.identifier if project
@body = email_params[:body]
@links_only = email_params[:links_only] == '1'
@ -63,10 +81,16 @@ class DmsfMailer < Mailer
zipped_content_data = open(email_params[:zipped_content], 'rb') { |io| io.read }
attachments['Documents.zip'] = { :content_type => 'application/zip', :content => zipped_content_data }
end
mail :to => email_params[:to], :cc => email_params[:cc],
mail :to => user, :cc => email_params[:cc],
:subject => email_params[:subject], 'From' => email_params[:from], 'Reply-To' => email_params[:reply_to]
end
def self.deliver_workflow_notification(users, workflow, revision, subject_id, text1_id, text2_id, notice = nil)
users.each do |user|
workflow_notification(user, workflow, revision, subject_id.to_s, text1_id.to_s, text2_id.to_s, notice).deliver_later
end
end
def workflow_notification(user, workflow, revision, subject_id, text1_id, text2_id, notice = nil)
if user && workflow && revision
if revision.dmsf_file && revision.dmsf_file.project

View File

@ -195,15 +195,13 @@ class DmsfWorkflow < ActiveRecord::Base
recipients = assignments.collect{ |a| a.user }
recipients.uniq!
recipients = recipients & DmsfMailer.get_notify_users(project, [revision.dmsf_file], true)
recipients.each do |user|
DmsfMailer.workflow_notification(
user,
DmsfMailer.deliver_workflow_notification(
recipients,
self,
revision,
:text_email_subject_started,
:text_email_started,
:text_email_to_proceed).deliver
end
:text_email_to_proceed)
if Setting.plugin_redmine_dmsf['dmsf_display_notified_recipients']
unless recipients.blank?
to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ')

View File

@ -17,7 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateHierarchy < ActiveRecord::Migration
class CreateHierarchy < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_folders do |t|

View File

@ -17,7 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfNormalization < ActiveRecord::Migration
class DmsfNormalization < ActiveRecord::Migration[4.2]
def up
rename_column :dmsf_folders, :name, :title

View File

@ -17,7 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Dmsf080 < ActiveRecord::Migration
class Dmsf080 < ActiveRecord::Migration[4.2]
def change
add_column :projects, :dmsf_description, :text

View File

@ -17,7 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Dmsf090 < ActiveRecord::Migration
class Dmsf090 < ActiveRecord::Migration[4.2]
def up
add_column :members, :dmsf_mail_notification, :boolean

View File

@ -17,7 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Dmsf0901 < ActiveRecord::Migration
class Dmsf0901 < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_file_revision_accesses do |t|

View File

@ -19,7 +19,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Dmsf120 < ActiveRecord::Migration
class Dmsf120 < ActiveRecord::Migration[4.2]
def up
add_column :dmsf_file_revisions, :project_id, :integer, null: true

View File

@ -20,7 +20,7 @@
require 'fileutils'
require 'uuidtools'
class Dmsf144 < ActiveRecord::Migration
class Dmsf144 < ActiveRecord::Migration[4.2]
class DmsfFileLock < ActiveRecord::Base
belongs_to :file, class_name: 'DmsfFile', foreign_key: 'dmsf_file_id'

View File

@ -19,7 +19,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfWorkflows < ActiveRecord::Migration
class CreateDmsfWorkflows < ActiveRecord::Migration[4.2]
def up
create_table :dmsf_workflows do |t|

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfWorkflowSteps < ActiveRecord::Migration
class CreateDmsfWorkflowSteps < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_workflow_steps do |t|

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfWorkflowStepAssignments < ActiveRecord::Migration
class CreateDmsfWorkflowStepAssignments < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_workflow_step_assignments do |t|

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfWorkflowStepActions < ActiveRecord::Migration
class CreateDmsfWorkflowStepActions < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_workflow_step_actions do |t|

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class UpdateProjects < ActiveRecord::Migration
class UpdateProjects < ActiveRecord::Migration[4.2]
def change
# DMSF - project's root folder notification

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddIndexToDmsfFiles < ActiveRecord::Migration
class AddIndexToDmsfFiles < ActiveRecord::Migration[4.2]
def change
add_index :dmsf_files, :project_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddIndexToDmsfFolders < ActiveRecord::Migration
class AddIndexToDmsfFolders < ActiveRecord::Migration[4.2]
def change
add_index :dmsf_folders, :project_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddIndexToDmsfFileRevision < ActiveRecord::Migration
class AddIndexToDmsfFileRevision < ActiveRecord::Migration[4.2]
def change
add_index :dmsf_file_revisions, :dmsf_file_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddIndexToDmsfLock < ActiveRecord::Migration
class AddIndexToDmsfLock < ActiveRecord::Migration[4.2]
def change
add_index :dmsf_locks, :entity_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfLinks < ActiveRecord::Migration
class CreateDmsfLinks < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_links do |t|

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class NotificationsOn < ActiveRecord::Migration
class NotificationsOn < ActiveRecord::Migration[4.2]
def up
# Switch on the default notifications for new projects and folders

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class TrashBin < ActiveRecord::Migration
class TrashBin < ActiveRecord::Migration[4.2]
def up
# DMSF - project's root folder notification

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class RemoveProjectFromRevision < ActiveRecord::Migration
class RemoveProjectFromRevision < ActiveRecord::Migration[4.2]
def up
remove_column :dmsf_file_revisions, :project_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class RemoveFolderFromRevision < ActiveRecord::Migration
class RemoveFolderFromRevision < ActiveRecord::Migration[4.2]
def up
remove_column :dmsf_file_revisions, :dmsf_folder_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class RemoveUniquenessFromWf < ActiveRecord::Migration
class RemoveUniquenessFromWf < ActiveRecord::Migration[4.2]
def up
remove_index(:dmsf_workflows, :name) if index_exists?(:dmsf_workflows, :name)

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class NotificationsNullable < ActiveRecord::Migration
class NotificationsNullable < ActiveRecord::Migration[4.2]
def up
change_column :projects, :dmsf_notification, :boolean, default: false, null: true

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddExternal < ActiveRecord::Migration
class AddExternal < ActiveRecord::Migration[4.2]
def up
change_column :dmsf_links, :target_id, :integer, null: true

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddUserToLinks < ActiveRecord::Migration
class AddUserToLinks < ActiveRecord::Migration[4.2]
def change
add_column :dmsf_links, :user_id, :integer

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class TitleNotNull < ActiveRecord::Migration
class TitleNotNull < ActiveRecord::Migration[4.2]
def up
change_column :dmsf_file_revisions, :title, :string, null: false

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class LargeFiles < ActiveRecord::Migration
class LargeFiles < ActiveRecord::Migration[4.2]
def up
change_column :dmsf_file_revisions, :size, :bigint, null: true

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class TitleFormat < ActiveRecord::Migration
class TitleFormat < ActiveRecord::Migration[4.2]
def change
add_column :members, :title_format, :text, null: true, limit: 100

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ApprovalWorkflowStatus < ActiveRecord::Migration
class ApprovalWorkflowStatus < ActiveRecord::Migration[4.2]
def up
add_column :dmsf_workflows, :status, :integer, null: false,

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class StatusDeleted < ActiveRecord::Migration
class StatusDeleted < ActiveRecord::Migration[4.2]
def up
case ActiveRecord::Base.connection.adapter_name.downcase

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ApprovalWorkflowStdFields < ActiveRecord::Migration
class ApprovalWorkflowStdFields < ActiveRecord::Migration[4.2]
def up
add_column :dmsf_workflows, :updated_on, :timestamp

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddDigestToRevision < ActiveRecord::Migration
class AddDigestToRevision < ActiveRecord::Migration[4.2]
def up
add_column :dmsf_file_revisions, :digest, :string, limit: 40, default: '', null: false

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfPublicUrls < ActiveRecord::Migration
class CreateDmsfPublicUrls < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_public_urls do |t|

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddNameToAppovalWorkflowStep < ActiveRecord::Migration
class AddNameToAppovalWorkflowStep < ActiveRecord::Migration[4.2]
def change
add_column :dmsf_workflow_steps, :name, :string, limit: 30, null: true

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfFileContainer < ActiveRecord::Migration
class DmsfFileContainer < ActiveRecord::Migration[4.2]
def up
remove_index :dmsf_files, :project_id

View File

@ -19,7 +19,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddRevisionToDmsfLock < ActiveRecord::Migration
class AddRevisionToDmsfLock < ActiveRecord::Migration[4.2]
def change
add_column :dmsf_locks, :revision, :integer, null: true

View File

@ -19,7 +19,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddDmsfFileLastRevisionIdToDmsfLock < ActiveRecord::Migration
class AddDmsfFileLastRevisionIdToDmsfLock < ActiveRecord::Migration[4.2]
def up
rename_column :dmsf_locks, :revision, :dmsf_file_last_revision_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddDmsfNotInheritableToCustomFields < ActiveRecord::Migration
class AddDmsfNotInheritableToCustomFields < ActiveRecord::Migration[4.2]
def change
add_column :custom_fields, :dmsf_not_inheritable, :boolean, null: true

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfDescriptionLimit < ActiveRecord::Migration
class DmsfDescriptionLimit < ActiveRecord::Migration[4.2]
def up
change_column :projects, :dmsf_description, :text, null: true, limit: 65535

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CreateDmsfFolderPermissions < ActiveRecord::Migration
class CreateDmsfFolderPermissions < ActiveRecord::Migration[4.2]
def change
create_table :dmsf_folder_permissions do |t|
@ -29,4 +29,4 @@ class CreateDmsfFolderPermissions < ActiveRecord::Migration
add_index :dmsf_folder_permissions, :dmsf_folder_id
end
end
end

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfFileContainerRollback < ActiveRecord::Migration
class DmsfFileContainerRollback < ActiveRecord::Migration[4.2]
def up
# Add system folder_flag to dmsf_folders

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class MigrateDocuments < ActiveRecord::Migration
class MigrateDocuments < ActiveRecord::Migration[4.2]
def up
# Migrate all documents from dmsf/p_{project identifier} to dmsf/{year}/{month}

View File

@ -18,14 +18,14 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfAttachable < ActiveRecord::Migration
class DmsfAttachable < ActiveRecord::Migration[4.2]
def up
# DMSF - project's root folder notification
add_column :projects, :dmsf_act_as_attachable, :integer, default: 1, null: false
Project.update_all dmsf_act_as_attachable: 1
end
def down
remove_column :projects, :dmsf_act_as_attachable
end

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ChangeRevisionDigestLimitTo64 < ActiveRecord::Migration
class ChangeRevisionDigestLimitTo64 < ActiveRecord::Migration[4.2]
def up
change_column :dmsf_file_revisions, :digest, :string, limit: 64

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AddIndexToDmsfFolder < ActiveRecord::Migration
class AddIndexToDmsfFolder < ActiveRecord::Migration[4.2]
def change
add_index :dmsf_folders, :dmsf_folder_id

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class RenameTitleFormat < ActiveRecord::Migration
class RenameTitleFormat < ActiveRecord::Migration[4.2]
def up
rename_column :members, :title_format, :dmsf_title_format

View File

@ -18,7 +18,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class FastLinks < ActiveRecord::Migration
class FastLinks < ActiveRecord::Migration[4.2]
def change
add_column :members, :dmsf_fast_links, :boolean, default: false, null: false

View File

@ -34,7 +34,7 @@ Redmine::Plugin.register :redmine_dmsf do
description 'Document Management System Features'
version '1.6.2'
requires_redmine version_or_higher: '3.4.0'
requires_redmine version_or_higher: '4.0.0'
settings partial: 'settings/dmsf_settings',
default: {

View File

@ -116,7 +116,7 @@ module RedmineDmsf
end
# Attach DMS documents
uploaded_files = params[:dmsf_attachments]
if uploaded_files && uploaded_files.is_a?(Hash)
if uploaded_files
system_folder = issue.system_folder(true)
uploaded_files.each do |key, uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(issue.project, system_folder, uploaded_file)

View File

@ -32,7 +32,7 @@ module RedmineDmsf
easy_crm_cases.each do |easy_crm_case|
# Attach DMS documents
uploaded_files = params[:dmsf_attachments]
if uploaded_files && uploaded_files.is_a?(Hash)
if uploaded_files
system_folder = easy_crm_case.system_folder(true)
uploaded_files.each do |key, uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(easy_crm_case.project, system_folder, uploaded_file)

View File

@ -199,10 +199,7 @@ module RedmineDmsf
destroy = false
end
if file.delete(destroy)
recipients = DmsfMailer.get_notify_users(project, [file])
recipients.each do |u|
DmsfMailer.files_deleted(u, project, [file]).deliver
end
DmsfMailer.deliver_files_deleted(project, [file])
NoContent
else
Conflict
@ -599,10 +596,7 @@ module RedmineDmsf
new_revision.create_digest
new_revision.save
# Notifications
recipients = DmsfMailer.get_notify_users(project, [f])
recipients.each do |u|
DmsfMailer.files_updated(u, project, [f]).deliver
end
DmsfMailer.deliver_files_updated(project, [f])
else
raise InternalServerError
end

View File

@ -49,13 +49,13 @@ class DmsfAlertApprovals
if dry_run
puts "#{assignment.user.name} <#{assignment.user.mail}>"
else
DmsfMailer.workflow_notification(
assignment.user,
DmsfMailer.deliver_workflow_notification(
[assignment.user],
workflow,
revision,
:text_email_subject_requires_approval,
:text_email_finished_step,
:text_email_to_proceed).deliver
:text_email_to_proceed)
end
end
end

View File

@ -21,7 +21,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
export REDMINE_GIT_REPO=git://github.com/redmine/redmine.git
export REDMINE_GIT_TAG=3.4-stable
export REDMINE_GIT_TAG=4.0-stable
clone()
{

View File

@ -44,7 +44,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end
def test_dmsf
get :dmsf, :id => @project1.id, :ids => ["file-#{@file1.id}"]
get :dmsf, :params => {:id => @project1.id, :ids => ["file-#{@file1.id}"]}
assert_response :success
assert_select 'a.icon-edit', :text => l(:button_edit)
assert_select 'a.icon-del', :text => l(:button_delete)
@ -53,7 +53,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end
def test_dmsf_no_edit
get :dmsf, :id => @project1.id, :ids => ["folder-#{@folder1.id}"]
get :dmsf, :params => {:id => @project1.id, :ids => ["folder-#{@folder1.id}"]}
assert_response :success
assert_select 'a.icon-edit', :text => l(:button_edit), :count => 0
assert_select 'a.icon-del', :text => l(:button_delete)
@ -62,7 +62,7 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
end
def test_trash
get :trash, :id => @project1.id, :ids => ["file-#{@file1.id}"]
get :trash, :params => {:id => @project1.id, :ids => ["file-#{@file1.id}"]}
assert_response :success
assert_select 'a.icon-cancel', :text => l(:title_restore)
assert_select 'a.icon-del', :text => l(:button_delete)

View File

@ -74,7 +74,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_edit_folder_forbidden
# Missing permissions
get :edit, :id => @project, :folder_id => @folder1
get :edit, :params => {:id => @project, :folder_id => @folder1}
assert_response :forbidden
end
@ -82,7 +82,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
# Permissions OK
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
get :edit, :id => @project, :folder_id => @folder1
get :edit, :params => {:id => @project, :folder_id => @folder1}
assert_response :success
assert_select 'label', { :text => @custom_field.name }
assert_select 'option', { :value => @custom_value.value }
@ -90,28 +90,28 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_trash_forbidden
# Missing permissions
get :trash, :id => @project
get :trash, :params => {:id => @project}
assert_response :forbidden
end
def test_trash_allowed
# Permissions OK
@role.add_permission! :file_delete
get :trash, :id => @project
get :trash, :params => {:id => @project}
assert_response :success
assert_select 'h2', { :text => l(:link_trash_bin) }
end
def test_delete_forbidden
# Missing permissions
get :delete, :id => @project, :folder_id => @folder1.id, :commit => false
get :delete, :params => {:id => @project, :folder_id => @folder1.id, :commit => false}
assert_response :forbidden
end
def test_delete_not_empty
# Permissions OK but the folder is not empty
@role.add_permission! :folder_manipulation
get :delete, :id => @project, :folder_id => @folder1.id, :commit => false
get :delete, :params => {:id => @project, :folder_id => @folder1.id, :commit => false}
assert_response :redirect
assert_include l(:error_folder_is_not_empty), flash[:error]
end
@ -119,7 +119,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_locked
# Permissions OK but the folder is locked
@role.add_permission! :folder_manipulation
get :delete, :id => @project, :folder_id => @folder2.id, :commit => false
get :delete, :params => {:id => @project, :folder_id => @folder2.id, :commit => false}
assert_response :redirect
assert_include l(:error_folder_is_locked), flash[:error]
end
@ -127,7 +127,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_delete_ok
# Empty and not locked folder
@role.add_permission! :folder_manipulation
get :delete, :id => @project, :folder_id => @folder4.id, :commit => false
get :delete, :params => {:id => @project, :folder_id => @folder4.id, :commit => false}
assert_response :redirect
end
@ -135,7 +135,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
# Missing permissions
@folder4.deleted = 1
@folder4.save
get :restore, :id => @project, :folder_id => @folder4.id
get :restore, :params => {:id => @project, :folder_id => @folder4.id}
assert_response :forbidden
end
@ -145,14 +145,14 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
@role.add_permission! :folder_manipulation
@folder4.deleted = 1
@folder4.save
get :restore, :id => @project, :folder_id => @folder4.id
get :restore, :params => {:id => @project, :folder_id => @folder4.id}
assert_response :redirect
end
def test_delete_restore_entries_forbidden
# Missing permissions
get :entries_operation, :id => @project, :delete_entries => 'Delete',
:ids => ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]
get :entries_operation, :params => {:id => @project, :delete_entries => 'Delete',
:ids => ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]}
assert_response :forbidden
end
@ -160,8 +160,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
# Permissions OK but the folder is not empty
@request.env['HTTP_REFERER'] = dmsf_folder_path(:id => @project.id)
@role.add_permission! :view_dmsf_files
get :entries_operation, :id => @project, :delete_entries => 'Delete',
:ids => ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]
get :entries_operation, :params => {:id => @project, :delete_entries => 'Delete',
:ids => ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@folder_link1.id}", "file-link-#{@file_link2.id}"]}
assert_response :redirect
assert_equal flash[:error].to_s, l(:error_folder_is_not_empty)
end
@ -171,8 +171,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
@request.env['HTTP_REFERER'] = dmsf_folder_path(:id => @project.id)
@role.add_permission! :view_dmsf_files
flash[:error] = nil
get :entries_operation, :id => @project, :delete_entries => 'Delete',
:ids => ["file-#{@file1.id}", "file-link-#{@file_link2.id}"]
get :entries_operation, :params => {:id => @project, :delete_entries => 'Delete',
:ids => ["file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
assert_response :redirect
assert_nil flash[:error]
end
@ -181,8 +181,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
# Restore
@role.add_permission! :view_dmsf_files
@request.env['HTTP_REFERER'] = trash_dmsf_path(:id => @project.id)
get :entries_operation, :id => @project, :restore_entries => 'Restore',
:ids => ["file-#{@file1.id}", "file-link-#{@file_link2.id}"]
get :entries_operation, :params => {:id => @project, :restore_entries => 'Restore',
:ids => ["file-#{@file1.id}", "file-link-#{@file_link2.id}"]}
assert_response :redirect
assert_nil flash[:error]
end
@ -190,7 +190,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_show
@role.add_permission! :view_dmsf_files
@role.add_permission! :view_dmsf_folders
get :show, :id => @project.id
get :show, :params => {:id => @project.id}
assert_response :success
assert_select 'tr.dmsf_tree', :count => 0
end
@ -198,7 +198,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_show_tag
@role.add_permission! :view_dmsf_files
@role.add_permission! :view_dmsf_folders
get :show, :id => @project.id, :custom_field_id => 21, :custom_value => 'Technical documentation'
get :show, :params => {:id => @project.id, :custom_field_id => 21, :custom_value => 'Technical documentation'}
assert_response :success
assert_select 'tr.dmsf_tree', :count => 0
end
@ -208,7 +208,7 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
@role.add_permission! :view_dmsf_folders
@manager.pref[:dmsf_tree_view] = '1'
@manager.preference.save
get :show, :id => @project.id
get :show, :params => {:id => @project.id}
assert_response :success
assert_select 'tr.dmsf_tree'
end
@ -216,27 +216,27 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_show_csv
@role.add_permission! :view_dmsf_files
@role.add_permission! :view_dmsf_folders
get :show, id: @project.id, format: 'csv', :settings => { dmsf_columns: %w(id title) }
get :show, :params => {id: @project.id, format: 'csv', :settings => { dmsf_columns: %w(id title) }}
assert_response :success
assert_equal 'text/csv; header=present', @response.content_type
end
def test_new_forbidden
@role.remove_permission! :folder_manipulation
get :new, :id => @project, :parent_id => nil
get :new, :params => {:id => @project, :parent_id => nil}
assert_response :forbidden
end
def test_new
@role.add_permission! :folder_manipulation
get :new, :id => @project, :parent_id => nil
get :new, :params => {:id => @project, :parent_id => nil}
assert_response :success
end
def test_email_entries_email_from
Setting.plugin_redmine_dmsf['dmsf_documents_email_from'] = 'karel.picman@kontron.com'
@role.add_permission! :view_dmsf_files
get :entries_operation, :id => @project, :email_entries => 'Email', :ids => ["file-#{@file1.id}"]
get :entries_operation, :params => {:id => @project, :email_entries => 'Email', :ids => ["file-#{@file1.id}"]}
assert_response :success
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from']
end
@ -244,49 +244,49 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
def test_email_entries_reply_to
Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to'] = 'karel.picman@kontron.com'
@role.add_permission! :view_dmsf_files
get :entries_operation, :id => @project, :email_entries => 'Email', :ids => ["file-#{@file1.id}"]
get :entries_operation, :params => {:id => @project, :email_entries => 'Email', :ids => ["file-#{@file1.id}"]}
assert_response :success
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to']
end
def test_email_entries_links_only
Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = true
Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only'] = '1'
@role.add_permission! :view_dmsf_files
get :entries_operation, :id => @project, :email_entries => 'Email', :ids => ["file-#{@file1.id}"]
get :entries_operation, :params => {:id => @project, :email_entries => 'Email', :ids => ["file-#{@file1.id}"]}
assert_response :success
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_links_only']
end
def test_add_email_forbidden
xhr :get, :add_email, id: @project.id
get :add_email, :params => {id: @project.id}, :xhr => true
assert_response :forbidden
end
def test_add_email
@role.add_permission! :view_dmsf_files
xhr :get, :add_email, id: @project.id
get :add_email, :params => {id: @project.id}, :xhr => true
assert_response :success
end
def test_append_email_forbidden
post :append_email, :id => @project, :user_ids => @project.members.collect{ |m| m.user.id }, :format => 'js'
post :append_email, :params => {:id => @project, :user_ids => @project.members.collect{ |m| m.user.id }, :format => 'js'}
assert_response :forbidden
end
def test_append_email
@role.add_permission! :view_dmsf_files
post :append_email, :id => @project, :user_ids => @project.members.collect{ |m| m.user.id }, :format => 'js'
post :append_email, :params => {:id => @project, :user_ids => @project.members.collect{ |m| m.user.id }, :format => 'js'}
assert_response :success
end
def test_autocomplete_for_user_forbidden
xhr :get, :autocomplete_for_user, id: @project.id
get :autocomplete_for_user, :params => {id: @project.id}, :xhr => true
assert_response :forbidden
end
def test_autocomplete_for_user
@role.add_permission! :view_dmsf_files
xhr :get, :autocomplete_for_user, id: @project
get :autocomplete_for_user, :params => {id: @project}, :xhr => true
assert_response :success
end
@ -294,10 +294,10 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_folders
assert_difference 'DmsfFolder.count', +1 do
post :create, :id => @project.id, :dmsf_folder => {
post :create, :params => {:id => @project.id, :dmsf_folder => {
:title => 'New folder',
:description => 'Unit tests'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project, :folder_id => nil)
end
@ -306,10 +306,10 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_folders
assert_difference 'DmsfFolder.count', +1 do
post :create, :id => @project.id, :parent_id => @folder1.id, :dmsf_folder => {
post :create, :params => {:id => @project.id, :parent_id => @folder1.id, :dmsf_folder => {
:title => 'New folder',
:description => 'Unit tests'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project, :folder_id => @folder1)
end

View File

@ -57,39 +57,39 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
def test_show_file_ok
# Permissions OK
@role.add_permission! :view_dmsf_files
get :show, :id => @file.id
get :show, :params => {:id => @file.id}
assert_response :success
end
def test_show_file_forbidden
# Missing permissions
get :show, :id => @file.id
get :show, :params => {:id => @file.id}
assert_response :forbidden
end
def test_view_file_ok
# Permissions OK
@role.add_permission! :view_dmsf_files
get :view, :id => @file.id
get :view, :params => {:id => @file.id}
assert_response :success
end
def test_view_file_forbidden
# Missing permissions
get :view, :id => @file.id
get :view, :params => {:id => @file.id}
assert_response :forbidden
end
def delete_forbidden
# Missing permissions
delete @file, :commit => false
delete @file, :params => {:commit => false}
assert_response :forbidden
end
def delete_locked
# Permissions OK but the file is locked
@role.add_permission! :file_delete
delete @file, :commit => false
delete @file, :params => {:commit => false}
assert_response :redirect
assert_include l(:error_file_is_locked), flash[:error]
end
@ -98,19 +98,19 @@ class DmsfFilesControllerTest < RedmineDmsf::Test::TestCase
# Permissions OK and not locked
flash[:error].clear
@file.unlock!
delete @file, :commit => false
delete @file, :params => {:commit => false}
assert_response :redirect
assert_equal 0, flash[:error].size
end
def test_obsolete_revision_ok
@role.add_permission! :file_manipulation
get :obsolete_revision, :id => @file.last_revision.id
get :obsolete_revision, :params => {:id => @file.last_revision.id}
assert_redirected_to :action => 'show', :id => @file
end
def test_obsolete_revision_missing_permissions
get :obsolete_revision, :id => @file.last_revision.id
get :obsolete_revision, :params => {:id => @file.last_revision.id}
assert :forbiden
end

View File

@ -72,127 +72,127 @@ class DmsfFilesCopyControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_admin
@request.session[:user_id] = @user_admin.id
get :new, :id => @file1.id
get :new, :params => {:id => @file1.id}
assert_response :success
assert_template 'new'
end
def test_authorize_non_member
@request.session[:user_id] = @user_non_member.id
get :new, :id => @file1.id
get :new, :params => {:id => @file1.id}
assert_response :forbidden
end
def test_authorize_member_no_module
@project1.disable_module!(:dmsf)
get :new, :id => @file1.id
get :new, :params => {:id => @file1.id}
assert_response :forbidden
end
def test_authorize_forbidden
@role_manager.remove_permission! :file_manipulation
get :new, :id => @file1.id
get :new, :params => {:id => @file1.id}
assert_response :forbidden
end
def test_target_folder
get :new, :id => @file1.id, :target_folder_id => @folder1.id
get :new, :params => {:id => @file1.id, :target_folder_id => @folder1.id}
assert_response :success
assert_template 'new'
end
def test_target_folder_forbidden
@role_manager.remove_permission! :view_dmsf_folders
get :new, :id => @file1.id, :target_folder_id => @folder1.id
get :new, :params => {:id => @file1.id, :target_folder_id => @folder1.id}
assert_response :not_found
end
def test_target_project
get :new, :id => @file1.id, :target_project_id => @project1.id
get :new, :params => {:id => @file1.id, :target_project_id => @project1.id}
assert_response :success
assert_template 'new'
end
def test_new
get :new, :id => @file1.id
get :new, :params => {:id => @file1.id}
assert_response :success
assert_template 'new'
end
def test_copy
post :copy, :id => @file1.id, :target_project_id => @project1.id, :target_folder_id => @folder1.id
post :copy, :params => {:id => @file1.id, :target_project_id => @project1.id, :target_folder_id => @folder1.id}
assert_response :redirect
assert_nil flash[:error]
end
def test_copy_the_same_target
post :copy, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
post :copy, :params => {:id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder}
assert_equal flash[:error], l(:error_target_folder_same)
assert_redirected_to :action => 'new', :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
end
def test_copy_to_locked_folder
@folder1.lock!
post :copy, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id
post :copy, :params => {:id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id}
assert_response :forbidden
end
def test_copy_to_dmsf_not_enabled
post :copy, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :copy, :params => {:id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :forbidden
end
def test_copy_to_dmsf_enabled
@project5.enable_module!(:dmsf)
post :copy, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :copy, :params => {:id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :redirect
assert_nil flash[:error]
end
def test_copy_to_as_non_member
post :copy, :id => @file1.id, :target_project_id => @project2.id, :target_folder_id => nil
post :copy, :params => {:id => @file1.id, :target_project_id => @project2.id, :target_folder_id => nil}
assert_response :forbidden
end
def test_move
post :move, :id => @file1.id, :target_project_id => @project1.id, :target_folder_id => @folder1.id
post :move, :params => {:id => @file1.id, :target_project_id => @project1.id, :target_folder_id => @folder1.id}
assert_response :redirect
assert_nil flash[:error]
end
def test_move_the_same_target
post :move, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
post :move, :params => {:id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder}
assert_equal flash[:error], l(:error_target_folder_same)
assert_redirected_to :action => 'new', :target_project_id => @file1.project.id, :target_folder_id => @file1.dmsf_folder
end
def test_move_to_locked
@file1.lock!
post :move, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id
post :move, :params => {:id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id}
assert_response :redirect
assert_equal l(:error_file_is_locked), flash[:error]
end
def test_move_to_locked_folder
@folder1.lock!
post :move, :id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id
post :move, :params => {:id => @file1.id, :target_project_id => @file1.project.id, :target_folder_id => @folder1.id}
assert_response :forbidden
end
def test_move_to_dmsf_not_enabled
post :move, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :move, :params => {:id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :forbidden
end
def test_move_to_dmsf_enabled
@project5.enable_module!(:dmsf)
post :move, :id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :move, :params => {:id => @file1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :redirect
assert_nil flash[:error]
end
def test_move_to_as_non_member
post :move, :id => @file1.id, :target_project_id => @project2.id, :target_folder_id => nil
post :move, :params => {:id => @file1.id, :target_project_id => @project2.id, :target_folder_id => nil}
assert_response :forbidden
end

View File

@ -46,20 +46,20 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase
end
def test_new
xhr :get, :new, :project_id => @project1, :format => 'js'
get :new, :params => {:project_id => @project1, :format => 'js'}, :xhr => true
assert_response :success
assert_template 'new'
assert_equal 'text/javascript', response.content_type
end
def test_autocomplete_for_user
xhr :get, :autocomplete_for_user, :project_id => @project1, :q => 'smi', :format => 'js'
get :autocomplete_for_user, :params => {:project_id => @project1, :q => 'smi', :format => 'js'}, :xhr => true
assert_response :success
assert_include 'John Smith', response.body
end
def test_append
xhr :get, :new, :project_id => @project1, :user_ids => [@manager.id], :format => 'js'
get :new, :params => {:project_id => @project1, :user_ids => [@manager.id], :format => 'js'}, :xhr => true
assert_response :success
assert_template 'new'
assert_equal 'text/javascript', response.content_type

View File

@ -73,55 +73,55 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_admin
@request.session[:user_id] = @user_admin.id
get :new, :id => @folder1.id
get :new, :params => {:id => @folder1.id}
assert_response :success
assert_template 'new'
end
def test_authorize_non_member
@request.session[:user_id] = @user_non_member.id
get :new, :id => @folder1.id
get :new, :params => {:id => @folder1.id}
assert_response :forbidden
end
def test_authorize_member_no_module
@project1.disable_module!(:dmsf)
get :new, :id => @folder1.id
get :new, :params => {:id => @folder1.id}
assert_response :forbidden
end
def test_authorize_forbidden
@role_manager.remove_permission! :folder_manipulation
get :new, :id => @folder1.id
get :new, :params => {:id => @folder1.id}
assert_response :forbidden
end
def test_target_folder
get :new, :id => @folder1.id, :target_folder_id => @folder2.id
get :new, :params => {:id => @folder1.id, :target_folder_id => @folder2.id}
assert_response :success
assert_template 'new'
end
def test_target_folder_forbidden
@role_manager.remove_permission! :view_dmsf_folders
get :new, :id => @folder1.id, :target_folder_id => @folder2.id
get :new, :params => {:id => @folder1.id, :target_folder_id => @folder2.id}
assert_response :forbidden
end
def test_target_project
get :new, :id => @folder1.id, :target_project_id => @project1.id
get :new, :params => {:id => @folder1.id, :target_project_id => @project1.id}
assert_response :success
assert_template 'new'
end
def test_new
get :new, :id => @folder1.id
get :new, :params => {:id => @folder1.id}
assert_response :success
assert_template 'new'
end
def test_copy
post :copy, :id => @folder1.id, :target_project_id => @project1.id, :target_folder_id => @folder6.id
post :copy, :params => {:id => @folder1.id, :target_project_id => @project1.id, :target_folder_id => @folder6.id}
assert_response :redirect
assert_nil flash[:error]
end
@ -130,7 +130,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
@request.session[:user_id] = @user_admin.id
@project2.enable_module!(:dmsf)
assert_equal @project1.id, @folder1.project_id
post :copy, :id => @folder1.id, :target_project_id => @project2.id
post :copy, :params => {:id => @folder1.id, :target_project_id => @project2.id}
assert_response :redirect
assert_nil flash[:error]
# Check all childs' project ID
@ -141,71 +141,71 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
end
def test_copy_the_same_target
post :copy, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder
post :copy, :params => {:id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder}
assert_equal flash[:error], l(:error_target_folder_same)
assert_redirected_to :action => 'new', :target_project_id => @folder1.project.id,
:target_folder_id => @folder1.dmsf_folder
end
def test_copy_to_locked_folder
post :copy, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder2.id
post :copy, :params => {:id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder2.id}
assert_response :forbidden
end
def test_copy_to_dmsf_not_enabled
post :copy, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :copy, :params => {:id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :forbidden
end
def test_copy_to_dmsf_enabled
@project5.enable_module!(:dmsf)
post :copy, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :copy, :params => {:id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :redirect
assert_nil flash[:error]
end
def test_copy_to_as_non_member
post :copy, :id => @folder1.id, :target_project_id => @project2.id, :target_folder_id => nil
post :copy, :params => {:id => @folder1.id, :target_project_id => @project2.id, :target_folder_id => nil}
assert_response :forbidden
end
def test_move
post :move, :id => @folder1.id, :target_project_id => @project1.id, :target_folder_id => @folder6.id
post :move, :params => {:id => @folder1.id, :target_project_id => @project1.id, :target_folder_id => @folder6.id}
assert_response :redirect
assert_nil flash[:error]
end
def test_move_the_same_target
post :move, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder
post :move, :params => {:id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder}
assert_equal flash[:error], l(:error_target_folder_same)
assert_redirected_to :action => 'new', :target_project_id => @folder1.project.id, :target_folder_id => @folder1.dmsf_folder
end
def test_move_to_locked
@folder1.lock!
post :move, :id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder2.id
post :move, :params => {:id => @folder1.id, :target_project_id => @folder1.project.id, :target_folder_id => @folder2.id}
assert_response :forbidden
end
def test_move_to_locked_folder
post :move, :id => @folder1.id, :target_project_id => @folder2.project.id, :target_folder_id => @folder2.id
post :move, :params => {:id => @folder1.id, :target_project_id => @folder2.project.id, :target_folder_id => @folder2.id}
assert_response :forbidden
end
def test_move_to_dmsf_not_enabled
post :move, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :move, :params => {:id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :forbidden
end
def test_move_to_dmsf_enabled
@project5.enable_module!(:dmsf)
post :move, :id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil
post :move, :params => {:id => @folder1.id, :target_project_id => @project5.id, :target_folder_id => nil}
assert_response :redirect
assert_nil flash[:error]
end
def test_move_to_as_non_member
post :move, :id => @folder1.id, :target_project_id => @project2.id, :target_folder_id => nil
post :move, :params => {:id => @folder1.id, :target_project_id => @project2.id, :target_folder_id => nil}
assert_response :forbidden
end
@ -213,7 +213,7 @@ class DmsfFoldersCopyControllerTest < RedmineDmsf::Test::TestCase
@request.session[:user_id] = @user_admin.id
@project2.enable_module!(:dmsf)
assert_equal @project1.id, @folder1.project_id
post :move, :id => @folder1.id, :target_project_id => @project2.id
post :move, :params => {:id => @folder1.id, :target_project_id => @project2.id}
assert_response :redirect
assert_nil flash[:error]
# Check all childs' project ID

View File

@ -73,27 +73,27 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_admin
@request.session[:user_id] = @user_admin.id
get :new, :project_id => @project1.id
get :new, :params => {:project_id => @project1.id}
assert_response :success
assert_template 'new'
end
def test_authorize_non_member
@request.session[:user_id] = @user_non_member.id
get :new, :project_id => @project2.id
get :new, :params => {:project_id => @project2.id}
assert_response :forbidden
end
def test_authorize_member_ok
@request.session[:user_id] = @user_member.id
get :new, :project_id => @project1.id
get :new, :params => {:project_id => @project1.id}
assert_response :success
end
def test_authorize_member_no_module
# Without the module
@project1.disable_module!(:dmsf)
get :new, :project_id => @project1.id
get :new, :params => {:project_id => @project1.id}
assert_response :forbidden
end
@ -101,12 +101,12 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
# Without permissions
@project1.enable_module!(:dmsf)
@role_manager.remove_permission! :file_manipulation
get :new, :project_id => @project1.id
get :new, :params => {:project_id => @project1.id}
assert_response :forbidden
end
def test_new
get :new, :project_id => @project1.id, :type => 'link_to'
get :new, :params => {:project_id => @project1.id, :type => 'link_to'}
assert_response :success
assert_select 'label', { :text => l(:label_target_project) }
end
@ -115,7 +115,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
member = Member.where(:user_id => @user_member.id, :project_id => @project1.id).first
assert member
member.update_attribute :dmsf_fast_links, true
get :new, :project_id => @project1.id, :type => 'link_to'
get :new, :params => {:project_id => @project1.id, :type => 'link_to'}
assert_response :success
assert_select 'label', { :count => 0, :text => l(:label_target_project) }
end
@ -123,7 +123,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_file_link_from_f1
# 1. File link in a folder from another folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project2.id,
:dmsf_folder_id => @folder1.id,
@ -131,7 +131,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
:target_folder_id => @folder3.id,
:name => 'file_link',
:type => 'link_from'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
@ -139,7 +139,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_file_link_from_f2
# 2. File link in a folder from another root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:dmsf_folder_id => @folder1.id,
:target_project_id => @project2.id,
@ -147,7 +147,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
:target_folder_id => 'Documents',
:name => 'file_link',
:type => 'link_from'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
@ -155,14 +155,14 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_file_link_from_f3
# 3. File link in a root folder from another folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project2.id,
:target_file_id => @file6.id,
:target_folder_id => @folder3.id,
:name => 'file_link',
:type => 'link_from'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
@ -170,28 +170,28 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_file_link_from_f4
# 4. File link in a root folder from another root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project2.id,
:target_file_id => @file2.id,
:name => 'file_link',
:type => 'link_from'
}
end
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
def test_create_folder_link_from_d1
# 1. Folder link in a folder from another folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:dmsf_folder_id => @folder1.id,
:target_project_id => @project2.id,
:target_folder_id => @folder3.id,
:name => 'folder_link',
:type => 'link_from'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
@ -199,13 +199,13 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_folder_link_from_d2
# 2. Folder link in a folder from another root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:dmsf_folder_id => @folder1.id,
:target_project_id => @project2.id,
:name => 'folder_link',
:type => 'link_from'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
@ -213,13 +213,13 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_folder_link_from_d3
# 3. Folder link in a root folder from another folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project2.id,
:target_folder_id => @folder3.id,
:name => 'folder_link',
:type => 'link_from'
}
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
@ -227,35 +227,35 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
def test_create_folder_link_from_d4
# 4. Folder link in a root folder from another root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project2.id,
:name => 'folder_link',
:type => 'link_from'
}
end
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
def test_create_file_link_to_f1
# 1. File link to a root folder from another folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:dmsf_file_id => @file1.id,
:target_project_id => @project2.id,
:target_folder_id => @folder3.id,
:name => 'file_link',
:type => 'link_to'
}
end
}}
end
assert_redirected_to dmsf_file_path(@file1)
end
def test_create_file_link_to_f2
# 2. File link to a folder from another folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project2.id,
:dmsf_folder_id => @folder3.id,
:target_project_id => @project1.id,
@ -263,85 +263,85 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
:dmsf_file_id => @file6.id,
:name => 'file_link',
:type => 'link_to'
}
end
}}
end
assert_redirected_to dmsf_file_path(@file6)
end
def test_create_file_link_to_f3
# 3. File link to a root folder from another root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project2.id,
:target_project_id => @project1.id,
:dmsf_file_id => @file6.id,
:name => 'file_link',
:type => 'link_to'
}
end
}}
end
assert_redirected_to dmsf_file_path(@file6)
end
def test_create_file_link_to_f4
# 4. File link to a folder from another root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project2.id,
:dmsf_folder_id => @folder3.id,
:target_project_id => @project1.id,
:dmsf_file_id => @file6.id,
:name => 'file_link',
:type => 'link_to'
}
end
}}
end
assert_redirected_to dmsf_file_path(@file6)
end
def test_create_external_link_from
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project1.id,
:name => 'file_link',
:external_link => 'true',
:type => 'link_from'
}
end
}}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
def test_create_folder_link_to_f1
# 1. Folder link to a root folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:dmsf_folder_id => @folder1.id,
:target_project_id => @project2.id,
:name => 'folder_link',
:type => 'link_to'
}
end
}}
end
assert_redirected_to edit_dmsf_path(:id => @project1.id, :folder_id => @folder1.id)
end
def test_create_folder_link_to_f2
# 2. Folder link to a folder
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
post :create, :params => {:dmsf_link => {
:project_id => @project1.id,
:dmsf_folder_id => @folder1.id,
:target_project_id => @project2.id,
:target_folder_id => @folder3.id,
:name => 'folder_link',
:type => 'link_to'
}
end
}}
end
assert_redirected_to edit_dmsf_path(:id => @project1.id, :folder_id => @folder1.id)
end
def test_destroy
assert_difference 'DmsfLink.visible.count', -1 do
delete :destroy, :project_id => @project1.id, :id => @file_link.id
delete :destroy, :params => {:project_id => @project1.id, :id => @file_link.id}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
@ -350,7 +350,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
# Missing permissions
@request.env['HTTP_REFERER'] = trash_dmsf_path(:id => @project1.id)
@role_manager.remove_permission! :file_manipulation
get :restore, :project_id => @project1.id, :id => @file_link.id
get :restore, :params => {:project_id => @project1.id, :id => @file_link.id}
assert_response :forbidden
end
@ -358,7 +358,7 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
# Permissions OK
@request.env['HTTP_REFERER'] = trash_dmsf_path(:id => @project1.id)
@role_manager.add_permission! :file_manipulation
get :restore, :project_id => @project1.id, :id => @file_link.id
get :restore, :params => {:project_id => @project1.id, :id => @file_link.id}
assert_response :redirect
end

View File

@ -35,17 +35,17 @@ class DmsfPublicUrlsControllerTest < RedmineDmsf::Test::TestCase
end
def test_show_valid_url
get :show, :token => 'd8d33e21914a433b280fdc94450ee212'
get :show, :params => {:token => 'd8d33e21914a433b280fdc94450ee212'}
assert_response :success
end
def test_show_url_width_invalid_token
get :show, :token => 'f8d33e21914a433b280fdc94450ee212'
get :show, :params => {:token => 'f8d33e21914a433b280fdc94450ee212'}
assert_response :not_found
end
def test_show_url_that_has_expired
get :show, :token => 'e8d33e21914a433b280fdc94450ee212'
get :show, :params => {:token => 'e8d33e21914a433b280fdc94450ee212'}
assert_response :not_found
end

View File

@ -47,8 +47,8 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
# Member
@request.session[:user_id] = @user_member.id
@role_manager.add_permission! :user_preferences
post :user_pref_save, :id => @project.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(@project, :tab => 'dmsf')
assert_not_nil flash[:notice]
assert_equal flash[:notice], l(:notice_your_preferences_were_saved)
@ -57,8 +57,8 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
def test_user_pref_save_member_forbidden
# Member
@request.session[:user_id] = @user_member.id
post :user_pref_save, :id => @project.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
end
@ -66,8 +66,8 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
# Non Member
@request.session[:user_id] = @user_non_member.id
@role_manager.add_permission! :user_preferences
post :user_pref_save, :id => @project.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
end
@ -75,8 +75,8 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
# Admin - non member
@request.session[:user_id] = @user_admin.id
@role_manager.add_permission! :user_preferences
post :user_pref_save, :id => @project.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(@project, :tab => 'dmsf')
assert_not_nil flash[:warning]
assert_equal flash[:warning], l(:user_is_not_project_member)

View File

@ -85,7 +85,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_member
# Non member
@request.session[:user_id] = @user_non_member.id
get :index, :project_id => @project1.id
get :index, :params => {:project_id => @project1.id}
assert_response :forbidden
end
@ -97,7 +97,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_projects
# Project
get :index, :project_id => @project1.id
get :index, :params => {:project_id => @project1.id}
assert_response :success
assert_template 'index'
end
@ -105,23 +105,23 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_authorize_manage_workflows_forbidden
# Without permissions
@role_manager.remove_permission! :manage_workflows
get :index, :project_id => @project1.id
get :index, :params => {:project_id => @project1.id}
assert_response :forbidden
end
def test_authorization_file_approval_ok
@role_manager.add_permission! :file_approval
@revision2.dmsf_workflow_id = @wf1.id
get :start, :id => @revision2.dmsf_workflow_id,
:dmsf_file_revision_id => @revision2.id
get :start, :params => {:id => @revision2.dmsf_workflow_id,
:dmsf_file_revision_id => @revision2.id}
assert_response :redirect
end
def test_authorization_file_approval_forbidden
@role_manager.remove_permission! :file_approval
@revision2.dmsf_workflow_id = @wf1.id
get :start, :id => @revision2.dmsf_workflow_id,
:dmsf_file_revision_id => @revision2.id
get :start, :params => {:id => @revision2.dmsf_workflow_id,
:dmsf_file_revision_id => @revision2.id}
assert_response :forbidden
end
@ -129,7 +129,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
# Without the module
@role_manager.add_permission! :file_manipulation
@project1.disable_module!(:dmsf)
get :index, :project_id => @project1.id
get :index, :params => {:project_id => @project1.id}
assert_response :forbidden
end
@ -141,52 +141,52 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_index_project
get :index, :project_id => @project1.id
get :index, :params => {:project_id => @project1.id}
assert_response :success
assert_template 'index'
end
def test_new
get :new, :project_id => @project1.id
get :new, :params => {:project_id => @project1.id}
assert_response :success
assert_template 'new'
end
def test_lock
put :update, :id => @wf1.id, :dmsf_workflow => { :status => DmsfWorkflow::STATUS_LOCKED }
put :update, :params => {:id => @wf1.id, :dmsf_workflow => { :status => DmsfWorkflow::STATUS_LOCKED }}
@wf1.reload
assert @wf1.locked?, "#{@wf1.name} status is #{@wf1.status}"
end
def test_unlock
@request.session[:user_id] = @user_admin.id
put :update, :id => @wf3.id, :dmsf_workflow => { :status => DmsfWorkflow::STATUS_ACTIVE }
put :update, :params => {:id => @wf3.id, :dmsf_workflow => { :status => DmsfWorkflow::STATUS_ACTIVE }}
@wf3.reload
assert @wf3.active?, "#{@wf3.name} status is #{@wf3.status}"
end
def test_show
get :show, :id => @wf1.id
get :show, :params => {:id => @wf1.id}
assert_response :success
assert_template 'show'
end
def test_create
assert_difference 'DmsfWorkflow.count', +1 do
post :create, :dmsf_workflow => {:name => 'wf4', :project_id => @project1.id}
post :create, :params => {:dmsf_workflow => {:name => 'wf4', :project_id => @project1.id}}
end
assert_redirected_to settings_project_path(@project1, :tab => 'dmsf_workflow')
end
def test_update
put :update, :id => @wf1.id, :dmsf_workflow => {:name => 'wf1a'}
put :update, :params => {:id => @wf1.id, :dmsf_workflow => {:name => 'wf1a'}}
@wf1.reload
assert_equal 'wf1a', @wf1.name
end
def test_destroy
assert_difference 'DmsfWorkflow.count', -1 do
delete :destroy, :id => @wf1.id
delete :destroy, :params => {:id => @wf1.id}
end
assert_redirected_to settings_project_path(@project1, :tab => 'dmsf_workflow')
assert_equal 0, DmsfWorkflowStep.where(:dmsf_workflow_id => @wf1.id).all.count
@ -194,8 +194,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_add_step
assert_difference 'DmsfWorkflowStep.count', +1 do
post :add_step, :commit => l(:dmsf_or), :step => 1, :name => '1st step', :id => @wf1.id,
:user_ids => [@user_non_member.id]
post :add_step, :params => {:commit => l(:dmsf_or), :step => 1, :name => '1st step', :id => @wf1.id,
:user_ids => [@user_non_member.id]}
end
assert_response :success
ws = DmsfWorkflowStep.order(id: :desc).first
@ -209,7 +209,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_remove_step
n = DmsfWorkflowStep.where(:dmsf_workflow_id => @wf1.id, :step => 1).count
assert_difference 'DmsfWorkflowStep.count', -n do
delete :remove_step, :step => @wfs1.id, :id => @wf1.id
delete :remove_step, :params => {:step => @wfs1.id, :id => @wf1.id}
end
assert_response :redirect
ws = DmsfWorkflowStep.where(:dmsf_workflow_id => @wf1.id).order(:id =>:asc).first
@ -217,7 +217,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_reorder_steps_to_lower
put :reorder_steps, :step => 1, :id => @wf1.id, :dmsf_workflow => {:position => 2}
put :reorder_steps, :params => {:step => 1, :id => @wf1.id, :dmsf_workflow => {:position => 2}}
assert_response :success
@wfs1.reload
@wfs2.reload
@ -232,7 +232,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_reorder_steps_to_lowest
put :reorder_steps, :step => 1, :id => @wf1.id, :dmsf_workflow => {:position => 3}
put :reorder_steps, :params => {:step => 1, :id => @wf1.id, :dmsf_workflow => {:position => 3}}
assert_response :success
@wfs1.reload
@wfs2.reload
@ -247,7 +247,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_reorder_steps_to_higher
put :reorder_steps, :step => 3, :id => @wf1.id, :dmsf_workflow => {:position => 2}
put :reorder_steps, :params => {:step => 3, :id => @wf1.id, :dmsf_workflow => {:position => 2}}
assert_response :success
@wfs1.reload
@wfs2.reload
@ -262,7 +262,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_reorder_steps_to_highest
put :reorder_steps, :step => 3, :id => @wf1.id, :dmsf_workflow => {:position => '1'}
put :reorder_steps, :params => {:step => 3, :id => @wf1.id, :dmsf_workflow => {:position => '1'}}
assert_response :success
@wfs1.reload
@wfs2.reload
@ -278,14 +278,14 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_action_approve
post(
:new_action,
:new_action, :params => {
:commit => l(:button_submit),
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision1.id,
:step_action => DmsfWorkflowStepAction::ACTION_APPROVE,
:user_id => nil,
:note => '')
:note => ''})
assert_redirected_to dmsf_folder_path(:id => @project1.id)
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
@ -294,13 +294,13 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_action_reject
post(
:new_action,
:new_action, :params => {
:commit => l(:button_submit),
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision2.id,
:step_action => DmsfWorkflowStepAction::ACTION_REJECT,
:note => 'Rejected because...')
:note => 'Rejected because...'})
assert_response :redirect
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
@ -308,14 +308,13 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_action
xhr(
:get,
:action,
get(
:action, :xhr => true, :params => {
:project_id => @project1.id,
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision2.id,
:title => l(:title_waiting_for_approval))
:title => l(:title_waiting_for_approval)})
assert_response :success
assert_match(/ajax-modal/, response.body)
assert_template 'action'
@ -323,13 +322,13 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_new_action_delegate
post(
:new_action,
:new_action, :params => {
:commit => l(:button_submit),
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision2.id,
:step_action => @user_admin.id * 10,
:note => 'Delegated because...')
:note => 'Delegated because...'})
assert_redirected_to dmsf_folder_path(:id => @project1.id)
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
@ -339,13 +338,12 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_assign
xhr(
:get,
:assign,
get(
:assign, :xhr => true, :params => {
:project_id => @project1.id,
:id => @wf1.id,
:dmsf_file_revision_id => @revision1.id,
:title => l(:label_dmsf_wokflow_action_assign))
:title => l(:label_dmsf_wokflow_action_assign)})
assert_response :success
assert_match(/ajax-modal/, response.body)
assert_template 'assign'
@ -353,24 +351,24 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_start
@revision2.dmsf_workflow_id = @wf1.id
get :start, :id => @revision2.dmsf_workflow_id, :dmsf_file_revision_id => @revision2.id
get :start, :params => {:id => @revision2.dmsf_workflow_id, :dmsf_file_revision_id => @revision2.id}
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
def test_assignment
post(
:assignment,
:assignment, :params => {
:commit => l(:button_submit),
:id => @wf1.id,
:dmsf_workflow_id => @wf1.id,
:dmsf_file_revision_id => @revision2.id,
:action => 'assignment',
:project_id => @project1.id)
:project_id => @project1.id})
assert_response :redirect
end
def test_update_step_name
put :update_step, id: @wf1.id, step: @wfs2.step, dmsf_workflow: { step_name: 'new_name'}
put :update_step, :params => {id: @wf1.id, step: @wfs2.step, dmsf_workflow: { step_name: 'new_name'}}
assert_response :redirect
# All steps in the same step must be renamed
@wfs2.reload
@ -383,22 +381,22 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
end
def test_update_step_operators
put :update_step,
put :update_step, :params => {
:id => @wf1,
:step => '1',
:operator_step => { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s },
:assignee => { @wfs1.id.to_s => @wfs1.user_id.to_s }
:assignee => { @wfs1.id.to_s => @wfs1.user_id.to_s }}
assert_response :redirect
@wfs1.reload
assert_equal @wfs1.operator, DmsfWorkflowStep::OPERATOR_OR
end
def test_update_step_assignee
put :update_step,
put :update_step, :params => {
:id => @wf1,
:step => '1',
:operator_step => { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s },
:assignee => { @wfs1.id.to_s => @user_non_member.id.to_s }
:assignee => { @wfs1.id.to_s => @user_non_member.id.to_s }}
assert_response :redirect
@wfs1.reload
assert_equal @user_non_member.id, @wfs1.user_id
@ -407,7 +405,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_delete_step
name = @wfs2.name
assert_difference 'DmsfWorkflowStep.count', -1 do
delete :delete_step, :id => @wf1, :step => @wfs2.id
delete :delete_step, :params => {:id => @wf1, :step => @wfs2.id}
end
@wfs3.reload
assert_equal @wfs3.name, name

View File

@ -67,8 +67,8 @@ class IssuesControllerTest < RedmineDmsf::Test::TestCase
main_system_folder = @issue1.main_system_folder
assert main_system_folder
assert_equal @project1.id, main_system_folder.project_id
put :update, id: @issue1.id, issue: { project_id: @project2.id, tracker_id: '1', priority_id: '6',
category_id: '3' }
put :update, :params => {id: @issue1.id, issue: { project_id: @project2.id, tracker_id: '1', priority_id: '6',
category_id: '3' }}
assert_redirected_to action: 'show', id: @issue1.id
@issue1.reload
assert_equal @project2.id, @issue1.project.id

View File

@ -38,7 +38,7 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
end
def test_page_with_open_approvals_one_approval
DmsfFileRevision.delete_all(id: 5)
DmsfFileRevision.where(id: 5).delete_all
@user_member.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
@user_member.pref.save!
get :page

View File

@ -95,7 +95,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
def test_upload_document
@role.add_permission! :file_manipulation
#curl --data-binary "@cat.gif" -H "Content-Type: application/octet-stream" -X POST -u ${1}:${2} http://localhost:3000/projects/12/dmsf/upload.xml?filename=cat.gif
post "/projects/#{@project1.id}/dmsf/upload.xml?filename=test.txt&key=#{@token.value}", 'File content', {"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_equal 'application/xml', response.content_type
#<?xml version="1.0" encoding="UTF-8"?>
@ -120,7 +120,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
</uploaded_file>
</attachments>}
assert_difference 'DmsfFileRevision.count', +1 do
post "/projects/#{@project1.id}/dmsf/commit.xml?key=#{@token.value}", payload, {"CONTENT_TYPE" => 'application/xml'}
post "/projects/#{@project1.id}/dmsf/commit.xml?key=#{@token.value}", :params => payload, :headers => {"CONTENT_TYPE" => 'application/xml'}
end
#<?xml version="1.0" encoding="UTF-8"?>
#<dmsf_files total_count="1" type="array">
@ -138,7 +138,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
def test_delete_file
@role.add_permission! :file_delete
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", {'CONTENT_TYPE' => 'application/xml'}
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
@file1.reload
assert_equal DmsfFile::STATUS_DELETED, @file1.deleted
@ -148,14 +148,14 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
def test_delete_file_no_permissions
token = Token.create!(:user => @jsmith, :action => 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml
delete "/dmsf/files/#{@file1.id}.xml?key=#{token.value}", {'CONTENT_TYPE' => 'application/xml'}
delete "/dmsf/files/#{@file1.id}.xml?key=#{token.value}", :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :forbidden
end
def test_delete_folder_commit_yes
@role.add_permission! :file_delete
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/dmsf/files/196118.xml&commit=yes
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}&commit=yes", {'CONTENT_TYPE' => 'application/xml'}
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}&commit=yes", :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
assert_nil DmsfFile.find_by(id: @file1.id)
end
@ -166,7 +166,7 @@ class DmsfFileApiTest < RedmineDmsf::Test::IntegrationTest
@file1.lock!
User.current = @jsmith
# 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}", {'CONTENT_TYPE' => 'application/xml'}
delete "/dmsf/files/#{@file1.id}.xml?key=#{@token.value}", :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response 422
# <?xml version="1.0" encoding="UTF-8"?>
# <errors type="array">

View File

@ -151,7 +151,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
<description>A folder created via REST API</description>
<dmsf_folder_id/>
</dmsf_folder>}
post "/projects/#{@project1.id}/dmsf/create.xml?key=#{token.value}", payload, {'CONTENT_TYPE' => 'application/xml'}
post "/projects/#{@project1.id}/dmsf/create.xml?key=#{token.value}", :params => payload, :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
# <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_folder>
@ -242,7 +242,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
<title>rest_api</title>
<description>A folder updated via REST API</description>
</dmsf_folder>}
post "/projects/#{@project1.id}/dmsf/save.xml?folder_id=1&key=#{token.value}", payload, {'CONTENT_TYPE' => 'application/xml'}
post "/projects/#{@project1.id}/dmsf/save.xml?folder_id=1&key=#{token.value}", :params => payload, :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
# <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_folder>
@ -258,7 +258,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
token = Token.create!(:user => @jsmith, :action => 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.id}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}",
{'CONTENT_TYPE' => 'application/xml'}
:headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
@folder1.reload
assert_equal DmsfFolder::STATUS_DELETED, @folder1.deleted
@ -269,7 +269,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
token = Token.create!(:user => @jsmith, :action => 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.id}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}",
{'CONTENT_TYPE' => 'application/xml'}
:headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :forbidden
end
@ -278,7 +278,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
token = Token.create!(:user => @jsmith, :action => 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.id}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}&commit=yes",
{'CONTENT_TYPE' => 'application/xml'}
:headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
assert_nil DmsfFolder.find_by(id: @folder1.id)
end
@ -291,7 +291,7 @@ class DmsfFolderApiTest < RedmineDmsf::Test::IntegrationTest
token = Token.create!(:user => @jsmith, :action => 'api')
# curl -v -H "Content-Type: application/xml" -X DELETE -u ${1}:${2} http://localhost:3000/projects/1/dmsf/delete.xml?folder_id=3
delete "/projects/#{@project1.id}/dmsf/delete.xml?key=#{token.value}&folder_id=#{@folder1.id}",
{'CONTENT_TYPE' => 'application/xml'}
:headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response 422
# <?xml version="1.0" encoding="UTF-8"?>
# <errors type="array">

View File

@ -59,7 +59,7 @@ class DmsfLinkApiTest < RedmineDmsf::Test::IntegrationTest
<external_url></external_url>
<name>#{name}</name>
</dmsf_link>}
post "/dmsf_links.xml?key=#{token.value}", payload, {'CONTENT_TYPE' => 'application/xml'}
post "/dmsf_links.xml?key=#{token.value}", :params => payload, :headers => {'CONTENT_TYPE' => 'application/xml'}
assert_response :success
# <?xml version="1.0" encoding="UTF-8"?>
# <dmsf_link>

View File

@ -32,18 +32,18 @@ class DmsfWebdavCustomMiddlewareTest < RedmineDmsf::Test::IntegrationTest
end
def test_options_for_root_path
xml_http_request :options, '/'
process :options, '/'
assert_response defined?(EasyExtensions) ? :method_not_allowed : :not_found
end
def test_options_for_dmsf_root_path
xml_http_request :options, '/dmsf'
process :options, '/dmsf'
assert_response :success
end
def test_webdav_not_enabled
Setting.plugin_redmine_dmsf['dmsf_webdav'] = nil
xml_http_request :options, '/dmsf/webdav'
process :options, '/dmsf/webdav'
assert_response :not_found
end

View File

@ -83,51 +83,51 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
end
def test_failed_authentication_global
delete '/dmsf/webdav', nil, credentials('admin', 'badpassword')
delete '/dmsf/webdav', :params => nil, :headers => credentials('admin', 'badpassword')
assert_response :unauthorized
end
def test_failed_authentication
delete "/dmsf/webdav/#{@project1.identifier}", nil, credentials('admin', 'badpassword')
delete "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => credentials('admin', 'badpassword')
assert_response :unauthorized
end
def test_root_folder
delete '/dmsf/webdav', nil, @admin
delete '/dmsf/webdav', :params => nil, :headers => @admin
assert_response :not_implemented
end
def test_delete_not_empty_folder
put "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", nil, @admin
put "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", :params => nil, :headers => @admin
assert_response :forbidden
end
def test_not_existed_project
delete '/dmsf/webdav/not_a_project/file.txt', nil, @admin
delete '/dmsf/webdav/not_a_project/file.txt', :params => nil, :headers => @admin
assert_response :not_found
end
def test_dmsf_not_enabled
@project1.disable_module! :dmsf
delete "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @jsmith
assert_response :not_found # Item does not exist, as project is not enabled.
end
def test_delete_when_ro
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY'
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @admin
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @admin
assert_response :bad_gateway # Item does not exist, as project is not enabled.
end
def test_unlocked_file
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @admin
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @admin
assert_response :no_content
@file1.reload
assert @file1.deleted?, "File #{@file1.name} hasn't been deleted"
end
def test_unathorized_user
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @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.
@file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
@ -135,7 +135,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_unathorized_user_forbidden
@role.add_permission! :view_dmsf_folders
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @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.
@file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
@ -143,7 +143,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_view_folder_not_allowed
@role.add_permission! :file_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", nil, @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.
@folder1.reload
assert !@folder1.deleted?, "Folder #{@folder1.title} is expected to exist"
@ -151,14 +151,14 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_folder_manipulation_not_allowed
@role.add_permission! :view_dmsf_folders
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}", :params => nil, :headers => @jsmith
assert_response :forbidden # Without manipulation permission, action is forbidden.
@folder1.reload
assert !@folder1.deleted?, "Foler #{@folder1.title} is expected to exist"
end
def test_folder_delete_by_admin
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @admin
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", :params => nil, :headers => @admin
assert_response :success
@folder6.reload
assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist"
@ -167,7 +167,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_folder_delete_by_user
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", :params => nil, :headers => @jsmith
assert_response :success
@folder6.reload
assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist"
@ -177,17 +177,17 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
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}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", :params => nil, :headers => @jsmith
assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", nil, @jsmith
delete "/dmsf/webdav/#{p1name_uri}/#{@folder6.title}", :params => nil, :headers => @jsmith
assert_response :success
@folder6.reload
assert @folder6.deleted?, "Folder #{@folder1.title} is not expected to exist"
end
def test_file_delete_by_administrator
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @admin
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @admin
assert_response :success
@file1.reload
assert @file1.deleted?, "File #{@file1.name} is not expected to exist"
@ -196,7 +196,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_file_delete_by_user
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @jsmith
assert_response :success
@file1.reload
assert @file1.deleted?, "File #{@file1.name} is not expected to exist"
@ -206,10 +206,10 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @jsmith
assert_response :not_found
p1name_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", nil, @jsmith
delete "/dmsf/webdav/#{p1name_uri}/#{@file1.name}", :params => nil, :headers => @jsmith
assert_response :success
@file1.reload
assert @file1.deleted?, "File #{@file1.name} is not expected to exist"
@ -218,7 +218,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
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", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}/#frament=HTTP/1.1", :params => nil, :headers => @jsmith
assert_response :bad_request
end
@ -226,7 +226,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@role.add_permission! :view_dmsf_folders
@role.add_permission! :folder_manipulation
@folder6.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", :params => nil, :headers => @jsmith
assert_response :locked
@folder6.reload
assert !@folder6.deleted?, "Folder #{@folder6.title} is expected to exist"
@ -236,7 +236,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
@file1.lock!
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @jsmith
assert_response :locked
@file1.reload
assert !@file1.deleted?, "File #{@file1.name} is expected to exist"
@ -245,7 +245,7 @@ class DmsfWebdavDeleteTest < RedmineDmsf::Test::IntegrationTest
def test_non_versioned_file
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_delete
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil, @jsmith
delete "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil, :headers => @jsmith
assert_response :success
# The file should be destroyed
assert_nil DmsfFile.visible.find_by(id: @file1.id)

View File

@ -69,57 +69,57 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end
def test_should_deny_failed_authentication
get '/dmsf/webdav', nil, credentials('admin', 'badpassword')
get '/dmsf/webdav', :params => nil, :headers => credentials('admin', 'badpassword')
assert_response :unauthorized
end
def test_should_permit_authenticated_user
get '/dmsf/webdav', nil, @admin
get '/dmsf/webdav', :params => nil, :headers => @admin
assert_response :success
end
def test_should_list_dmsf_enabled_project
get '/dmsf/webdav', nil, @admin
get '/dmsf/webdav', :params => nil, :headers => @admin
assert_response :success
assert !response.body.match(@project1.identifier).nil?, "Expected to find project #{@project1.identifier} in return data"
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
get '/dmsf/webdav', nil, @admin
get '/dmsf/webdav', :params => nil, :headers => @admin
assert_response :success
assert_no_match @project1.identifier, response.body
assert_match project1_uri, response.body
end
def test_should_not_list_non_dmsf_enabled_project
get '/dmsf/webdav', nil, @jsmith
get '/dmsf/webdav', :params => nil, :headers => @jsmith
assert_response :success
assert response.body.match(@project2.identifier).nil?, "Unexpected find of project #{@project2.identifier} in return data"
end
def test_should_return_status_404_when_project_does_not_exist
@project1.enable_module! :dmsf # Flag module enabled
get '/dmsf/webdav/project_does_not_exist', nil, @jsmith
get '/dmsf/webdav/project_does_not_exist', :params => nil, :headers => @jsmith
assert_response :not_found
end
def test_should_return_status_404_when_dmsf_not_enabled
get "/dmsf/webdav/#{@project2.identifier}", nil, @jsmith
get "/dmsf/webdav/#{@project2.identifier}", :params => nil, :headers => @jsmith
assert_response :not_found
end
def test_download_file_from_dmsf_enabled_project
get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin
get "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @admin
assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin
get "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @admin
assert_response :not_found
get "/dmsf/webdav/#{project1_uri}/test.txt", nil, @admin
get "/dmsf/webdav/#{project1_uri}/test.txt", :params => nil, :headers => @admin
assert_response :success
end
def test_should_list_dmsf_contents_within_project
get "/dmsf/webdav/#{@project1.identifier}", nil, @admin
get "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin
assert_response :success
folder = DmsfFolder.find_by(id: 1)
assert_not_nil folder
@ -132,13 +132,13 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
end
def test_user_assigned_to_project_dmsf_module_not_enabled
get "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith
get "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @jsmith
assert_response :not_found
end
def test_user_assigned_to_project_folder_forbidden
@project2.enable_module! :dmsf # Flag module enabled
get "/dmsf/webdav/#{@project2.identifier}", nil, @jsmith
get "/dmsf/webdav/#{@project2.identifier}", :params => nil, :headers => @jsmith
assert_response :not_found
end
@ -146,14 +146,14 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders
@role.add_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith
get "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @jsmith
assert_response :success
end
def test_user_assigned_to_project_file_forbidden
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders
get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @jsmith
get "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @jsmith
assert_response :forbidden
end
@ -161,7 +161,7 @@ class DmsfWebdavGetTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders
@role.add_permission! :view_dmsf_files
get "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @jsmith
get "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @jsmith
assert_response :success
end

View File

@ -71,13 +71,13 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
end
def test_head_responds_with_authentication
head "/dmsf/webdav/#{@project1.identifier}", nil, @admin
head "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin
assert_response :success
check_headers_exist
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
head "/dmsf/webdav/#{@project1.identifier}", nil, @admin
head "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin
assert_response :not_found
head "/dmsf/webdav/#{@project1_uri}", nil, @admin
head "/dmsf/webdav/#{@project1_uri}", :params => nil, :headers => @admin
assert_response :success
end
@ -87,48 +87,48 @@ class DmsfWebdavHeadTest < RedmineDmsf::Test::IntegrationTest
# (but may include an etag, so there is an allowance for a 1 in 2 failure rate on (optionally) required
# headers)
def test_head_responds_to_file
head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin
head "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @admin
assert_response :success
check_headers_exist # Note it'll allow 1 out of the 3 expected to fail
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, @admin
head "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => @admin
assert_response :not_found
head "/dmsf/webdav/#{@project1_uri}/test.txt", nil, @admin
head "/dmsf/webdav/#{@project1_uri}/test.txt", :params => nil, :headers => @admin
assert_response :success
end
def test_head_responds_to_file_anonymous_other_user_agent
head "/dmsf/webdav/#{@project1.identifier}/test.txt", nil, {:HTTP_USER_AGENT => 'Other'}
head "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => nil, :headers => {:HTTP_USER_AGENT => 'Other'}
assert_response :unauthorized
check_headers_dont_exist
end
def test_head_fails_when_file_not_found
head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", nil, @admin
head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", :params => nil, :headers => @admin
assert_response :not_found
check_headers_dont_exist
end
def test_head_fails_when_file_not_found_anonymous_other_user_agent
head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", nil, {:HTTP_USER_AGENT => 'Other'}
head "/dmsf/webdav/#{@project1.identifier}/not_here.txt", :params => nil, :headers => {:HTTP_USER_AGENT => 'Other'}
assert_response :unauthorized
check_headers_dont_exist
end
def test_head_fails_when_folder_not_found
head '/dmsf/webdav/folder_not_here', nil, @admin
head '/dmsf/webdav/folder_not_here', :params => nil, :headers => @admin
assert_response :not_found
check_headers_dont_exist
end
def test_head_fails_when_folder_not_found_anonymous_other_user_agent
head '/dmsf/webdav/folder_not_here', nil, {:HTTP_USER_AGENT => 'Other'}
head '/dmsf/webdav/folder_not_here', :params => nil, :headers => {:HTTP_USER_AGENT => 'Other'}
assert_response :unauthorized
check_headers_dont_exist
end
def test_head_fails_when_project_is_not_enabled_for_dmsf
head "/dmsf/webdav/#{@project2.identifier}/test.txt", nil, @jsmith
head "/dmsf/webdav/#{@project2.identifier}/test.txt", :params => nil, :headers => @jsmith
assert_response :not_found
check_headers_dont_exist
end

View File

@ -57,20 +57,21 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
log_user 'admin', 'admin' # login as admin
assert !User.current.anonymous?, 'Current user is anonymous'
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}",
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params =>
%{<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<d:lockinfo xmlns:d=\"DAV:\">
<d:lockscope><d:exclusive/></d:lockscope>
<d:locktype><d:write/></d:locktype>
<d:owner>jsmith</d:owner>
</d:lockinfo>},
@jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
:headers => @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :locked
end
def test_lock_file
create_time = Time.utc(2000, 1, 2, 3, 4, 5)
refresh_time = Time.utc(2000, 1, 2, 6, 7, 8)
locktoken = nil
# Time travel, will make the usec part of the time 0
travel_to create_time do
@ -81,8 +82,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
<d:locktype><d:write/></d:locktype>
<d:owner>jsmith</d:owner>
</d:lockinfo>}
xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", xml,
@jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => xml,
:headers => @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite' })
assert_response :success
# Verify the response
# <?xml version=\"1.0\"?>
@ -113,22 +114,22 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
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
xml_http_request :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}",
nil,
@jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: locktoken })
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
@file1.reload
l = @file1.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
travel_to refresh_time do
# Refresh lock
process :lock, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}",
:params => nil,
:headers => @jsmith.merge!({ HTTP_DEPTH: 'infinity', HTTP_TIMEOUT: 'Infinite', HTTP_IF: locktoken })
assert_response :success
# 1.week = 7*24*3600=604800 seconds
assert_match '<d:timeout>Second-604800</d:timeout>', response.body
# Verify the lock in the db
@file1.reload
l = @file1.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

View File

@ -66,28 +66,28 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
end
def test_mkcol_requires_authentication
xml_http_request :mkcol, '/dmsf/webdav/test1'
process :mkcol, '/dmsf/webdav/test1'
assert_response :unauthorized
end
def test_mkcol_fails_to_create_folder_at_root_level
xml_http_request :mkcol, '/dmsf/webdav/test1', nil, @admin
process :mkcol, '/dmsf/webdav/test1', :params => nil, :headers => @admin
assert_response :method_not_allowed
end
def test_should_not_succeed_on_a_non_existant_project
xml_http_request :mkcol, '/dmsf/webdav/project_doesnt_exist/test1', nil, @admin
process :mkcol, '/dmsf/webdav/project_doesnt_exist/test1', :params => nil, :headers => @admin
assert_response :not_found
end
def test_should_not_succed_on_a_non_dmsf_enabled_project
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/folder", nil, @jsmith
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/folder", :params => nil, :headers => @jsmith
assert_response :forbidden
end
def test_should_not_create_folder_without_permissions
@project1.enable_module! :dmsf # Flag module enabled
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/folder", nil, @jsmith
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/folder", :params => nil, :headers => @jsmith
assert_response :forbidden
end
@ -95,27 +95,27 @@ class DmsfWebdavMkcolTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :folder_manipulation
@role.add_permission! :view_dmsf_folders
xml_http_request :mkcol,
"/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", nil, @jsmith
process :mkcol,
"/dmsf/webdav/#{@project1.identifier}/#{@folder6.title}", :params => nil, :headers => @jsmith
assert_response :method_not_allowed
end
def test_should_fail_to_create_folder_for_user_without_rights
@project1.enable_module! :dmsf # Flag module enabled
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", nil, @jsmith
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", :params => nil, :headers => @jsmith
assert_response :forbidden
end
def test_should_create_folder_for_non_admin_user_with_rights
@project1.enable_module! :dmsf
@role.add_permission! :folder_manipulation
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", nil, @jsmith
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test1", :params => nil, :headers => @jsmith
assert_response :success # Created
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
xml_http_request :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", nil, @jsmith
process :mkcol, "/dmsf/webdav/#{@project1.identifier}/test2", :params => nil, :headers => @jsmith
assert_response :not_found
xml_http_request :mkcol, "/dmsf/webdav/#{project1_uri}/test3", nil, @jsmith
process :mkcol, "/dmsf/webdav/#{project1_uri}/test3", :params => nil, :headers => @jsmith
assert_response :success # Created
end

View File

@ -75,8 +75,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_denied_for_anonymous
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
{:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => {:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"}
assert_response :unauthorized
end
end
@ -85,8 +85,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
@role.remove_permission! :folder_manipulation
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :forbidden
end
end
@ -95,8 +95,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
@role.remove_permission! :folder_manipulation
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :created
f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}"
assert f, "Moved file '#{new_name}' not found in project."
@ -104,16 +104,16 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
end
def test_move_non_existent_file
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/not_a_file.txt", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/moved_file.txt"})
process :move, "/dmsf/webdav/#{@project1.identifier}/not_a_file.txt", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/moved_file.txt"})
assert_response :not_found # NotFound
end
def test_move_to_new_filename
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :created
f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}"
assert f, "Moved file '#{new_name}' not found in project."
@ -125,8 +125,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
new_name = "#{@file1.name}.moved"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{new_name}"})
process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{new_name}"})
assert_response :created
f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}"
assert f, "Moved file '#{new_name}' not found in project."
@ -136,8 +136,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_zero_sized_to_new_filename
new_name = "#{@file10.name}.moved"
assert_no_difference '@file10.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :created
f = DmsfFile.find_file_by_name @project1, nil, "#{new_name}"
assert f, "Moved file '#{new_name}' not found in project."
@ -146,8 +146,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_to_new_folder
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/#{@file1.name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/#{@file1.name}"})
assert_response :created
@file1.reload
assert_equal @folder1.id, @file1.dmsf_folder_id
@ -158,8 +158,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{@folder1.title}/#{@file1.name}"})
process :move, "/dmsf/webdav/#{project1_uri}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{project1_uri}/#{@folder1.title}/#{@file1.name}"})
assert_response :created
@file1.reload
assert_equal @folder1.id, @file1.dmsf_folder_id
@ -168,8 +168,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
def test_move_zero_sized_to_new_folder
assert_no_difference '@file10.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/#{@file10.name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file10.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@folder1.title}/#{@file10.name}"})
assert_response :created
@file10.reload
assert_equal @folder1.id, @file10.dmsf_folder_id
@ -182,8 +182,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
new_name = "#{file9.name}"
assert_no_difference 'file9.dmsf_file_revisions.count' do
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :not_implemented # NotImplemented
end
end
@ -195,8 +195,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
assert @file1.lock!, "File failed to be locked by #{User.current.name}"
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :locked
end
end
@ -208,8 +208,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
new_name = "#{@file1.name}.moved"
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @admin.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :locked
end
end
@ -222,15 +222,15 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
# Move once
new_name = "#{@file1.name}.m1"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name}"})
assert_response :success # Created
end
# Move twice, make sure that the MsOffice store sequence is not disrupting normal move
new_name2 = "#{new_name}.m2"
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{new_name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name2}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{new_name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{new_name2}"})
assert_response :success # Created
end
end
@ -255,8 +255,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
# Move the original file to AAAAAAAA.tmp. The original file should not changed but a new file should be created.
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"})
assert_response :success # Created
end
@ -268,8 +268,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
# Move a temporary file (use AAAAAAAA.tmp) to the original file.
assert_difference '@file1.dmsf_file_revisions.count', +1 do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@file1.name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@file1.name}"})
assert_response :success # Created
end
@ -282,8 +282,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
# Move the original file to BBBBBBBB.tmp. The original file should not change but a new file should be created.
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{@file1.name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}"})
assert_response :success # Created
end
@ -295,8 +295,8 @@ class DmsfWebdavMoveTest < RedmineDmsf::Test::IntegrationTest
# Move a temporary file (use BBBBBBBB.tmp) to the original file.
assert_no_difference '@file1.dmsf_file_revisions.count' do
xml_http_request :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", nil,
@jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@file1.name}"})
process :move, "/dmsf/webdav/#{@project1.identifier}/#{temp_file_name}", :params => nil,
:headers => @jsmith.merge!({:destination => "http://www.example.com/dmsf/webdav/#{@project1.identifier}/#{@file1.name}"})
assert_response :success # Created
end
end

View File

@ -51,13 +51,13 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end
def test_options_requires_no_authentication_for_root_level
xml_http_request :options, '/dmsf/webdav'
process :options, '/dmsf/webdav'
assert_response :success
end
def test_options_returns_expected_allow_header_for_ro
Setting.plugin_redmine_dmsf['dmsf_webdav_strategy'] = 'WEBDAV_READ_ONLY'
xml_http_request :options, '/dmsf/webdav'
process :options, '/dmsf/webdav'
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Allow'] , 'Allow header is empty or does not exist'
@ -65,7 +65,7 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end
def test_options_returns_expected_allow_header_for_rw
xml_http_request :options, '/dmsf/webdav'
process :options, '/dmsf/webdav'
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Allow'] , 'Allow header is empty or does not exist'
@ -74,14 +74,14 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end
def test_options_returns_expected_dav_header
xml_http_request :options, '/dmsf/webdav'
process :options, '/dmsf/webdav'
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Dav'] , 'Dav header is empty or does not exist'
end
def test_options_returns_expected_ms_auth_via_header
xml_http_request :options, '/dmsf/webdav'
process :options, '/dmsf/webdav'
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Ms-Author-Via'] , 'Ms-Author-Via header is empty or does not exist'
@ -89,33 +89,33 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end
def test_options_requires_authentication_for_non_root_request
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}"
process :options, "/dmsf/webdav/#{@project1.identifier}"
assert_response :unauthorized
end
def test_un_authenticated_options_returns_expected_allow_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}"
process :options, "/dmsf/webdav/#{@project1.identifier}"
assert_response :unauthorized
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert_nil response.headers['Allow'] , 'Allow header should not exist'
end
def test_un_authenticated_options_returns_expected_dav_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}"
process :options, "/dmsf/webdav/#{@project1.identifier}"
assert_response :unauthorized
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert_nil response.headers['Dav'] , 'Dav header should not exist'
end
def test_un_authenticated_options_returns_expected_ms_auth_via_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}"
process :options, "/dmsf/webdav/#{@project1.identifier}"
assert_response :unauthorized
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert_nil response.headers['Ms-Author-Via'] , 'Ms-Author-Via header should not exist'
end
def test_authenticated_options_returns_expected_allow_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @jsmith
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Allow'], 'Allow header is empty or does not exist'
@ -124,14 +124,14 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end
def test_authenticated_options_returns_expected_dav_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @jsmith
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Dav'], 'Dav header is empty or does not exist'
end
def test_authenticated_options_returns_expected_ms_auth_via_header
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @jsmith
assert_response :success
assert !(response.headers.nil? || response.headers.empty?), 'Response headers are empty'
assert response.headers['Ms-Author-Via'], 'Ms-Author-Via header is empty or does not exist'
@ -139,40 +139,40 @@ class DmsfWebdavOptionsTest < RedmineDmsf::Test::IntegrationTest
end
def test_un_authenticated_options_for_msoffice_user_agent
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'}
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => {:HTTP_USER_AGENT => 'Microsoft Office Word 2014'}
assert_response :unauthorized
end
def test_authenticated_options_for_msoffice_user_agent
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil,
@admin.merge!({:HTTP_USER_AGENT => 'Microsoft Office Word 2014'})
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil,
:headers => @admin.merge!({:HTTP_USER_AGENT => 'Microsoft Office Word 2014'})
assert_response :success
end
def test_un_authenticated_options_for_other_user_agent
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, {:HTTP_USER_AGENT => 'Other'}
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => {:HTTP_USER_AGENT => 'Other'}
assert_response :unauthorized
end
def test_authenticated_options_for_other_user_agent
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Other'})
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin.merge!({:HTTP_USER_AGENT => 'Other'})
assert_response :success
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
xml_http_request :options, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Other'})
process :options, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin.merge!({:HTTP_USER_AGENT => 'Other'})
assert_response :not_found
xml_http_request :options, "/dmsf/webdav/#{project1_uri}", nil, @admin.merge!({:HTTP_USER_AGENT => 'Other'})
process :options, "/dmsf/webdav/#{project1_uri}", :params => nil, :headers => @admin.merge!({:HTTP_USER_AGENT => 'Other'})
assert_response :success
end
def test_authenticated_options_returns_404_for_non_dmsf_enabled_items
@project2.disable_module! :dmsf
xml_http_request :options, "/dmsf/webdav/#{@project2.identifier}", nil, @jsmith
process :options, "/dmsf/webdav/#{@project2.identifier}", :params => nil, :headers => @jsmith
assert_response :not_found
end
def test_authenticated_options_returns_404_for_not_found
xml_http_request :options, '/dmsf/webdav/does-not-exist', nil, @jsmith
process :options, '/dmsf/webdav/does-not-exist', :params => nil, :headers => @jsmith
assert_response :not_found
end

View File

@ -43,7 +43,7 @@ class DmsfWebdavPostTest < RedmineDmsf::Test::IntegrationTest
# Test post is not implemented
def test_post_not_implemented
post '/dmsf/webdav/', nil, @admin
post '/dmsf/webdav/', :params => nil, :headers => @admin
assert_response :not_implemented
end

View File

@ -63,26 +63,26 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end
def test_propfind_denied_for_anonymous
xml_http_request :propfind, '/dmsf/webdav/', nil, {:HTTP_DEPTH => '0'}
process :propfind, '/dmsf/webdav/', :params => nil, :headers => {:HTTP_DEPTH => '0'}
assert_response :unauthorized
end
def test_propfind_depth0_on_root_for_non_member
xml_http_request :propfind, '/dmsf/webdav/', nil, @jsmith.merge!({:HTTP_DEPTH => '0'})
process :propfind, '/dmsf/webdav/', :params => nil, :headers => @jsmith.merge!({:HTTP_DEPTH => '0'})
assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?('<d:displayname>/</d:displayname>')
end
def test_propfind_depth1_on_root_for_non_member
xml_http_request :propfind, '/dmsf/webdav/', nil, @jsmith.merge!({:HTTP_DEPTH => '1'})
process :propfind, '/dmsf/webdav/', :params => nil, :headers => @jsmith.merge!({:HTTP_DEPTH => '1'})
assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?( '<d:displayname>/</d:displayname>')
end
def test_propfind_depth0_on_root_for_admin
xml_http_request :propfind, '/dmsf/webdav/', nil, @admin.merge!({:HTTP_DEPTH => '0'})
process :propfind, '/dmsf/webdav/', :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '0'})
assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?('<d:displayname>/</d:displayname>')
@ -90,7 +90,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth1_on_root_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
xml_http_request :propfind, '/dmsf/webdav/', nil, @admin.merge!({:HTTP_DEPTH => '1'})
process :propfind, '/dmsf/webdav/', :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '1'})
assert_response :multi_status
assert response.body.include?('<d:href>http://www.example.com:80/dmsf/webdav/</d:href>')
assert response.body.include?('<d:displayname>/</d:displayname>')
@ -103,12 +103,12 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
end
def test_propfind_depth0_on_project1_for_non_member
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @jsmith.merge!({:HTTP_DEPTH => '0'})
process :propfind, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @jsmith.merge!({:HTTP_DEPTH => '0'})
assert_response :not_found
end
def test_propfind_depth0_on_project1_for_admin
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
process :propfind, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '0'})
assert_response :multi_status
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</d:href>")
assert response.body.include?("<d:displayname>#{@project1.identifier}</d:displayname>")
@ -116,16 +116,16 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth0_on_project1_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
process :propfind, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '0'})
assert_response :not_found
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, @admin.merge!({:HTTP_DEPTH => '0'})
process :propfind, "/dmsf/webdav/#{@project1_uri}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '0'})
assert_response :multi_status
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</d:href>")
assert response.body.include?("<d:displayname>#{@project1_name}</d:displayname>")
end
def test_propfind_depth1_on_project1_for_admin
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
process :propfind, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '1'})
assert_response :multi_status
# Project
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1.identifier}/</d:href>")
@ -146,9 +146,9 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
def test_propfind_depth1_on_project1_for_admin_with_project_names
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
xml_http_request :propfind, "/dmsf/webdav/#{@project1.identifier}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
process :propfind, "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '1'})
assert_response :not_found
xml_http_request :propfind, "/dmsf/webdav/#{@project1_uri}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
process :propfind, "/dmsf/webdav/#{@project1_uri}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '1'})
assert_response :multi_status
# Project
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{@project1_uri}/</d:href>")
@ -171,7 +171,7 @@ class DmsfWebdavPropfindTest < RedmineDmsf::Test::IntegrationTest
@project1.save!
project1_new_name = RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1)
project1_new_uri = Addressable::URI.escape(project1_new_name)
xml_http_request :propfind, "/dmsf/webdav/#{project1_new_uri}", nil, @admin.merge!({:HTTP_DEPTH => '1'})
process :propfind, "/dmsf/webdav/#{project1_new_uri}", :params => nil, :headers => @admin.merge!({:HTTP_DEPTH => '1'})
assert_response :multi_status
assert response.body.include?("<d:href>http://www.example.com:80/dmsf/webdav/#{project1_new_uri}/</d:href>")
assert response.body.include?("<d:displayname>#{project1_new_name}</d:displayname>")

View File

@ -74,46 +74,46 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
end
def test_put_denied_with_failed_authentication_root
put '/dmsf/webdav', nil, credentials('admin', 'badpassword')
put '/dmsf/webdav', :params => nil, :headers => credentials('admin', 'badpassword')
assert_response :unauthorized
end
def test_put_denied_with_failed_authentication
put "/dmsf/webdav/#{@project1.identifier}", nil, credentials('admin', 'badpassword')
put "/dmsf/webdav/#{@project1.identifier}", :params => nil, :headers => credentials('admin', 'badpassword')
assert_response :unauthorized
end
def test_put_denied_at_root_level
put '/dmsf/webdav/test.txt', '1234', @admin.merge!({:content_type => :text})
put '/dmsf/webdav/test.txt', :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :not_implemented
end
def test_put_denied_on_folder
put "/dmsf/webdav/#{@project1.identifier}", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :forbidden
end
def test_put_failed_on_non_existant_project
put '/dmsf/webdav/not_a_project/file.txt', '1234', @admin.merge!({:content_type => :text})
put '/dmsf/webdav/not_a_project/file.txt', :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :conflict # not_a_project does not exist - file.txt cannot be created
end
def test_put_as_admin_granted_on_dmsf_enabled_project
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :created
# Lets check for our file
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
assert file, 'Check for files existance'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :conflict
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :created
end
def test_put_failed_as_jsmith_on_non_dmsf_enabled_project
put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project2.identifier}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :conflict # Should report conflict, as project 2 technically doesn't exist if not enabled
# Lets check for our file
file = DmsfFile.find_file_by_name @project2, nil, 'test-1234.txt'
@ -122,14 +122,14 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
def test_put_failed_when_no_permission
@project2.enable_module! :dmsf # Flag module enabled
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :conflict # We don't hold the permission view_dmsf_folders, and thus project 2 doesn't exist to us.
end
def test_put_failed_when_no_file_manipulation_permission
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :forbidden # We don't hold the permission file_manipulation - so we're unable to do anything with files
end
@ -137,7 +137,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :file_manipulation
# Check we don't have write access even if we do have the file_manipulation permission
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :conflict # We don't hold the permission view_dmsf_folders, and thus project 2 doesn't exist to us.
# Lets check for our file
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
@ -148,7 +148,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf # Flag module enabled
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_manipulation
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created # Now we have permissions
# Lets check for our file
file = DmsfFile.find_file_by_name @project1, nil, 'test-1234.txt'
@ -157,9 +157,9 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
assert_equal file.last_revision.digest_type, 'SHA256'
Setting.plugin_redmine_dmsf['dmsf_webdav_use_project_names'] = true
project1_uri = Addressable::URI.escape(RedmineDmsf::Webdav::ProjectResource.create_project_name(@project1))
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :conflict
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{project1_uri}/test-1234.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created # Now we have permissions
end
@ -170,7 +170,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
assert_not_nil file, 'test.txt file not found'
assert_difference 'file.dmsf_file_revisions.count', +1 do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created
end
end
@ -184,7 +184,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
assert file.lock!, "File failed to be locked by #{User.current.name}"
assert_no_difference 'file.dmsf_file_revisions.count' do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :locked
end
end
@ -198,7 +198,7 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
file = DmsfFile.find_file_by_name @project1, nil, 'test.txt'
assert file.lock!, "File failed to be locked by #{User.current.name}"
assert_no_difference 'file.dmsf_file_revisions.count' do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :locked
end
end
@ -216,12 +216,12 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
# First PUT should always create new revision.
assert_difference 'file.dmsf_file_revisions.count', +1 do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created
end
# Second PUT on a locked file should only update the revision that were created on the first PUT
assert_no_difference 'file.dmsf_file_revisions.count' do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created
end
# Unlock
@ -237,12 +237,12 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
# First PUT should always create new revision.
assert_difference 'file.dmsf_file_revisions.count', +1 do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created
end
# Second PUT on a locked file should only update the revision that were created on the first PUT
assert_no_difference 'file.dmsf_file_revisions.count' do
put "/dmsf/webdav/#{@project1.identifier}/test.txt", '1234', @jsmith.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.txt", :params => '1234', :headers => @jsmith.merge!({:content_type => :text})
assert_response :created
end
end
@ -252,15 +252,15 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
@project1.enable_module! :dmsf
@role.add_permission! :view_dmsf_folders
@role.add_permission! :file_manipulation
put "/dmsf/webdav/#{@project1.identifier}/._test.txt", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/._test.txt", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :no_content
put "/dmsf/webdav/#{@project1.identifier}/.DS_Store", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/.DS_Store", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :no_content
put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/Thumbs.db", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :no_content
original = Setting.plugin_redmine_dmsf['dmsf_webdav_ignore']
Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = '.dump$'
put "/dmsf/webdav/#{@project1.identifier}/test.dump", '1234', @admin.merge!({:content_type => :text})
put "/dmsf/webdav/#{@project1.identifier}/test.dump", :params => '1234', :headers => @admin.merge!({:content_type => :text})
assert_response :no_content
Setting.plugin_redmine_dmsf['dmsf_webdav_ignore'] = original
end
@ -271,44 +271,44 @@ class DmsfWebdavPutTest < RedmineDmsf::Test::IntegrationTest
@role.add_permission! :file_manipulation
credentials = @admin.merge!({ content_type: :text })
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", '1234', credentials
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", :params => '1234', :headers => credentials
assert_response :success
file1 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder: nil, name: 'file1.tmp')
assert file1
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", '5678', credentials
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", :params => '5678', :headers => credentials
assert_response :created
end
assert_difference 'file1.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", '9ABC', credentials
put "/dmsf/webdav/#{@project1.identifier}/file1.tmp", :params => '9ABC', :headers => credentials
assert_response :created
end
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", '1234', credentials
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", :params => '1234', :headers => credentials
assert_response :success
file2 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: '~$file2.txt')
assert file2
assert_difference 'file2.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", '5678', credentials
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", :params => '5678', :headers => credentials
assert_response :created
end
assert_difference 'file2.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", '9ABC', credentials
put "/dmsf/webdav/#{@project1.identifier}/~$file2.txt", :params => '9ABC', :headers => credentials
assert_response :created
end
original = Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning']
Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = '.dump$'
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", '1234', credentials
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", :params => '1234', :headers => credentials
assert_response :success
file3 = DmsfFile.find_by(project_id: @project1.id, dmsf_folder_id: nil, name: 'file3.dump')
assert file3
assert_difference 'file3.dmsf_file_revisions.count', 0 do
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", '5678', credentials
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", '9ABC', credentials
put "/dmsf/webdav/#{@project1.identifier}/file3.dump", :params => '9ABC', :headers => credentials
assert_response :created
end
Setting.plugin_redmine_dmsf['dmsf_webdav_disable_versioning'] = original

View File

@ -42,14 +42,14 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest
end
def test_files_updated
email = DmsfMailer.files_updated(@user2, @file1.project, [@file1]).deliver
email = DmsfMailer.files_updated(@user2, @file1.project, [@file1]).deliver_now
assert email
assert text_part(email).body.include? @file1.project.name
assert html_part(email).body.include? @file1.project.name
end
def test_files_deleted
email = DmsfMailer.files_deleted(@user2, @file1.project, [@file1]).deliver
email = DmsfMailer.files_deleted(@user2, @file1.project, [@file1]).deliver_now
assert email
assert text_part(email).body.include? @file1.project.name
assert html_part(email).body.include? @file1.project.name
@ -64,7 +64,7 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest
email_params[:expired_at] = Date.today
email_params[:folders] = nil
email_params[:files] = "[\"#{@file1.id}\"]"
email = DmsfMailer.send_documents(@file1.project, email_params).deliver
email = DmsfMailer.send_documents(@user2, @file1.project, email_params)
assert email
assert text_part(email).body.include? body
assert html_part(email).body.include? body
@ -72,7 +72,7 @@ class DmsfMailerTest < RedmineDmsf::Test::UnitTest
def test_workflow_notification
email = DmsfMailer.workflow_notification(@user2, @wf1, @rev2, :text_email_subject_started, :text_email_started,
:text_email_to_proceed)
:text_email_to_proceed).deliver_now
assert email
assert text_part(email).body.include? l(:text_email_subject_started)
assert html_part(email).body.include? l(:text_email_subject_started)