Redmine 5.1
This commit is contained in:
parent
4b37284140
commit
81447e04f9
4
.github/workflows/rubyonrails.yml
vendored
4
.github/workflows/rubyonrails.yml
vendored
@ -84,7 +84,7 @@ jobs:
|
||||
sudo apt-get install -y litmus libreoffice
|
||||
- name: Clone Redmine
|
||||
# Get the latest stable Redmine
|
||||
run: svn export http://svn.redmine.org/redmine/branches/5.0-stable/ /opt/redmine
|
||||
run: svn export http://svn.redmine.org/redmine/branches/5.1-stable/ /opt/redmine
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- name: Link the plugin
|
||||
@ -95,7 +95,7 @@ jobs:
|
||||
uses: ruby/setup-ruby@0a29871fe2b0200a17a4497bae54fe5df0d973aa # v1.115.3
|
||||
with:
|
||||
bundler-cache: true
|
||||
ruby-version: '3.0'
|
||||
ruby-version: '3.1'
|
||||
- name: Setup database
|
||||
# Create the database
|
||||
run: |
|
||||
|
||||
16
.rubocop.yml
16
.rubocop.yml
@ -17,7 +17,7 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
AllCops:
|
||||
TargetRubyVersion: 2.7
|
||||
TargetRubyVersion: 3.1
|
||||
TargetRailsVersion: 6.1
|
||||
|
||||
SuggestExtensions: false
|
||||
@ -41,6 +41,9 @@ Lint/ScriptPermission:
|
||||
Exclude:
|
||||
- extra/xapian_indexer.rb
|
||||
|
||||
Naming/BlockForwarding:
|
||||
EnforcedStyle: explicit
|
||||
|
||||
Metrics/AbcSize:
|
||||
Enabled: false
|
||||
|
||||
@ -72,6 +75,17 @@ Naming/AccessorMethodName:
|
||||
Exclude:
|
||||
- lib/dav4rack/resource.rb
|
||||
|
||||
Style/HashSyntax:
|
||||
EnforcedShorthandSyntax: either
|
||||
|
||||
Style/ZeroLengthPredicate:
|
||||
Exclude:
|
||||
- lib/redmine_dmsf/webdav/dmsf_resource.rb
|
||||
|
||||
Rails/DangerousColumnNames:
|
||||
Exclude:
|
||||
- db/migrate/20170330131901_create_dmsf_folder_permissions.rb
|
||||
|
||||
Rails/DynamicFindBy:
|
||||
AllowedMethods:
|
||||
- find_by_token
|
||||
|
||||
@ -45,7 +45,7 @@ Features
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
* Redmine 5.0.0 or higher
|
||||
* Redmine 5..0 or higher
|
||||
|
||||
### Full-text search (optional)
|
||||
|
||||
|
||||
@ -512,8 +512,6 @@ class DmsfController < ApplicationController
|
||||
}
|
||||
@back_url = params[:back_url]
|
||||
render action: 'email_entries'
|
||||
rescue StandardError
|
||||
raise
|
||||
ensure
|
||||
zip&.close
|
||||
end
|
||||
@ -541,8 +539,6 @@ class DmsfController < ApplicationController
|
||||
type: 'application/zip',
|
||||
disposition: 'attachment'
|
||||
)
|
||||
rescue StandardError
|
||||
raise
|
||||
ensure
|
||||
zip&.close
|
||||
end
|
||||
|
||||
@ -275,10 +275,6 @@ class DmsfWorkflowsController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def edit
|
||||
redirect_to dmsf_workflow_path(@dmsf_workflow)
|
||||
end
|
||||
|
||||
def new
|
||||
@dmsf_workflow = DmsfWorkflow.new
|
||||
# Reload
|
||||
@ -291,6 +287,10 @@ class DmsfWorkflowsController < ApplicationController
|
||||
render layout: !request.xhr?
|
||||
end
|
||||
|
||||
def edit
|
||||
redirect_to dmsf_workflow_path(@dmsf_workflow)
|
||||
end
|
||||
|
||||
def create
|
||||
if params[:dmsf_workflow]
|
||||
if params[:dmsf_workflow][:id].to_i.positive?
|
||||
@ -399,7 +399,7 @@ class DmsfWorkflowsController < ApplicationController
|
||||
def remove_step
|
||||
if request.delete?
|
||||
DmsfWorkflowStep.where(dmsf_workflow_id: @dmsf_workflow.id, step: params[:step]).find_each do |ws|
|
||||
@dmsf_workflow.dmsf_workflow_steps.delete(ws)
|
||||
@dmsf_workflow.dmsf_workflow_steps.delete ws
|
||||
end
|
||||
@dmsf_workflow.dmsf_workflow_steps.each do |ws|
|
||||
n = ws.step.to_i
|
||||
|
||||
@ -37,7 +37,7 @@ module DmsfHelper
|
||||
def self.temp_filename(filename)
|
||||
filename = sanitize_filename(filename)
|
||||
timestamp = DateTime.current.strftime('%y%m%d%H%M%S')
|
||||
timestamp.succ! while File.exist?(Rails.root.join("tmp/#{timestamp}_#{filename}"))
|
||||
timestamp.succ! while Rails.root.join("tmp/#{timestamp}_#{filename}").exist?
|
||||
"#{timestamp}_#{filename}"
|
||||
end
|
||||
|
||||
@ -47,7 +47,7 @@ module DmsfHelper
|
||||
# Replace all non alphanumeric, hyphens or periods with underscore
|
||||
just_filename.gsub!(/[^\w.\-]/, '_')
|
||||
# Keep the extension if any
|
||||
if !(/^[a-zA-Z0-9_.\-]*$/).match?(just_filename) && just_filename =~ /(.[a-zA-Z0-9]+)$/
|
||||
if !/^[a-zA-Z0-9_.\-]*$/.match?(just_filename) && just_filename =~ /(.[a-zA-Z0-9]+)$/
|
||||
extension = Regexp.last_match(1)
|
||||
just_filename = Digest::SHA256.hexdigest(just_filename) << extension
|
||||
end
|
||||
|
||||
@ -156,7 +156,7 @@ module DmsfUploadHelper
|
||||
end
|
||||
if failed_uploads.present? && controller
|
||||
controller.flash[:warning] = l(:warning_some_files_were_not_committed,
|
||||
files: failed_uploads.map { |u| u['name'] }.join(', '))
|
||||
files: failed_uploads.pluck(:name).join(', '))
|
||||
end
|
||||
[files, failed_uploads]
|
||||
end
|
||||
|
||||
@ -62,7 +62,7 @@ module DmsfWorkflowsHelper
|
||||
|
||||
def dmsf_workflows_for_select(project, dmsf_workflow_id)
|
||||
options = [['', -1]]
|
||||
DmsfWorkflow.active.sorted.where(['project_id = ? OR project_id IS NULL', project.id]).each do |wf|
|
||||
DmsfWorkflow.active.sorted.where(['project_id = ? OR project_id IS NULL', project.id]).find_each do |wf|
|
||||
options << if wf.project_id
|
||||
[wf.name, wf.id]
|
||||
else
|
||||
@ -74,7 +74,7 @@ module DmsfWorkflowsHelper
|
||||
|
||||
def dmsf_all_workflows_for_select(dmsf_workflow_id)
|
||||
options = [['', 0]]
|
||||
DmsfWorkflow.active.sorted.all.each do |wf|
|
||||
DmsfWorkflow.active.sorted.find_each do |wf|
|
||||
if wf.project_id
|
||||
prj = Project.find_by(id: wf.project_id)
|
||||
if User.current.allowed_to?(:manage_workflows, prj)
|
||||
|
||||
@ -194,7 +194,7 @@ class DmsfFile < ApplicationRecord
|
||||
end
|
||||
|
||||
def workflow
|
||||
last_revision ? last_revision.workflow : nil
|
||||
last_revision&.workflow
|
||||
end
|
||||
|
||||
def size
|
||||
@ -430,8 +430,8 @@ class DmsfFile < ApplicationRecord
|
||||
dmsf_attrs = filename.scan(%r{^([^/]+/[^_]+)_(\d+)_(.*)$})
|
||||
id_attribute = 0
|
||||
id_attribute = dmsf_attrs[0][1] if dmsf_attrs.length.positive?
|
||||
next if dmsf_attrs.length.zero? || id_attribute.to_i.zero?
|
||||
next unless results.select { |f| f.id.to_s == id_attribute }.empty?
|
||||
next if dmsf_attrs.empty? || id_attribute.to_i.zero?
|
||||
next unless results.none? { |f| f.id.to_s == id_attribute }
|
||||
|
||||
dmsf_file = DmsfFile.visible.where(limit_options).find_by(id: id_attribute)
|
||||
|
||||
|
||||
@ -177,7 +177,7 @@ class DmsfFileRevision < ApplicationRecord
|
||||
def disk_file(search_if_not_exists: true)
|
||||
path = storage_base_path
|
||||
begin
|
||||
FileUtils.mkdir_p(path) unless File.exist?(path)
|
||||
FileUtils.mkdir_p(path)
|
||||
rescue StandardError => e
|
||||
Rails.logger.error e.message
|
||||
end
|
||||
|
||||
@ -124,13 +124,13 @@ class DmsfFolder < ApplicationRecord
|
||||
if folder.dmsf_folder_permissions.any?
|
||||
role_ids = User.current.roles_for_project(folder.project).map(&:id)
|
||||
role_permission_ids = folder.dmsf_folder_permissions.roles.map(&:object_id)
|
||||
return true if (role_ids & role_permission_ids).any?
|
||||
return true if role_ids.intersect?(role_permission_ids)
|
||||
|
||||
principal_ids = folder.dmsf_folder_permissions.users.map(&:object_id)
|
||||
return true if principal_ids.include?(User.current.id)
|
||||
|
||||
user_group_ids = User.current.groups.map(&:id)
|
||||
(principal_ids & user_group_ids).any?
|
||||
principal_ids.intersect?(user_group_ids)
|
||||
else
|
||||
DmsfFolder.permissions? folder.dmsf_folder, allow_system: allow_system, file: file
|
||||
end
|
||||
@ -511,7 +511,7 @@ class DmsfFolder < ApplicationRecord
|
||||
save
|
||||
end
|
||||
|
||||
ALL_INVALID_CHARACTERS = /[#{INVALID_CHARACTERS}]/.freeze
|
||||
ALL_INVALID_CHARACTERS = /[#{INVALID_CHARACTERS}]/
|
||||
def self.get_valid_title(title)
|
||||
# 1. Invalid characters are replaced with dots.
|
||||
# 2. Two or more dots in a row are replaced with a single dot.
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
# File name validator
|
||||
class DmsfFileNameValidator < ActiveModel::EachValidator
|
||||
ALL_INVALID_CHARACTERS = /\A[^#{DmsfFolder::INVALID_CHARACTERS}]*\z/.freeze
|
||||
ALL_INVALID_CHARACTERS = /\A[^#{DmsfFolder::INVALID_CHARACTERS}]*\z/
|
||||
|
||||
def validate_each(record, attribute, value)
|
||||
record.errors.add attribute, :error_contains_invalid_character unless ALL_INVALID_CHARACTERS.match?(value)
|
||||
|
||||
@ -69,7 +69,7 @@ class CreateHierarchy < ActiveRecord::Migration[4.2]
|
||||
create_table :dmsf_user_prefs do |t|
|
||||
t.references :project, null: false
|
||||
t.references :user, null: false
|
||||
t.boolean :email_notify
|
||||
t.boolean :email_notify, null: false, default: false
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
# Add column
|
||||
class Dmsf090 < ActiveRecord::Migration[4.2]
|
||||
def up
|
||||
add_column :members, :dmsf_mail_notification, :boolean
|
||||
add_column :members, :dmsf_mail_notification, :boolean, null: false, default: false
|
||||
drop_table :dmsf_user_prefs
|
||||
end
|
||||
|
||||
@ -31,7 +31,7 @@ class Dmsf090 < ActiveRecord::Migration[4.2]
|
||||
create_table :dmsf_user_prefs do |t|
|
||||
t.references :project, null: false
|
||||
t.references :user, null: false
|
||||
t.boolean :email_notify
|
||||
t.boolean :email_notify, null: false, default: false
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
|
||||
@ -24,6 +24,7 @@ require 'uuidtools'
|
||||
|
||||
# Locking
|
||||
class Dmsf144 < ActiveRecord::Migration[4.2]
|
||||
# File lock
|
||||
class DmsfFileLock < ApplicationRecord
|
||||
belongs_to :file, class_name: 'DmsfFile', foreign_key: 'dmsf_file_id'
|
||||
belongs_to :user
|
||||
|
||||
@ -22,6 +22,6 @@
|
||||
class UpdateProjects < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
# DMSF - project's root folder notification
|
||||
add_column :projects, :dmsf_notification, :boolean
|
||||
add_column :projects, :dmsf_notification, :boolean, null: false, default: false
|
||||
end
|
||||
end
|
||||
|
||||
@ -24,7 +24,7 @@ class ApprovalWorkflowStatus < ActiveRecord::Migration[4.2]
|
||||
add_column :dmsf_workflows, :status, :integer,
|
||||
null: false, default: DmsfWorkflow::STATUS_ACTIVE
|
||||
DmsfWorkflow.reset_column_information
|
||||
DmsfWorkflow.all.each { |wf| wf.update_attribute(:status, DmsfWorkflow::STATUS_ACTIVE) }
|
||||
DmsfWorkflow.find_each { |wf| wf.update_attribute(:status, DmsfWorkflow::STATUS_ACTIVE) }
|
||||
end
|
||||
|
||||
def down
|
||||
|
||||
@ -28,7 +28,7 @@ class ApprovalWorkflowStdFields < ActiveRecord::Migration[4.2]
|
||||
end
|
||||
DmsfWorkflow.reset_column_information
|
||||
# Set updated_on
|
||||
DmsfWorkflow.all.each(&:touch)
|
||||
DmsfWorkflow.find_each(&:touch)
|
||||
# Set created_on and author_id
|
||||
admin_ids = User.active.where(admin: true).limit(1).ids
|
||||
DmsfWorkflow.update_all ['created_on = updated_on, author_id = ?', admin_ids.first]
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
# Add column
|
||||
class AddDmsfNotInheritableToCustomFields < ActiveRecord::Migration[4.2]
|
||||
def change
|
||||
add_column :custom_fields, :dmsf_not_inheritable, :boolean, null: true
|
||||
add_column :custom_fields, :dmsf_not_inheritable, :boolean,
|
||||
null: false, default: false
|
||||
end
|
||||
end
|
||||
|
||||
@ -38,7 +38,7 @@ class MigrateDocuments < ActiveRecord::Migration[4.2]
|
||||
begin
|
||||
FileUtils.mv origin, target, verbose: true
|
||||
folder = storage_base_path(dmsf_file_revision)
|
||||
Dir.rmdir(folder) if folder && (Dir.entries(folder).size == 2)
|
||||
Dir.rmdir(folder) if folder && Dir.empty?(folder)
|
||||
rescue StandardError => e
|
||||
msg = "DmsfFileRevisions ID #{dmsf_file_revision.id}: #{e.message}"
|
||||
say msg
|
||||
@ -91,7 +91,7 @@ class MigrateDocuments < ActiveRecord::Migration[4.2]
|
||||
begin
|
||||
FileUtils.mv origin, target, verbose: true
|
||||
folder = dmsf_file_revision.storage_base_path
|
||||
Dir.rmdir(folder) if folder && (Dir.entries(folder).size == 2)
|
||||
Dir.rmdir(folder) if folder && Dir.empty?(folder)
|
||||
rescue StandardError => e
|
||||
msg = "DmsfFileRevisions ID #{dmsf_file_revision.id}: #{e.message}"
|
||||
say msg
|
||||
@ -136,7 +136,7 @@ class MigrateDocuments < ActiveRecord::Migration[4.2]
|
||||
def disk_file(dmsf_file_revision)
|
||||
path = storage_base_path(dmsf_file_revision)
|
||||
if path
|
||||
FileUtils.mkdir_p(path) unless File.exist?(path)
|
||||
FileUtils.mkdir_p(path)
|
||||
return "#{path}/#{dmsf_file_revision.disk_filename}"
|
||||
end
|
||||
nil
|
||||
|
||||
@ -63,7 +63,7 @@ module RedmineDmsf
|
||||
options = []
|
||||
if object&.project
|
||||
files = object.project.dmsf_files.visible.to_a
|
||||
DmsfFolder.visible(false).where(project_id: object.project.id).each do |f|
|
||||
DmsfFolder.visible(false).where(project_id: object.project.id).find_each do |f|
|
||||
files += f.dmsf_files.visible.to_a
|
||||
end
|
||||
files.sort! { |a, b| a.title.casecmp(b.title) }
|
||||
|
||||
@ -100,8 +100,8 @@ module RedmineDmsf
|
||||
links = get_links(context[:container])
|
||||
return unless links.present? && Setting.thumbnails_enabled?
|
||||
|
||||
images = links.map { |x| x[0] }.select(&:image?)
|
||||
return 'yes' if images.any?
|
||||
images = links.pluck(0).select(&:image?)
|
||||
'yes' if images.any?
|
||||
end
|
||||
|
||||
def view_issues_edit_notes_bottom_style(context = {})
|
||||
@ -142,7 +142,7 @@ module RedmineDmsf
|
||||
links << [dmsf_file, dmsf_link, dmsf_link.created_at] if dmsf_file&.last_revision
|
||||
end
|
||||
# Sort by 'create_at'
|
||||
links.sort! { |x, y| x[2] <=> y[2] }
|
||||
links.sort_by! { |a| a[2] }
|
||||
end
|
||||
links
|
||||
end
|
||||
|
||||
@ -35,7 +35,7 @@ module RedmineDmsf
|
||||
|
||||
def copy(project, options = {})
|
||||
super(project, options)
|
||||
project = project.is_a?(Project) ? project : Project.find(project)
|
||||
project = Project.find(project) unless project.is_a?(Project)
|
||||
to_be_copied = %w[dmsf dmsf_folders approval_workflows]
|
||||
to_be_copied &= Array.wrap(options[:only]) if options[:only]
|
||||
if save
|
||||
|
||||
@ -25,7 +25,7 @@ module RedmineDmsf
|
||||
# Checking physical presence of the plugin as Redmine::Plugin.installed? may return false due to alphabetical
|
||||
# registering of available plugins.
|
||||
def self.present?(id)
|
||||
Dir.exist? Rails.root.join('plugins', id.to_s)
|
||||
Rails.root.join('plugins', id.to_s).exist?
|
||||
end
|
||||
|
||||
# Return true if a plugin that overrides Redmine::Notifiable and use the deprecated method alias_method_chain is
|
||||
|
||||
@ -32,10 +32,10 @@ module RedmineDmsf
|
||||
|
||||
DIR_FILE = %(
|
||||
<tr>
|
||||
<td class=\"name\"><a href=\"%s\">%s</a></td>
|
||||
<td class=\"size\">%s</td>
|
||||
<td class=\"type\">%s</td>
|
||||
<td class=\"mtime\">%s</td>
|
||||
<td class="name"><a href="%s">%s</a></td>
|
||||
<td class="size">%s</td>
|
||||
<td class="type">%s</td>
|
||||
<td class="mtime">%s</td>
|
||||
</tr>
|
||||
)
|
||||
|
||||
|
||||
@ -204,7 +204,7 @@ module RedmineDmsf
|
||||
|
||||
def get_resource_class(path)
|
||||
pinfo = path.split('/').drop(1)
|
||||
return IndexResource if pinfo.length.zero?
|
||||
return IndexResource if pinfo.empty?
|
||||
|
||||
return ProjectResource if pinfo.length == 1
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ require File.expand_path('../../test_helper', __FILE__)
|
||||
class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_links
|
||||
fixtures :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_links, :dmsf_locks
|
||||
|
||||
def setup
|
||||
super
|
||||
@ -32,14 +32,13 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
@file_link6 = DmsfLink.find 6
|
||||
@folder_link1 = DmsfLink.find 1
|
||||
@url_link5 = DmsfLink.find 5
|
||||
User.current = nil
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
end
|
||||
|
||||
def test_dmsf_file
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit', text: l(:button_edit)
|
||||
assert_select 'a.icon-lock', text: l(:button_lock)
|
||||
@ -53,9 +52,10 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_file_locked
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
|
||||
get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit.disabled', text: l(:button_edit)
|
||||
assert_select 'a.icon-unlock', text: l(:button_unlock)
|
||||
@ -68,11 +68,11 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_edit_file_locked_by_myself
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
User.current = @jsmith
|
||||
@file1.lock!
|
||||
User.current = nil
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_select 'a.icon-unlock', text: l(:button_unlock)
|
||||
assert_select 'a.icon-unlock.disabled', text: l(:button_edit_content), count: 0
|
||||
assert_select 'a.icon-file', text: l(:button_edit_content)
|
||||
@ -81,22 +81,25 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_file_locked_force_unlock_permission_off
|
||||
get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock)
|
||||
end
|
||||
|
||||
def test_dmsf_file_locked_force_unlock_permission_on
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_developer.add_permission! :force_file_unlock
|
||||
get :dmsf, params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file2.project.id, ids: ["file-#{@file2.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock), count: 0
|
||||
end
|
||||
|
||||
def test_dmsf_file_notification_on
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@file1.notify_activate
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-email', text: l(:label_notifications_off)
|
||||
assert_select 'a.icon-email-add', text: l(:label_notifications_on), count: 0
|
||||
@ -104,9 +107,10 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_file_manipulation_permission_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit.disabled', text: l(:button_edit)
|
||||
assert_select 'a.icon-lock.disabled', text: l(:button_lock)
|
||||
@ -116,8 +120,9 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_file_manipulation_permission_on
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit)
|
||||
assert_select 'a:not(icon-lock.disabled)', text: l(:button_lock)
|
||||
@ -127,75 +132,86 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_file_email_permission_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :email_documents
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-email.disabled', text: l(:field_mail)
|
||||
end
|
||||
|
||||
def test_dmsf_file_email_permission_on
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :email_document
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-email.disabled)', text: l(:field_mail)
|
||||
end
|
||||
|
||||
def test_dmsf_file_delete_permission_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-del.disabled', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_dmsf_file_delete_permission_on
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-del.disabled)', text: l(:button_delete)
|
||||
assert_select 'a.icon-del', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_dmsf_file_edit_content
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.dmsf-icon-file', text: l(:button_edit_content)
|
||||
end
|
||||
end
|
||||
|
||||
def test_dmsf_file_edit_content_webdav_disabled
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => nil } do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(dmsf-icon-file)'
|
||||
end
|
||||
end
|
||||
|
||||
def test_dmsf_file_edit_content_webdav_readonly
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_ONLY' } do
|
||||
get :dmsf, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.dmsf-icon-file.disabled', text: l(:button_edit_content)
|
||||
end
|
||||
end
|
||||
|
||||
def test_dmsf_file_watch
|
||||
get :dmsf, params: { id: @file1.project, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-fav-off', text: l(:button_watch)
|
||||
end
|
||||
|
||||
def test_dmsf_file_unwatch
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@file1.add_watcher @jsmith
|
||||
get :dmsf, params: { id: @file1.project, ids: ["file-#{@file1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @file1.project, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-fav', text: l(:button_unwatch)
|
||||
end
|
||||
|
||||
def test_dmsf_file_link
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
|
||||
get :dmsf, params: { id: @file_link6.project.id, folder_id: @file_link6.dmsf_folder,
|
||||
ids: ["file-link-#{@file_link6.id}"] }
|
||||
get '/projects/dmsf/context_menu',
|
||||
params: { id: @file_link6.project.id, folder_id: @file_link6.dmsf_folder,
|
||||
ids: ["file-link-#{@file_link6.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit', text: l(:button_edit)
|
||||
assert_select 'a.icon-lock', text: l(:button_lock)
|
||||
@ -209,10 +225,12 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_file_link_locked
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert @file_link2.target_file.locked?
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @file_link2.project.id, folder_id: @file_link2.dmsf_folder.id,
|
||||
ids: ["file-link-#{@file_link2.id}"] }
|
||||
get '/projects/dmsf/context_menu',
|
||||
params: { id: @file_link2.project.id, folder_id: @file_link2.dmsf_folder.id,
|
||||
ids: ["file-link-#{@file_link2.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit.disabled', text: l(:button_edit)
|
||||
assert_select 'a.icon-unlock', text: l(:button_unlock)
|
||||
@ -223,14 +241,16 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_url_link
|
||||
get :dmsf, params: { id: @url_link5.project.id, ids: ["url-link-#{@url_link5.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get :'/projects/dmsf/context_menu', params: { id: @url_link5.project.id, ids: ["url-link-#{@url_link5.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-del', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_dmsf_folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit', text: l(:button_edit)
|
||||
assert_select 'a.icon-lock', text: l(:button_lock)
|
||||
@ -243,9 +263,10 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_folder_locked
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert @folder5.locked?
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit.disabled', text: l(:button_edit)
|
||||
assert_select 'a.icon-unlock', text: l(:button_unlock)
|
||||
@ -256,26 +277,27 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_folder_locked_force_unlock_permission_off
|
||||
@request.session[:user_id] = @dlopper.id
|
||||
get :dmsf, params: { id: @folder2.project.id, ids: ["folder-#{@folder2.id}"] }
|
||||
post '/login', params: { username: 'dlopper', password: 'foo' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder2.project.id, ids: ["folder-#{@folder2.id}"] }
|
||||
assert_response :success
|
||||
# @folder2 is locked by @jsmith, therefore @dlopper can't unlock it
|
||||
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock)
|
||||
end
|
||||
|
||||
def test_dmsf_folder_locked_force_unlock_permission_om
|
||||
@request.session[:user_id] = @dlopper.id
|
||||
post '/login', params: { username: 'dlopper', password: 'foo' }
|
||||
@role_developer.add_permission! :force_file_unlock
|
||||
get :dmsf, params: { id: @folder2.project.id, ids: ["folder-#{@folder2.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder2.project.id, ids: ["folder-#{@folder2.id}"] }
|
||||
assert_response :success
|
||||
# @folder2 is locked by @jsmith, but @dlopper can unlock it
|
||||
assert_select 'a.icon-unlock.disabled', text: l(:button_unlock), count: 0
|
||||
end
|
||||
|
||||
def test_dmsf_folder_notification_on
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@folder5.notify_activate
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-email', text: l(:label_notifications_off)
|
||||
assert_select 'a.icon-email-add', text: l(:label_notifications_on), count: 0
|
||||
@ -283,9 +305,10 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_folder_manipulation_permmissions_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit.disabled', text: l(:button_edit)
|
||||
assert_select 'a.icon-lock.disabled', text: l(:button_lock)
|
||||
@ -295,8 +318,9 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_folder_manipulation_permmissions_on
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-edit.disabled)', text: l(:button_edit)
|
||||
assert_select 'a:not(icon-lock.disabled)', text: l(:button_lock)
|
||||
@ -306,34 +330,39 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_folder_email_permmissions_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :email_documents
|
||||
get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-email.disabled', text: l(:field_mail)
|
||||
end
|
||||
|
||||
def test_dmsf_folder_email_permmissions_on
|
||||
get :dmsf, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-email.disabled)', text: l(:field_mail)
|
||||
end
|
||||
|
||||
def test_dmsf_folder_watch
|
||||
get :dmsf, params: { id: @folder1.project, ids: ["folder-#{@folder1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder1.project, ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-fav-off', text: l(:button_watch)
|
||||
end
|
||||
|
||||
def test_dmsf_folder_unwatch
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@folder1.add_watcher @jsmith
|
||||
get :dmsf, params: { id: @folder1.project, ids: ["folder-#{@folder1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder1.project, ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-fav', text: l(:button_unwatch)
|
||||
end
|
||||
|
||||
def test_dmsf_folder_link
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder_link1.project.id, ids: ["folder-#{@folder_link1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder_link1.project.id, ids: ["folder-#{@folder_link1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit', text: l(:button_edit)
|
||||
assert_select 'a.icon-lock', text: l(:button_lock)
|
||||
@ -345,9 +374,10 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_folder_link_locked
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@folder_link1.target_folder.lock!
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :dmsf, params: { id: @folder_link1.project.id, ids: ["folder-#{@folder_link1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { id: @folder_link1.project.id, ids: ["folder-#{@folder_link1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit.disabled', text: l(:button_edit)
|
||||
assert_select 'a.icon-unlock', text: l(:button_unlock)
|
||||
@ -358,7 +388,8 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_multiple
|
||||
get :dmsf, params: { id: @project1.id, ids: ["folder-#{@folder1.id}", "file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { id: @project1.id, ids: ["folder-#{@folder1.id}", "file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-edit', text: l(:button_edit), count: 0
|
||||
assert_select 'a.icon-unlock', text: l(:button_unlock), count: 0
|
||||
@ -371,78 +402,90 @@ class DmsfContextMenusControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_dmsf_project_watch
|
||||
get :dmsf, params: { ids: ["project-#{@project1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/context_menu', params: { ids: ["project-#{@project1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-fav-off', text: l(:button_watch)
|
||||
end
|
||||
|
||||
def test_dmsf_project_unwatch
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@project1.add_watcher @jsmith
|
||||
get :dmsf, params: { ids: ["project-#{@project1.id}"] }
|
||||
get '/projects/dmsf/context_menu', params: { ids: ["project-#{@project1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-fav', text: l(:button_unwatch)
|
||||
end
|
||||
|
||||
def test_trash_file
|
||||
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@file1.project.id}/dmsf/trash/context_menu", params: { 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)
|
||||
end
|
||||
|
||||
def test_trash_file_manipulation_permissions_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_delete
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get "/projects/#{@file1.project.id}/dmsf/trash/context_menu", params: { ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-cancel.disabled', text: l(:title_restore)
|
||||
assert_select 'a.icon-del.disabled', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_file_manipulation_permissions_on
|
||||
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@file1.project.id}/dmsf/trash/context_menu", params: { ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore)
|
||||
assert_select 'a:not(icon-del.disabled)', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_file_delete_permissions_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_delete
|
||||
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
get "/projects/#{@file1.project.id}/dmsf/trash/context_menu", params: { ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-del.disabled', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_file_delete_permissions_on
|
||||
get :trash, params: { id: @file1.project.id, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@file1.project.id}/dmsf/trash/context_menu", params: { ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-del.disabled)', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_folder
|
||||
get :trash, params: { id: @folder5.project.id, ids: ["folder-#{@folder5.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@folder5.project.id}/dmsf/trash/context_menu", params: { ids: ["folder-#{@folder5.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-cancel', text: l(:title_restore)
|
||||
assert_select 'a.icon-del', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_folder_manipulation_permissions_off
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
get "/projects/#{@folder1.project.id}/dmsf/trash/context_menu", params: { ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-cancel.disabled', text: l(:title_restore)
|
||||
assert_select 'a.icon-del.disabled', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_folder_manipulation_permissions_on
|
||||
get :trash, params: { id: @folder1.project.id, ids: ["folder-#{@folder1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@folder1.project.id}/dmsf/trash/context_menu", params: { ids: ["folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a:not(icon-cancel.disabled)', text: l(:title_restore)
|
||||
assert_select 'a:not(icon-del.disabled)', text: l(:button_delete)
|
||||
end
|
||||
|
||||
def test_trash_multiple
|
||||
get :trash, params: { id: @project1.id, ids: ["file-#{@file1.id}", "folder-#{@folder1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@file1.project.id}/dmsf/trash/context_menu",
|
||||
params: { ids: ["file-#{@file1.id}", "folder-#{@folder1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'a.icon-cancel', text: l(:title_restore)
|
||||
assert_select 'a.icon-del', text: l(:button_delete)
|
||||
|
||||
@ -34,21 +34,21 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
@link1 = DmsfLink.find 1
|
||||
@custom_field = CustomField.find 21
|
||||
@custom_value = CustomValue.find 21
|
||||
User.current = nil
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
default_url_options[:host] = 'http://example.com'
|
||||
default_url_options[:host] = 'www.example.com'
|
||||
end
|
||||
|
||||
def test_edit_folder_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :edit, params: { id: @project1, folder_id: @folder1 }
|
||||
get "/projects/#{@project1.id}/dmsf/edit", params: { folder_id: @folder1 }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_edit_folder_allowed
|
||||
# Permissions OK
|
||||
get :edit, params: { id: @project1, folder_id: @folder1 }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf/edit", params: { folder_id: @folder1.id }
|
||||
assert_response :success
|
||||
# Custom fields
|
||||
assert_select 'label', { text: @custom_field.name }
|
||||
@ -64,35 +64,42 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_edit_folder_redirection_to_the_parent_folder
|
||||
post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
||||
dmsf_folder: { title: @folder2.title, description: @folder2.description } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/save",
|
||||
params: { folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
||||
dmsf_folder: { title: @folder2.title, description: 'Updated folder' } }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.dmsf_folder.id)
|
||||
end
|
||||
|
||||
def test_edit_folder_redirection_to_the_same_folder
|
||||
post :save, params: { id: @project1, folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
||||
dmsf_folder: { title: @folder2.title, description: @folder2.description,
|
||||
redirect_to_folder_id: @folder2.id } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/save",
|
||||
params: { folder_id: @folder2.id, parent_id: @folder2.dmsf_folder.id,
|
||||
dmsf_folder: { title: @folder2.title, description: 'Updated folder',
|
||||
redirect_to_folder_id: @folder2.id } }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.id)
|
||||
end
|
||||
|
||||
def test_trash_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_delete
|
||||
get :trash, params: { id: @project1 }
|
||||
get "/projects/#{@project1.id}/dmsf/trash"
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_trash_allowed
|
||||
# Permissions OK
|
||||
get :trash, params: { id: @project1 }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf/trash"
|
||||
assert_response :success
|
||||
assert_select 'h2', { text: l(:link_trash_bin) }
|
||||
end
|
||||
|
||||
def test_trash
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@folder1.delete commit: false
|
||||
get :trash, params: { id: @project1 }
|
||||
get "/projects/#{@project1.id}/dmsf/trash"
|
||||
assert_response :success
|
||||
assert_select 'a', href: dmsf_folder_path(id: @folder1.project.id, folder_id: @folder1.id)
|
||||
assert_select 'a', href: dmsf_folder_path(id: @folder2.project.id, folder_id: @folder2.id)
|
||||
@ -101,7 +108,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_empty_trash
|
||||
get :empty_trash, params: { id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf/empty_trash"
|
||||
assert_equal 0, DmsfFolder.deleted.where(project_id: @project1.id).all.size
|
||||
assert_equal 0, DmsfFile.deleted.where(project_id: @project1.id).all.size
|
||||
assert_equal 0, DmsfLink.deleted.where(project_id: @project1.id).all.size
|
||||
@ -110,89 +118,103 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_empty_trash_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_delete
|
||||
get :empty_trash, params: { id: @project1.id }
|
||||
get "/projects/#{@project1.id}/dmsf/empty_trash"
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_delete_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :delete, params: { id: @project1, folder_id: @folder1.id, commit: false }
|
||||
delete "/projects/#{@project1.id}/dmsf/delete", params: { folder_id: @folder1.id, commit: false }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_delete_locked
|
||||
# Permissions OK but the folder is locked
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1, folder_id: @folder2.id)
|
||||
get :delete, params: { id: @project1, folder_id: @folder2.id, commit: false }
|
||||
delete "/projects/#{@project1.id}/dmsf/delete", params: { folder_id: @folder2.id, commit: false }
|
||||
assert_response :redirect
|
||||
assert_include l(:error_folder_is_locked), flash[:error]
|
||||
end
|
||||
|
||||
def test_delete_ok
|
||||
# Empty and not locked folder
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1, folder_id: @folder1.dmsf_folder)
|
||||
get :delete, params: { id: @project1, folder_id: @folder1, parent_id: @folder1.dmsf_folder, commit: false }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.dmsf_folder)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1)
|
||||
delete "/projects/#{@project1.id}/dmsf/delete",
|
||||
params: { folder_id: @folder1.id, commit: false }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1)
|
||||
end
|
||||
|
||||
def test_delete_subfolder
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1, folder_id: @folder2.dmsf_folder)
|
||||
get :delete, params: { id: @project1, folder_id: @folder2, parent_id: @folder2.dmsf_folder, commit: false }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder2.dmsf_folder)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1, folder_id: @folder1.id)
|
||||
delete "/projects/#{@folder2.project.id}/dmsf/delete",
|
||||
params: { folder_id: @folder2.id, parent_id: @folder1.id, commit: false }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.id)
|
||||
end
|
||||
|
||||
def test_restore_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_developer.remove_permission! :folder_manipulation
|
||||
@folder4.deleted = 1
|
||||
@folder4.save
|
||||
get :restore, params: { id: @folder4.project.id, folder_id: @folder4.id }
|
||||
get "/projects/#{@folder4.project.id}/dmsf/restore", params: { folder_id: @folder4.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_restore_ok
|
||||
# Permissions OK
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1)
|
||||
@folder1.deleted = 1
|
||||
@folder1.save
|
||||
get :restore, params: { id: @project1, folder_id: @folder1.id }
|
||||
get "/projects/#{@project1.id}/dmsf/restore", params: { folder_id: @folder1.id }
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
def test_delete_entries_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
|
||||
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@link1.id}",
|
||||
"file-link-#{@link2.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { delete_entries: true,
|
||||
ids: ["folder-#{@folder1.id}", "file-#{@file1.id}", "folder-link-#{@link1.id}",
|
||||
"file-link-#{@link2.id}"] }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_delete_entries_ok
|
||||
# Permissions OK
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1)
|
||||
flash[:error] = nil
|
||||
get :entries_operation, params: { id: @project1, delete_entries: 'Delete',
|
||||
ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@link2.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { delete_entries: true, ids: ["folder-#{@folder7.id}", "file-#{@file1.id}", "file-link-#{@link2.id}"] }
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_restore_entries
|
||||
# Restore
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1)
|
||||
flash[:error] = nil
|
||||
get :entries_operation, params: { id: @project1, restore_entries: 'Restore',
|
||||
ids: ["file-#{@file1.id}", "file-link-#{@link2.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { restore_entries: true, ids: ["file-#{@file1.id}", "file-link-#{@link2.id}"] }
|
||||
assert_response :redirect
|
||||
assert_nil flash[:error]
|
||||
end
|
||||
|
||||
def test_show
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => '1', 'dmsf_webdav_strategy' => 'WEBDAV_READ_WRITE' } do
|
||||
get :show, params: { id: @project1.id }
|
||||
get "/projects/#{@project1.id}/dmsf"
|
||||
assert_response :success
|
||||
# New file link
|
||||
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload'
|
||||
@ -217,15 +239,17 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_show_webdav_disabled
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_webdav' => nil } do
|
||||
get :show, params: { id: @project1.id }
|
||||
get "/projects/#{@project1.id}/dmsf"
|
||||
assert_response :success
|
||||
assert_select 'a.webdav', text: 'WebDAV', count: 0
|
||||
end
|
||||
end
|
||||
|
||||
def test_show_filters_found
|
||||
get :show, params: { id: @project1.id, f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['Zero'] } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf", params: { f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['Zero'] } }
|
||||
assert_response :success
|
||||
# 'Zero Size File' document
|
||||
assert_select 'a', text: @file10.title
|
||||
@ -234,15 +258,17 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_show_filters_not_found
|
||||
get :show, params: { id: @project1.id, f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['xxx'] } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf", params: { f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['xxx'] } }
|
||||
assert_response :success
|
||||
# 'Zero Size File' document
|
||||
assert_select 'a', text: @file10.title, count: 0
|
||||
end
|
||||
|
||||
def test_show_filters_custom_field
|
||||
get :show, params: { id: @project1.id, set_filter: '1', f: ['cf_21', ''], op: { 'cf_21' => '=' },
|
||||
v: { 'cf_21' => ['User documentation'] } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf",
|
||||
params: { set_filter: '1', f: ['cf_21', ''], op: { 'cf_21' => '=' }, v: { 'cf_21' => ['User documentation'] } }
|
||||
assert_response :success
|
||||
# Folder 1 with Tag=User documentation
|
||||
assert_select 'a', text: @folder1.title
|
||||
@ -251,27 +277,31 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_show_without_file_manipulation
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
get :show, params: { id: @project1.id }
|
||||
get "/projects/#{@project1.id}/dmsf"
|
||||
assert_response :success
|
||||
# New file link should be missing
|
||||
assert_select 'a[href$=?]', '/dmsf/upload/multi_upload', count: 0
|
||||
end
|
||||
|
||||
def test_show_csv
|
||||
get :show, params: { id: @project1.id, format: 'csv' }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf", params: { format: 'csv' }
|
||||
assert_response :success
|
||||
assert @response.media_type.include?('text/csv')
|
||||
end
|
||||
|
||||
def test_show_folder_doesnt_correspond_the_project
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert @project1 != @folder3.project
|
||||
get :show, params: { id: @project1.id, folder_id: @folder3.id }
|
||||
get "/projects/#{@project1.id}/dmsf", params: { folder_id: @folder3.id }
|
||||
assert_response :not_found
|
||||
end
|
||||
|
||||
def test_folder_link_to_folder
|
||||
get :show, params: { id: @link1.project_id, folder_id: @link1.dmsf_folder_id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@link1.project_id}/dmsf", params: { folder_id: @link1.dmsf_folder_id }
|
||||
assert_response :success
|
||||
assert_select 'a', text: @link1.title, count: 1
|
||||
assert_select 'a[href$=?]',
|
||||
@ -280,121 +310,140 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_folder_link_to_project
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@link1.target_project_id = @project2.id
|
||||
@link1.target_id = nil
|
||||
assert @link1.save
|
||||
get :show, params: { id: @link1.project_id, folder_id: @link1.dmsf_folder_id }
|
||||
get "/projects/#{@link1.project_id}/dmsf", params: { folder_id: @link1.dmsf_folder_id }
|
||||
assert_response :success
|
||||
assert_select 'a', text: @link1.title, count: 1
|
||||
assert_select 'a[href$=?]', "/projects/#{@project2.identifier}/dmsf", count: 1
|
||||
end
|
||||
|
||||
def test_new_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :new, params: { id: @project1, parent_id: nil }
|
||||
get "/projects/#{@project1.id}/dmsf/new"
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_new
|
||||
get :new, params: { id: @project1, parent_id: nil }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf/new"
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_email_entries_email_from_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :email_documents
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_documents_email_from' => 'karel.picman@kontron.com' } do
|
||||
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries", params: { email_entries: true, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :forbidden
|
||||
end
|
||||
end
|
||||
|
||||
def test_email_entries_email_from
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_documents_email_from' => 'karel.picman@kontron.com' } do
|
||||
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries", params: { email_entries: true, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_from']
|
||||
end
|
||||
end
|
||||
|
||||
def test_email_entries_reply_to
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_documents_email_reply_to' => 'karel.picman@kontron.com' } do
|
||||
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries", params: { email_entries: true, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select "input:match('value', ?)", Setting.plugin_redmine_dmsf['dmsf_documents_email_reply_to']
|
||||
end
|
||||
end
|
||||
|
||||
def test_email_entries_links_only
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_documents_email_links_only' => '1' } do
|
||||
get :entries_operation, params: { id: @project1, email_entries: 'Email', ids: ["file-#{@file1.id}"] }
|
||||
post "/projects/#{@project1.id}/dmsf/entries", params: { email_entries: true, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'input[id=email_links_only][value=1]'
|
||||
end
|
||||
end
|
||||
|
||||
def test_entries_email
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
zip_file = Tempfile.new('test', Rails.root.join('tmp'))
|
||||
get :entries_email,
|
||||
params: { id: @project1, email: { to: 'to@test.com', from: 'from@test.com', subject: 'subject', body: 'body',
|
||||
expired_at: '2015-01-01', folders: [], files: [@file1.id],
|
||||
zipped_content: zip_file.path } }
|
||||
post "/projects/#{@project1.id}/dmsf/entries/email",
|
||||
params: { email: { to: 'to@test.com', from: 'from@test.com', subject: 'subject', body: 'body',
|
||||
expired_at: '2015-01-01', folders: [], files: [@file1.id],
|
||||
zipped_content: zip_file.path } }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1)
|
||||
ensure
|
||||
zip_file.unlink
|
||||
end
|
||||
|
||||
def test_add_email_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :view_dmsf_files
|
||||
get :add_email, params: { id: @project1.id }, xhr: true
|
||||
get '/projects/dmsf/add_email', params: { id: @project1.id }, xhr: true
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_add_email
|
||||
get :add_email, params: { id: @project1.id }, xhr: true
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/add_email', params: { id: @project1.id }, xhr: true
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_append_email_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :view_dmsf_files
|
||||
post :append_email, params: { id: @project1, user_ids: @project1.members.collect { |m| m.user.id },
|
||||
format: 'js' }
|
||||
post '/projects/dmsf/append_email',
|
||||
params: { id: @project1, user_ids: @project1.members.collect { |m| m.user.id }, format: 'js' }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_append_email
|
||||
post :append_email, params: { id: @project1, user_ids: @project1.members.collect { |m| m.user.id }, format: 'js' }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post '/projects/dmsf/append_email',
|
||||
params: { id: @project1, user_ids: @project1.members.collect { |m| m.user.id }, format: 'js' }
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_autocomplete_for_user_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :view_dmsf_files
|
||||
get :autocomplete_for_user, params: { id: @project1.id }, xhr: true
|
||||
get '/projects/dmsf/autocomplete_for_user', params: { id: @project1.id }, xhr: true
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_autocomplete_for_user
|
||||
get :autocomplete_for_user, params: { id: @project1 }, xhr: true
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/projects/dmsf/autocomplete_for_user', params: { id: @project1 }, xhr: true
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_create_folder_in_root
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfFolder.count', +1 do
|
||||
post :create, params: { id: @project1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
||||
post "/projects/#{@project1.id}/dmsf/create",
|
||||
params: { dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: nil)
|
||||
end
|
||||
|
||||
def test_create_folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfFolder.count', +1 do
|
||||
post :create, params: { id: @project1.id, parent_id: @folder1.id,
|
||||
dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
||||
post "/projects/#{@project1.id}/dmsf/create",
|
||||
params: { parent_id: @folder1.id, dmsf_folder: { title: 'New folder', description: 'Unit tests' } }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1)
|
||||
end
|
||||
|
||||
def test_show_with_sub_projects
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_projects_as_subfolders' => '1' } do
|
||||
get :show, params: { id: @project1.id }
|
||||
get "/projects/#{@project1.id}/dmsf"
|
||||
assert_response :success
|
||||
# @project5 is as a sub-folder
|
||||
assert_select "tr##{@project5.id}pspan", count: 1
|
||||
@ -402,21 +451,24 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_show_without_sub_projects
|
||||
get :show, params: { id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf"
|
||||
assert_response :success
|
||||
# @project5 is not as a sub-folder
|
||||
assert_select "tr##{@project5.id}pspan", count: 0
|
||||
end
|
||||
|
||||
def test_show_default_sort_column
|
||||
get :show, params: { id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/dmsf"
|
||||
assert_response :success
|
||||
# The default column Title's header is displayed as sorted '^'
|
||||
assert_select 'a.icon-sorted-desc', text: l(:label_column_title)
|
||||
end
|
||||
|
||||
def test_index
|
||||
get :index
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf'
|
||||
assert_response :success
|
||||
# Projects
|
||||
assert_select 'table.dmsf' do
|
||||
@ -436,8 +488,8 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_index_non_member
|
||||
@request.session[:user_id] = @dlopper.id
|
||||
get :index
|
||||
post '/login', params: { username: 'dlopper', password: 'foo' }
|
||||
get '/dmsf'
|
||||
assert_response :success
|
||||
assert_select 'table.dmsf' do
|
||||
assert_select 'tr' do
|
||||
@ -450,46 +502,54 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_index_no_membership
|
||||
@request.session[:user_id] = @someone.id
|
||||
get :index
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
get '/dmsf'
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copymove_authorize_admin
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :copymove, params: { id: @file1.project, folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
get "/projects/#{@project1.id}/entries/copymove",
|
||||
params: { folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_template 'copymove'
|
||||
end
|
||||
|
||||
def test_copymove_authorize_non_member
|
||||
@request.session[:user_id] = @someone.id
|
||||
get :copymove, params: { id: @file1.project, folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
get "/projects/#{@project1.id}/entries/copymove",
|
||||
params: { folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copymove_authorize_member_no_module
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@file1.project.disable_module! :dmsf
|
||||
get :copymove, params: { id: @file1.project, folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
get "/projects/#{@project1.id}/entries/copymove",
|
||||
params: { folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copymove_authorize_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :folder_manipulation
|
||||
get :copymove, params: { id: @file1.project, folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
get "/projects/#{@project1.id}/entries/copymove",
|
||||
params: { folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copymove_target_folder
|
||||
get :copymove, params: { id: @file1.project, folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/projects/#{@project1.id}/entries/copymove",
|
||||
params: { folder_id: @file1.dmsf_folder, ids: ["file-#{@file1.id}"] }
|
||||
assert_response :success
|
||||
assert_template 'copymove'
|
||||
end
|
||||
|
||||
def test_entries_copy
|
||||
post :entries_operation,
|
||||
params: { id: @file1.project,
|
||||
dmsf_entries: { target_project_id: @folder1.project.id, target_folder_id: @folder1.id },
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @folder1.project.id, target_folder_id: @folder1.id },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
copy_entries: true }
|
||||
assert_response :redirect
|
||||
@ -497,9 +557,9 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_entries_copy_to_the_same_folder
|
||||
post :entries_operation,
|
||||
params: { id: @file1.project,
|
||||
dmsf_entries: { target_project_id: @file1.project.id, target_folder_id: @file1.dmsf_folder },
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @file1.project.id, target_folder_id: @file1.dmsf_folder },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
copy_entries: true }
|
||||
assert_response :redirect
|
||||
@ -508,9 +568,9 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_entries_move_recursion
|
||||
# Move a folder under the same folder
|
||||
post :entries_operation,
|
||||
params: { id: @folder1.project,
|
||||
dmsf_entries: { target_project_id: @folder2.project.id, target_folder_id: @folder2.id },
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @folder2.project.id, target_folder_id: @folder2.id },
|
||||
ids: ["folder-#{@folder1.id}"],
|
||||
move_entries: true }
|
||||
assert_response :redirect
|
||||
@ -519,9 +579,9 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_entries_move_infinity
|
||||
# Move the folder to itself
|
||||
post :entries_operation,
|
||||
params: { id: @folder1.project,
|
||||
dmsf_entries: { target_project_id: @folder2.project.id, target_folder_id: @folder2.id },
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @folder2.project.id, target_folder_id: @folder2.id },
|
||||
ids: ["folder-#{@folder2.id}"],
|
||||
move_entries: true }
|
||||
assert_response :redirect
|
||||
@ -529,50 +589,50 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_entries_copy_to_locked_folder
|
||||
@request.session[:user_id] = @admin.id
|
||||
post :entries_operation,
|
||||
params: { id: @folder1.project,
|
||||
dmsf_entries: { target_project_id: @folder2.project.id, target_folder_id: @folder2.id },
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @folder2.project.id, target_folder_id: @folder2.id },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
move_entries: true }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_entries_copy_to_dmsf_not_enabled
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@project2.disable_module! :dmsf
|
||||
post :entries_operation,
|
||||
params: { id: @project2.id,
|
||||
dmsf_entries: { target_project_id: @project2.id },
|
||||
post "/projects/#{@project2.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @project2.id },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
copy_entries: true }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_entries_copy_to_dmsf_enabled
|
||||
post :entries_operation,
|
||||
params: { id: @project2.id,
|
||||
dmsf_entries: { target_project_id: @project2.id },
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project2.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @project2.id },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
copy_entries: true }
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
def test_entries_copy_to_as_non_member
|
||||
@request.session[:user_id] = @someone.id
|
||||
post :entries_operation,
|
||||
params: { id: @project2.id,
|
||||
dmsf_entries: { target_project_id: @project2.id },
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
post "/projects/#{@project2.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_project_id: @project2.id },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
copy_entries: true }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_copymove_new_fast_links_enabled
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
member = Member.find_by(user_id: @jsmith.id, project_id: @project1.id)
|
||||
assert member
|
||||
member.dmsf_fast_links = true
|
||||
member.save
|
||||
get :copymove, params: { id: @file1.project, folder_id: @file1.dmsf_folder, ids: ["file-#{@file4.id}"] }
|
||||
get "/projects/#{@project1.id}/entries/copymove",
|
||||
params: { folder_id: @file1.dmsf_folder, ids: ["file-#{@file4.id}"] }
|
||||
assert_response :success
|
||||
assert_select 'label', { count: 0, text: l(:label_target_project) }
|
||||
assert_select 'label', { count: 0, text: "#{l(:label_target_folder)}#" }
|
||||
@ -580,9 +640,9 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_entries_move_fast_links_enabled
|
||||
# Target project is not given
|
||||
post :entries_operation,
|
||||
params: { id: @project1.id,
|
||||
dmsf_entries: { target_folder_id: @folder1.id },
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/projects/#{@project1.id}/dmsf/entries",
|
||||
params: { dmsf_entries: { target_folder_id: @folder1.id },
|
||||
ids: ["file-#{@file1.id}"],
|
||||
move_entries: true }
|
||||
assert_response :redirect
|
||||
|
||||
@ -26,30 +26,32 @@ class DmsfFolderPermissionsControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def setup
|
||||
super
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
end
|
||||
|
||||
def test_new
|
||||
get :new, params: { project_id: @project1, dmsf_folder_id: @folder7, format: 'js' }, xhr: true
|
||||
get '/dmsf_folder_permissions/new',
|
||||
params: { project_id: @project1.id, dmsf_folder_id: @folder7.id, format: 'js' },
|
||||
xhr: true
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
assert @response.media_type.include?('text/javascript')
|
||||
end
|
||||
|
||||
def test_autocomplete_for_user
|
||||
get :autocomplete_for_user,
|
||||
params: { project_id: @project1, dmsf_folder_id: @folder7, q: 'smi', format: 'js' },
|
||||
get '/dmsf_folder_permissions/autocomplete_for_user',
|
||||
params: { project_id: @project1.id, dmsf_folder_id: @folder7.id, q: 'smi', format: 'js' },
|
||||
xhr: true
|
||||
assert_response :success
|
||||
assert_include @jsmith.name, response.body
|
||||
end
|
||||
|
||||
def test_append
|
||||
get :new,
|
||||
params: { project_id: @project1, dmsf_folder_id: @folder7, user_ids: [@jsmith.id], format: 'js' },
|
||||
xhr: true
|
||||
post '/dmsf_folder_permissions/append',
|
||||
params: { project_id: @project1.id, dmsf_folder_id: @folder7.id, user_ids: [@jsmith.id], format: 'js' },
|
||||
xhr: true
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
assert_template 'append'
|
||||
assert @response.content_type.match?(%r{^text/javascript})
|
||||
end
|
||||
end
|
||||
|
||||
@ -30,62 +30,66 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
super
|
||||
@file_link = DmsfLink.find 1
|
||||
@url_link = DmsfLink.find 5
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
end
|
||||
|
||||
def test_authorize_admin
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :new, params: { project_id: @project1.id }
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
get '/dmsf_links/new', params: { project_id: @project1.id }
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_authorize_non_member
|
||||
@request.session[:user_id] = @someone.id
|
||||
get :new, params: { project_id: @project2.id }
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
get '/dmsf_links/new', params: { project_id: @project2.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_member_ok
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
get :new, params: { project_id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf_links/new', params: { project_id: @project1.id }
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_authorize_member_no_module
|
||||
# Without the module
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@project1.disable_module! :dmsf
|
||||
get :new, params: { project_id: @project1.id }
|
||||
get '/dmsf_links/new', params: { project_id: @project1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_forbidden
|
||||
# Without permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
get :new, params: { project_id: @project1.id }
|
||||
get '/dmsf_links/new', params: { project_id: @project1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_new
|
||||
get :new, params: { project_id: @project1.id, type: 'link_to' }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf_links/new', params: { project_id: @project1.id, type: 'link_to' }
|
||||
assert_response :success
|
||||
assert_select 'label', { text: l(:label_target_project) }
|
||||
end
|
||||
|
||||
def test_new_fast_links_enabled
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
member = Member.find_by(user_id: @jsmith.id, project_id: @project1.id)
|
||||
assert member
|
||||
member.dmsf_fast_links = true
|
||||
member.save
|
||||
get :new, params: { project_id: @project1.id, type: 'link_to' }
|
||||
get '/dmsf_links/new', params: { project_id: @project1.id, type: 'link_to' }
|
||||
assert_response :success
|
||||
assert_select 'label', { count: 0, text: l(:label_target_project) }
|
||||
end
|
||||
|
||||
def test_create_file_link_from_f1
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
# 1. File link in a folder from another folder
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
target_project_id: @project2.id,
|
||||
dmsf_folder_id: @folder1.id,
|
||||
@ -95,13 +99,14 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
type: 'link_from'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.id)
|
||||
end
|
||||
|
||||
def test_create_file_link_from_f2
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
# 2. File link in a folder from another root folder
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
dmsf_folder_id: @folder1.id,
|
||||
target_project_id: @project2.id,
|
||||
@ -111,14 +116,15 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
type: 'link_from'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.id)
|
||||
end
|
||||
|
||||
def test_create_file_link_from_f3
|
||||
# 3. File link in a root folder from another folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
target_project_id: @project2.id,
|
||||
target_file_id: @file6.id,
|
||||
target_folder_id: @folder3.id,
|
||||
@ -131,9 +137,10 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_create_file_link_from_f4
|
||||
# 4. File link in a root folder from another root folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
target_project_id: @project2.id,
|
||||
target_file_id: @file2.id,
|
||||
name: 'file_link',
|
||||
@ -145,38 +152,41 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_create_folder_link_from_d1
|
||||
# 1. Folder link in a folder from another folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
dmsf_folder_id: @folder1,
|
||||
post '/dmsf_links', 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, folder_id: @folder1)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.id)
|
||||
end
|
||||
|
||||
def test_create_folder_link_from_d2
|
||||
# 2. Folder link in a folder from another root folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
dmsf_folder_id: @folder1,
|
||||
post '/dmsf_links', 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, folder_id: @folder1)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.id)
|
||||
end
|
||||
|
||||
def test_create_folder_link_from_d3
|
||||
# 3. Folder link in a root folder from another folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
target_project_id: @project2.id,
|
||||
target_folder_id: @folder3.id,
|
||||
name: 'folder_link',
|
||||
@ -188,9 +198,10 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_create_folder_link_from_d4
|
||||
# 4. Folder link in a root folder from another root folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
target_project_id: @project2.id,
|
||||
name: 'folder_link',
|
||||
type: 'link_from'
|
||||
@ -201,25 +212,27 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_create_file_link_to_f1
|
||||
# 1. File link to a root folder from another folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
dmsf_file_id: @file1,
|
||||
post '/dmsf_links', 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
|
||||
assert_redirected_to dmsf_file_path(@file1)
|
||||
assert_redirected_to dmsf_file_path(@file1.id)
|
||||
end
|
||||
|
||||
def test_create_file_link_to_f2
|
||||
# 2. File link to a folder from another folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project2,
|
||||
dmsf_folder_id: @folder3,
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project2.id,
|
||||
dmsf_folder_id: @folder3.id,
|
||||
target_project_id: @project1.id,
|
||||
target_folder_id: @folder1.id,
|
||||
dmsf_file_id: @file6.id,
|
||||
@ -227,27 +240,29 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
type: 'link_to'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_file_path(@file6)
|
||||
assert_redirected_to dmsf_file_path(@file6.id)
|
||||
end
|
||||
|
||||
def test_create_file_link_to_f3
|
||||
# 3. File link to a root folder from another root folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
project_id: @project2,
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project2.id,
|
||||
target_project_id: @project1.id,
|
||||
dmsf_file_id: @file6.id,
|
||||
name: 'file_link',
|
||||
type: 'link_to'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_file_path(@file6)
|
||||
assert_redirected_to dmsf_file_path(@file6.id)
|
||||
end
|
||||
|
||||
def test_create_file_link_to_f4
|
||||
# 4. File link to a folder from another root folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project2,
|
||||
dmsf_folder_id: @folder3,
|
||||
target_project_id: @project1.id,
|
||||
@ -256,12 +271,13 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
type: 'link_to'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_file_path(@file6)
|
||||
assert_redirected_to dmsf_file_path(@file6.id)
|
||||
end
|
||||
|
||||
def test_create_external_link_from
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1,
|
||||
target_project_id: @project1.id,
|
||||
name: 'file_link',
|
||||
@ -274,8 +290,9 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
|
||||
def test_create_folder_link_to_f1
|
||||
# 1. Folder link to a root folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
dmsf_folder_id: @folder1.id,
|
||||
target_project_id: @project2.id,
|
||||
@ -283,13 +300,14 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
type: 'link_to'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.dmsf_folder)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.dmsf_folder_id)
|
||||
end
|
||||
|
||||
def test_create_folder_link_to_f2
|
||||
# 2. Folder link to a folder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.count', +1 do
|
||||
post :create, params: { dmsf_link: {
|
||||
post '/dmsf_links', params: { dmsf_link: {
|
||||
project_id: @project1.id,
|
||||
dmsf_folder_id: @folder1.id,
|
||||
target_project_id: @project2.id,
|
||||
@ -298,35 +316,40 @@ class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
|
||||
type: 'link_to'
|
||||
} }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.dmsf_folder)
|
||||
assert_redirected_to dmsf_folder_path(id: @project1, folder_id: @folder1.dmsf_folder_id)
|
||||
end
|
||||
|
||||
def test_destroy
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.visible.count', -1 do
|
||||
delete :destroy, params: { project_id: @project1, id: @file_link }
|
||||
delete "/dmsf_links/#{@file_link.id}", params: { project_id: @project1.id }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @file_link.project, folder_id: @file_link.dmsf_folder)
|
||||
assert_redirected_to dmsf_folder_path(id: @file_link.project, folder_id: @file_link.dmsf_folder_id)
|
||||
end
|
||||
|
||||
def test_destroy_in_subfolder
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfLink.visible.count', -1 do
|
||||
delete :destroy, params: { project_id: @url_link.project, id: @url_link, folder_id: @url_link.dmsf_folder }
|
||||
delete "/dmsf_links/#{@url_link.id}",
|
||||
params: { project_id: @url_link.project_id, folder_id: @url_link.dmsf_folder_id }
|
||||
end
|
||||
assert_redirected_to dmsf_folder_path(id: @url_link.project, folder_id: @url_link.dmsf_folder)
|
||||
assert_redirected_to dmsf_folder_path(id: @url_link.project, folder_id: @url_link.dmsf_folder_id)
|
||||
end
|
||||
|
||||
def test_restore_forbidden
|
||||
# Missing permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1)
|
||||
@role_manager.remove_permission! :file_manipulation
|
||||
get :restore, params: { project_id: @project1, id: @file_link }
|
||||
get "/dmsf/links/#{@file_link.id}/restore", params: { project_id: @project1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_restore_ok
|
||||
# Permissions OK
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@request.env['HTTP_REFERER'] = trash_dmsf_path(id: @project1)
|
||||
get :restore, params: { project_id: @project1, id: @file_link }
|
||||
get "/dmsf/links/#{@file_link.id}/restore", params: { project_id: @project1.id }
|
||||
assert_response :redirect
|
||||
end
|
||||
end
|
||||
|
||||
@ -25,17 +25,17 @@ class DmsfPublicUrlsControllerTest < RedmineDmsf::Test::TestCase
|
||||
fixtures :dmsf_public_urls, :dmsf_folders, :dmsf_files, :dmsf_file_revisions
|
||||
|
||||
def test_show_valid_url
|
||||
get :show, params: { token: 'd8d33e21914a433b280fdc94450ee212' }
|
||||
get '/dmsf_public_urls', params: { token: 'd8d33e21914a433b280fdc94450ee212' }
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_show_url_width_invalid_token
|
||||
get :show, params: { token: 'f8d33e21914a433b280fdc94450ee212' }
|
||||
get '/dmsf_public_urls', params: { token: 'f8d33e21914a433b280fdc94450ee212' }
|
||||
assert_response :not_found
|
||||
end
|
||||
|
||||
def test_show_url_that_has_expired
|
||||
get :show, params: { token: 'e8d33e21914a433b280fdc94450ee212' }
|
||||
get '/dmsf_public_urls', params: { token: 'e8d33e21914a433b280fdc94450ee212' }
|
||||
assert_response :not_found
|
||||
end
|
||||
end
|
||||
|
||||
@ -29,13 +29,14 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
|
||||
def setup
|
||||
super
|
||||
@query401 = Query.find 401
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
end
|
||||
|
||||
def test_user_pref_save_member
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.add_permission! :user_preferences
|
||||
post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v', fast_links: 1,
|
||||
act_as_attachable: 1, default_dmsf_query: @query401.id }
|
||||
post "/projects/#{@project1.id}/dmsf/state",
|
||||
params: { email_notify: 1, title_format: '%t_%v', fast_links: 1, act_as_attachable: 1,
|
||||
default_dmsf_query: @query401.id }
|
||||
assert_redirected_to settings_project_path(@project1, tab: 'dmsf')
|
||||
assert_not_nil flash[:notice]
|
||||
assert_equal flash[:notice], l(:notice_your_preferences_were_saved)
|
||||
@ -50,22 +51,23 @@ class DmsfStateControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_user_pref_save_member_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :user_preferences
|
||||
post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
|
||||
post "/projects/#{@project1.id}/dmsf/state", params: { email_notify: 1, title_format: '%t_%v' }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_user_pref_save_none_member
|
||||
# Non Member
|
||||
@request.session[:user_id] = @someone.id
|
||||
post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
post "/projects/#{@project1.id}/dmsf/state", params: { email_notify: 1, title_format: '%t_%v' }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_user_pref_save_admin
|
||||
# Admin - non member
|
||||
@request.session[:user_id] = @admin.id
|
||||
post :user_pref_save, params: { id: @project1.id, email_notify: 1, title_format: '%t_%v' }
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
post "/projects/#{@project1.id}/dmsf/state", params: { email_notify: 1, title_format: '%t_%v' }
|
||||
assert_redirected_to settings_project_path(@project1, tab: 'dmsf')
|
||||
assert_not_nil flash[:warning]
|
||||
assert_equal flash[:warning], l(:user_is_not_project_member)
|
||||
|
||||
@ -39,137 +39,151 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
@wfsa2 = DmsfWorkflowStepAssignment.find 2
|
||||
@revision1 = DmsfFileRevision.find 1
|
||||
@revision2 = DmsfFileRevision.find 2
|
||||
@request.env['HTTP_REFERER'] = dmsf_folder_path(id: @project1)
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
end
|
||||
|
||||
def test_authorize_admin
|
||||
# Admin
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :index
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
get '/dmsf_workflows'
|
||||
assert_response :success
|
||||
assert_template 'index'
|
||||
end
|
||||
|
||||
def test_authorize_member
|
||||
# Non member
|
||||
@request.session[:user_id] = @someone.id
|
||||
get :index, params: { project_id: @project1.id }
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
get '/dmsf_workflows', params: { project_id: @project1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_administration
|
||||
# Administration
|
||||
get :index
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf_workflows'
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorize_projects
|
||||
# Project
|
||||
get :index, params: { project_id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf_workflows', params: { project_id: @project1.id }
|
||||
assert_response :success
|
||||
assert_template 'index'
|
||||
end
|
||||
|
||||
def test_authorize_manage_workflows_forbidden
|
||||
# Without permissions
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :manage_workflows
|
||||
get :index, params: { project_id: @project1.id }
|
||||
get '/dmsf_workflows', params: { project_id: @project1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorization_file_approval_ok
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.add_permission! :file_approval
|
||||
@revision2.dmsf_workflow_id = @wf1.id
|
||||
get :start, params: { id: @revision2.dmsf_workflow_id, dmsf_file_revision_id: @revision2.id }
|
||||
get "/dmsf_workflows/#{@revision2.dmsf_workflow_id}/start", params: { dmsf_file_revision_id: @revision2.id }
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
def test_authorization_file_approval_forbidden
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :file_approval
|
||||
@revision2.dmsf_workflow_id = @wf1.id
|
||||
get :start, params: { id: @revision2.dmsf_workflow_id, dmsf_file_revision_id: @revision2.id }
|
||||
get "/dmsf_workflows/#{@revision2.dmsf_workflow_id}/start", params: { dmsf_file_revision_id: @revision2.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_authorization_no_module
|
||||
# Without the module
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.add_permission! :file_manipulation
|
||||
@project1.disable_module! :dmsf
|
||||
get :index, params: { project_id: @project1.id }
|
||||
get '/dmsf_workflows', params: { project_id: @project1.id }
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_index_administration
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :index
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
get '/dmsf_workflows'
|
||||
assert_response :success
|
||||
assert_template 'index'
|
||||
end
|
||||
|
||||
def test_index_project
|
||||
get :index, params: { project_id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf_workflows', params: { project_id: @project1.id }
|
||||
assert_response :success
|
||||
assert_template 'index'
|
||||
end
|
||||
|
||||
def test_new
|
||||
get :new, params: { project_id: @project1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get '/dmsf_workflows/new', params: { project_id: @project1.id }
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
end
|
||||
|
||||
def test_lock
|
||||
put :update, params: { id: @wf1.id, dmsf_workflow: { status: DmsfWorkflow::STATUS_LOCKED } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
patch "/dmsf_workflows/#{@wf1.id}", params: { 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] = @admin.id
|
||||
put :update, params: { id: @wf3.id, dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE } }
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
patch "/dmsf_workflows/#{@wf3.id}", params: { dmsf_workflow: { status: DmsfWorkflow::STATUS_ACTIVE } }
|
||||
@wf3.reload
|
||||
assert @wf3.active?, "#{@wf3.name} status is #{@wf3.status}"
|
||||
end
|
||||
|
||||
def test_show
|
||||
get :show, params: { id: @wf1.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/dmsf_workflows/#{@wf1.id}"
|
||||
assert_response :success
|
||||
assert_template 'show'
|
||||
end
|
||||
|
||||
def test_create
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfWorkflow.count', +1 do
|
||||
post :create, params: { dmsf_workflow: { name: 'wf4', project_id: @project1.id } }
|
||||
post '/dmsf_workflows', params: { dmsf_workflow: { name: 'wf4', project_id: @project1.id } }
|
||||
end
|
||||
assert_redirected_to settings_project_path(@project1, tab: 'dmsf_workflow')
|
||||
end
|
||||
|
||||
def test_create_with_the_same_name
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfWorkflow.count', 0 do
|
||||
post :create, params: { dmsf_workflow: { name: @wf1.name, project_id: @project1.id } }
|
||||
post '/dmsf_workflows', params: { dmsf_workflow: { name: @wf1.name, project_id: @project1.id } }
|
||||
end
|
||||
assert_response :success
|
||||
assert_select_error(/#{l('activerecord.errors.messages.taken')}$/)
|
||||
end
|
||||
|
||||
def test_update
|
||||
put :update, params: { id: @wf1.id, dmsf_workflow: { name: 'wf1a' } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
patch "/dmsf_workflows/#{@wf1.id}", params: { dmsf_workflow: { name: 'wf1a' } }
|
||||
@wf1.reload
|
||||
assert_equal 'wf1a', @wf1.name
|
||||
end
|
||||
|
||||
def test_destroy
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfWorkflow.count', -1 do
|
||||
delete :destroy, params: { id: @wf1.id }
|
||||
delete "/dmsf_workflows/#{@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
|
||||
assert_equal 0, DmsfWorkflowStep.where(dmsf_workflow_id: @wf1.id).all.size
|
||||
end
|
||||
|
||||
def test_add_step
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
assert_difference 'DmsfWorkflowStep.count', +1 do
|
||||
post :add_step, params: { commit: l(:dmsf_or), step: 1, name: '1st step', id: @wf1.id, user_ids: [@someone.id] }
|
||||
post "/dmsf_workflows/#{@wf1.id}/edit",
|
||||
params: { commit: l(:dmsf_or), step: 1, name: '1st step', user_ids: [@someone.id] }
|
||||
end
|
||||
assert_response :success
|
||||
ws = DmsfWorkflowStep.order(id: :desc).first
|
||||
@ -181,9 +195,10 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_remove_step
|
||||
n = DmsfWorkflowStep.where(dmsf_workflow_id: @wf1.id, step: 1).count
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
n = DmsfWorkflowStep.where(dmsf_workflow_id: @wf1.id, step: @wfs1.step).count
|
||||
assert_difference 'DmsfWorkflowStep.count', -n do
|
||||
delete :remove_step, params: { step: @wfs1.id, id: @wf1.id }
|
||||
delete "/dmsf_workflows/#{@wf1.id}/edit", params: { step: @wfs1.id }
|
||||
end
|
||||
assert_response :redirect
|
||||
ws = DmsfWorkflowStep.where(dmsf_workflow_id: @wf1.id).order(id: :asc).first
|
||||
@ -191,7 +206,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_reorder_steps_to_lower
|
||||
put :reorder_steps, params: { step: 1, id: @wf1.id, dmsf_workflow: { position: 2 } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/edit", params: { step: 1, dmsf_workflow: { position: 2 } }
|
||||
assert_response :success
|
||||
@wfs1.reload
|
||||
@wfs2.reload
|
||||
@ -206,7 +222,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_reorder_steps_to_lowest
|
||||
put :reorder_steps, params: { step: 1, id: @wf1.id, dmsf_workflow: { position: 3 } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/edit", params: { step: 1, dmsf_workflow: { position: 3 } }
|
||||
assert_response :success
|
||||
@wfs1.reload
|
||||
@wfs2.reload
|
||||
@ -221,7 +238,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_reorder_steps_to_higher
|
||||
put :reorder_steps, params: { step: 3, id: @wf1.id, dmsf_workflow: { position: 2 } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/edit", params: { step: 3, dmsf_workflow: { position: 2 } }
|
||||
assert_response :success
|
||||
@wfs1.reload
|
||||
@wfs2.reload
|
||||
@ -236,7 +254,8 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_reorder_steps_to_highest
|
||||
put :reorder_steps, params: { step: 3, id: @wf1.id, dmsf_workflow: { position: '1' } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/edit", params: { step: 3, dmsf_workflow: { position: '1' } }
|
||||
assert_response :success
|
||||
@wfs1.reload
|
||||
@wfs2.reload
|
||||
@ -251,64 +270,61 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_action_approve
|
||||
post(
|
||||
: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: ''
|
||||
}
|
||||
)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/dmsf_workflows/#{@wf1.id}/new_action",
|
||||
params: {
|
||||
commit: l(:button_submit),
|
||||
dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
dmsf_file_revision_id: @revision1.id,
|
||||
step_action: DmsfWorkflowStepAction::ACTION_APPROVE,
|
||||
user_id: nil,
|
||||
note: ''
|
||||
}
|
||||
assert_redirected_to dmsf_folder_path(id: @project1)
|
||||
assert DmsfWorkflowStepAction.exists?(dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
action: DmsfWorkflowStepAction::ACTION_APPROVE)
|
||||
end
|
||||
|
||||
def test_action_reject
|
||||
post(
|
||||
: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...'
|
||||
}
|
||||
)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/dmsf_workflows/#{@wf1.id}/new_action",
|
||||
params: {
|
||||
commit: l(:button_submit),
|
||||
dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
dmsf_file_revision_id: @revision2.id,
|
||||
step_action: DmsfWorkflowStepAction::ACTION_REJECT,
|
||||
note: 'Rejected because...'
|
||||
}
|
||||
assert_response :redirect
|
||||
assert DmsfWorkflowStepAction.exists?(dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
action: DmsfWorkflowStepAction::ACTION_REJECT)
|
||||
end
|
||||
|
||||
def test_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)
|
||||
}
|
||||
)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/dmsf_workflows/#{@wf1.id}/action",
|
||||
xhr: true,
|
||||
params: {
|
||||
project_id: @project1.id,
|
||||
dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
dmsf_file_revision_id: @revision2.id,
|
||||
title: l(:title_waiting_for_approval)
|
||||
}
|
||||
assert_response :success
|
||||
assert_match(/ajax-modal/, response.body)
|
||||
assert_template 'action'
|
||||
end
|
||||
|
||||
def test_new_action_delegate
|
||||
post(
|
||||
: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: @admin.id * 10,
|
||||
note: 'Delegated because...'
|
||||
}
|
||||
)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/dmsf_workflows/#{@wf1.id}/new_action",
|
||||
params: {
|
||||
commit: l(:button_submit),
|
||||
dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
dmsf_file_revision_id: @revision2.id,
|
||||
step_action: @admin.id * 10,
|
||||
note: 'Delegated because...'
|
||||
}
|
||||
assert_redirected_to dmsf_folder_path(id: @project1)
|
||||
assert DmsfWorkflowStepAction.exists?(dmsf_workflow_step_assignment_id: @wfsa2.id,
|
||||
action: DmsfWorkflowStepAction::ACTION_DELEGATE)
|
||||
@ -317,41 +333,41 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_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)
|
||||
}
|
||||
)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/dmsf_workflows/#{@project1.id}/assign",
|
||||
xhr: true,
|
||||
params: {
|
||||
dmsf_file_revision_id: @revision1.id,
|
||||
title: l(:label_dmsf_wokflow_action_assign)
|
||||
}
|
||||
assert_response :success
|
||||
assert_match(/ajax-modal/, response.body)
|
||||
assert_template 'assign'
|
||||
end
|
||||
|
||||
def test_start
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@revision2.dmsf_workflow_id = @wf1.id
|
||||
get :start, params: { id: @revision2.dmsf_workflow_id, dmsf_file_revision_id: @revision2.id }
|
||||
get "/dmsf_workflows/#{@revision2.dmsf_workflow_id}/start", params: { dmsf_file_revision_id: @revision2.id }
|
||||
assert_redirected_to dmsf_folder_path(id: @project1)
|
||||
end
|
||||
|
||||
def test_assignment
|
||||
post(
|
||||
: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
|
||||
}
|
||||
)
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
post "/dmsf_workflows/#{@project1.id}/assignment",
|
||||
params: {
|
||||
commit: l(:button_submit),
|
||||
id: @wf1.id,
|
||||
dmsf_workflow_id: @wf1.id,
|
||||
dmsf_file_revision_id: @revision2.id,
|
||||
action: 'assignment'
|
||||
}
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
def test_update_step_name
|
||||
put :update_step, params: { id: @wf1.id, step: @wfs2.step, dmsf_workflow: { step_name: 'new_name' } }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/update_step", params: { step: @wfs2.step, dmsf_workflow: { step_name: 'new_name' } }
|
||||
assert_response :redirect
|
||||
# All steps in the same step must be renamed
|
||||
@wfs2.reload
|
||||
@ -364,66 +380,78 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_update_step_operators
|
||||
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 }
|
||||
}
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/update_step",
|
||||
params: {
|
||||
step: '1',
|
||||
operator_step: { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.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, params: {
|
||||
id: @wf1,
|
||||
step: '1',
|
||||
operator_step: { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s },
|
||||
assignee: { @wfs1.id.to_s => @someone.id.to_s }
|
||||
}
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
put "/dmsf_workflows/#{@wf1.id}/update_step",
|
||||
params: {
|
||||
step: '1',
|
||||
operator_step: { @wfs1.id.to_s => DmsfWorkflowStep::OPERATOR_OR.to_s },
|
||||
assignee: { @wfs1.id.to_s => @someone.id.to_s }
|
||||
}
|
||||
assert_response :redirect
|
||||
@wfs1.reload
|
||||
assert_equal @someone.id, @wfs1.user_id
|
||||
end
|
||||
|
||||
def test_delete_step
|
||||
name = @wfs2.name
|
||||
assert_difference 'DmsfWorkflowStep.count', -1 do
|
||||
delete :delete_step, params: { id: @wf1, step: @wfs2.id }
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
n = DmsfWorkflowStep.where(dmsf_workflow_id: @wf1.id, step: @wfs2.step).count
|
||||
assert_difference 'DmsfWorkflowStep.count', -n do
|
||||
delete "/dmsf_workflows/#{@wfs1.id}/edit", params: { step: @wfs2.id }
|
||||
end
|
||||
@wfs3.reload
|
||||
assert_equal @wfs3.name, name
|
||||
assert_response :redirect
|
||||
end
|
||||
|
||||
def test_log_non_member
|
||||
@request.session[:user_id] = @someone.id
|
||||
get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
|
||||
post '/login', params: { username: 'someone', password: 'foo' }
|
||||
get "/dmsf_workflows/#{@wf1.id}/log",
|
||||
params: { project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' },
|
||||
xhr: true
|
||||
assert_response :forbidden
|
||||
end
|
||||
|
||||
def test_log_member_local_wf
|
||||
get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/dmsf_workflows/#{@wf1.id}/log",
|
||||
params: { project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' },
|
||||
xhr: true
|
||||
assert_response :success
|
||||
assert_template :log
|
||||
end
|
||||
|
||||
def test_log_member_global_wf
|
||||
get :log, params: { id: @wf3.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/dmsf_workflows/#{@wf3.id}/log",
|
||||
params: { project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' },
|
||||
xhr: true
|
||||
assert_response :success
|
||||
assert_template :log
|
||||
end
|
||||
|
||||
def test_log_admin
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :log, params: { id: @wf1.id, project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' }, xhr: true
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
get "/dmsf_workflows/#{@wf1.id}/log",
|
||||
params: { project_id: @project1.id, dmsf_file_id: @file1.id, format: 'js' },
|
||||
xhr: true
|
||||
assert_response :success
|
||||
assert_template :log
|
||||
end
|
||||
|
||||
def test_new_step
|
||||
get :new_step, params: { id: @wf1.id, format: 'js' }, xhr: true
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
get "/dmsf_workflows/#{@wf1.id}/new_step", params: { format: 'js' }, xhr: true
|
||||
assert_response :success
|
||||
assert_template :new_step
|
||||
end
|
||||
|
||||
@ -29,7 +29,7 @@ class IssuesControllerTest < RedmineDmsf::Test::TestCase
|
||||
def setup
|
||||
super
|
||||
@issue1 = Issue.find 1
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
end
|
||||
|
||||
def test_put_update_with_project_change
|
||||
@ -41,11 +41,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,
|
||||
params: {
|
||||
id: @issue1.id,
|
||||
issue: { project_id: @project2.id, tracker_id: '1', priority_id: '6', category_id: '3' }
|
||||
}
|
||||
patch "/issues/#{@issue1.id}",
|
||||
params: { 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
|
||||
|
||||
@ -27,16 +27,12 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
fixtures :user_preferences, :dmsf_workflows, :dmsf_workflow_steps, :dmsf_workflow_step_assignments,
|
||||
:dmsf_workflow_step_actions, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :dmsf_locks
|
||||
|
||||
def setup
|
||||
super
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
end
|
||||
|
||||
def test_page_with_open_approvals_one_approval
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
DmsfFileRevision.where(id: 5).delete_all
|
||||
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||
@jsmith.pref.save!
|
||||
get :page
|
||||
get '/my/page'
|
||||
assert_response :success
|
||||
return if defined?(EasyExtensions)
|
||||
|
||||
@ -46,9 +42,10 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_page_with_open_approvals_no_approval
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@jsmith.pref[:my_page_layout] = { 'top' => ['open_approvals'] }
|
||||
@jsmith.pref.save!
|
||||
get :page
|
||||
get '/my/page'
|
||||
assert_response :success
|
||||
return if defined?(EasyExtensions)
|
||||
|
||||
@ -58,10 +55,11 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_page_with_open_locked_documents
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
@request.session[:user_id] = @admin.id
|
||||
@admin.pref[:my_page_layout] = { 'top' => ['locked_documents'] }
|
||||
@admin.pref.save!
|
||||
get :page
|
||||
get '/my/page'
|
||||
assert_response :success
|
||||
return if defined?(EasyExtensions)
|
||||
|
||||
@ -73,12 +71,13 @@ class MyControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_page_with_open_watched_documents
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@jsmith.pref[:my_page_layout] = { 'top' => ['watched_documents'] }
|
||||
@jsmith.pref.save!
|
||||
@file1.add_watcher @jsmith
|
||||
@folder1.add_watcher @jsmith
|
||||
@project1.add_watcher @jsmith
|
||||
get :page
|
||||
get '/my/page'
|
||||
return if defined?(EasyExtensions)
|
||||
|
||||
assert_response :success
|
||||
|
||||
@ -25,10 +25,10 @@ class ProjectsControllerTest < RedmineDmsf::Test::TestCase
|
||||
include Redmine::I18n
|
||||
|
||||
def test_settings_dms_member
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.add_permission! :user_preferences
|
||||
with_settings plugin_redmine_dmsf: { 'dmsf_act_as_attachable' => '1' } do
|
||||
get :settings, params: { id: @project1.id, tab: 'dmsf' }
|
||||
get "/projects/#{@project1.id}/settings", params: { tab: 'dmsf' }
|
||||
end
|
||||
assert_response :success
|
||||
assert_select 'fieldset legend', text: l(:link_user_preferences)
|
||||
@ -36,33 +36,33 @@ class ProjectsControllerTest < RedmineDmsf::Test::TestCase
|
||||
end
|
||||
|
||||
def test_settings_dms_member_no_permission
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.remove_permission! :user_preferences
|
||||
get :settings, params: { id: @project1.id, tab: 'dmsf' }
|
||||
get "/projects/#{@project1.id}/settings", params: { tab: 'dmsf' }
|
||||
assert_response :success
|
||||
assert_select 'fieldset legend', text: l(:link_user_preferences), count: 0
|
||||
end
|
||||
|
||||
def test_settings_dms_non_member
|
||||
@request.session[:user_id] = @admin.id
|
||||
get :settings, params: { id: @project1.id, tab: 'dmsf' }
|
||||
post '/login', params: { username: 'admin', password: 'admin' }
|
||||
get "/projects/#{@project1.id}/settings", params: { tab: 'dmsf' }
|
||||
assert_response :success
|
||||
assert_select 'fieldset legend', text: l(:link_user_preferences), count: 0
|
||||
end
|
||||
|
||||
def test_settings_dms_member_no_act_as_attachments
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.add_permission! :user_preferences
|
||||
get :settings, params: { id: @project1.id, tab: 'dmsf' }
|
||||
get "/projects/#{@project1.id}/settings", params: { tab: 'dmsf' }
|
||||
assert_response :success
|
||||
assert_select 'label', text: l(:label_act_as_attachable), count: 0
|
||||
end
|
||||
|
||||
def test_legacy_notifications
|
||||
@request.session[:user_id] = @jsmith.id
|
||||
post '/login', params: { username: 'jsmith', password: 'jsmith' }
|
||||
@role_manager.add_permission! :user_preferences
|
||||
with_settings notified_events: ['dmsf_legacy_notifications'] do
|
||||
get :settings, params: { id: @project1.id, tab: 'dmsf' }
|
||||
get "/projects/#{@project1.id}/settings", params: { tab: 'dmsf' }
|
||||
assert_response :success
|
||||
assert_select 'label', text: l(:label_notifications)
|
||||
end
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
#
|
||||
# Copyright © 2011 Vít Jonáš <vit.jonas@gmail.com>
|
||||
# Copyright © 2012 Daniel Munn <dan.munn@munnster.co.uk>
|
||||
# Copyright © 2011-15 Karel Pičman <karel.picman@kontron.com>
|
||||
# Copyright © 2011-23 Karel Pičman <karel.picman@kontron.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@ -23,7 +23,7 @@
|
||||
module RedmineDmsf
|
||||
module Test
|
||||
# Test case
|
||||
class TestCase < ActionController::TestCase
|
||||
class TestCase < ActionDispatch::IntegrationTest
|
||||
fixtures :users, :email_addresses, :projects, :roles, :members, :member_roles
|
||||
|
||||
# Allow us to override the fixtures method to implement fixtures for our plugin.
|
||||
|
||||
@ -32,7 +32,7 @@ class CustomFieldDmsfFileFormatTest < RedmineDmsf::Test::UnitTest
|
||||
|
||||
def test_possible_values_options
|
||||
n = @issue.project.dmsf_files.visible.all.size
|
||||
DmsfFolder.visible(false).where(project_id: @issue.project.id).each do |f|
|
||||
DmsfFolder.visible(false).where(project_id: @issue.project.id).find_each do |f|
|
||||
n += f.dmsf_files.visible.all.size
|
||||
end
|
||||
assert_equal n, @field.possible_values_options(@issue).size
|
||||
|
||||
@ -35,7 +35,7 @@ class DmsfMacrosTest < RedmineDmsf::Test::HelperTest
|
||||
def setup
|
||||
super
|
||||
User.current = @jsmith
|
||||
default_url_options[:host] = 'http://example.com'
|
||||
default_url_options[:host] = 'www.example.com'
|
||||
@file1 = DmsfFile.find_by(id: 1)
|
||||
@file6 = DmsfFile.find_by(id: 6) # video
|
||||
@file7 = DmsfFile.find_by(id: 7) # image
|
||||
@ -361,7 +361,7 @@ class DmsfMacrosTest < RedmineDmsf::Test::HelperTest
|
||||
link = link_to(img, url, target: '_blank',
|
||||
rel: 'noopener',
|
||||
title: h(@file7.last_revision.try(:tooltip)),
|
||||
'data-downloadurl': 'image/gif:test.gif:http://example.com/dmsf/files/7/test.gif')
|
||||
'data-downloadurl': 'image/gif:test.gif:http://www.example.com/dmsf/files/7/test.gif')
|
||||
assert_equal content_tag(:p, link + link), text
|
||||
end
|
||||
|
||||
@ -395,7 +395,7 @@ class DmsfMacrosTest < RedmineDmsf::Test::HelperTest
|
||||
link = link_to(img, url, target: '_blank',
|
||||
rel: 'noopener',
|
||||
title: h(@file7.last_revision.try(:tooltip)),
|
||||
'data-downloadurl': 'image/gif:test.gif:http://example.com/dmsf/files/7/test.gif')
|
||||
'data-downloadurl': 'image/gif:test.gif:http://www.example.com/dmsf/files/7/test.gif')
|
||||
assert_equal content_tag(:p, link), text
|
||||
width = '640'
|
||||
text = textilizable("{{dmsftn(#{@file7.id}, width=#{width})}}")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user