commit
43b04bb8cf
4
Gemfile
4
Gemfile
@ -35,3 +35,7 @@ end
|
||||
|
||||
# Dav4Rack
|
||||
gem 'ox'
|
||||
|
||||
group :test do
|
||||
gem 'rails-controller-testing'
|
||||
end
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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(', ')
|
||||
|
||||
@ -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(', ')
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 }
|
||||
|
||||
@ -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(', ')
|
||||
|
||||
@ -85,7 +85,7 @@ class DmsfFile < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def initialize
|
||||
def initialize(*args)
|
||||
@project = nil
|
||||
super
|
||||
end
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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(', ')
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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|
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
2
init.rb
2
init.rb
@ -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: {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
{
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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>")
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user