From 5c53966873fa7433cbb80b87afd4c4b998dc2acd Mon Sep 17 00:00:00 2001
From: Karel Picman
Date: Thu, 20 Feb 2014 13:17:50 +0100
Subject: [PATCH] #183 Create document links - unit tests and fixes
---
app/controllers/dmsf_workflows_controller.rb | 108 ++++++------
app/models/dmsf_file.rb | 10 +-
.../dmsf_files/_file_new_revision.html.erb | 12 +-
app/views/dmsf_files/show.html.erb | 6 +-
app/views/dmsf_workflows/_action.html.erb | 4 +-
app/views/dmsf_workflows/_log.html.erb | 8 +-
app/views/dmsf_workflows/_steps.html.erb | 24 +--
app/views/dmsf_workflows/action.js.erb | 2 +-
app/views/dmsf_workflows/assign.js.erb | 2 +-
.../autocomplete_for_user.html.erb | 2 +-
app/views/dmsf_workflows/log.js.erb | 2 +-
app/views/dmsf_workflows/new.html.erb | 2 +-
.../my/blocks/_locked_documents.html.erb | 2 +-
app/views/my/blocks/_open_approvals.html.erb | 2 +-
test/fixtures/dmsf_links.yml | 26 +++
test/fixtures/dmsf_workflows.yml | 2 +-
test/functional/dmsf_links_controller_test.rb | 109 +++++++++++-
.../dmsf_workflow_controller_test.rb | 165 ++++++++++--------
test/unit/dmsf_file_test.rb | 2 +-
test/unit/dmsf_links_test.rb | 122 ++++++++++++-
test/unit/dmsf_workflow_test.rb | 5 +-
21 files changed, 439 insertions(+), 178 deletions(-)
create mode 100644 test/fixtures/dmsf_links.yml
diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb
index b9a6b5ac..0594f209 100644
--- a/app/controllers/dmsf_workflows_controller.rb
+++ b/app/controllers/dmsf_workflows_controller.rb
@@ -17,13 +17,14 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class DmsfWorkflowsController < ApplicationController
- unloadable
- layout :workflows_layout
+ unloadable
+ model_object DmsfWorkflow
+
+ before_filter :find_model_object, :except => [:create, :new, :index, :assign, :assignment]
+ before_filter :find_project
+ before_filter :authorize_custom
- before_filter :find_workflow, :except => [:create, :new, :index, :assign, :assignment]
- before_filter :find_project, :except => [:start]
- before_filter :authorize_global
- before_filter :authorize_custom, :except => [:assignment, :start, :new_action]
+ layout :workflows_layout
def index
if @project
@@ -46,7 +47,7 @@ class DmsfWorkflowsController < ApplicationController
if action.save
revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id]
if revision
- if @workflow.try_finish revision, action, (params[:step_action].to_i / 10)
+ if @dmsf_workflow.try_finish revision, action, (params[:step_action].to_i / 10)
file = DmsfFile.joins(:revisions).where(:dmsf_file_revisions => {:id => revision.id}).first
if file
begin
@@ -60,23 +61,23 @@ class DmsfWorkflowsController < ApplicationController
revision.file.project.members.each do |member|
DmsfMailer.workflow_notification(
member.user,
- @workflow,
+ @dmsf_workflow,
revision,
- l(:text_email_subject_approved, :name => @workflow.name),
- l(:text_email_finished_approved, :name => @workflow.name, :filename => revision.file.name),
+ l(:text_email_subject_approved, :name => @dmsf_workflow.name),
+ l(:text_email_finished_approved, :name => @dmsf_workflow.name, :filename => revision.file.name),
l(:text_email_to_see_history)).deliver if member.user
end
else
# Just rejected
- recipients = @workflow.participiants
+ recipients = @dmsf_workflow.participiants
recipients.push User.find_by_id revision.dmsf_workflow_assigned_by
recipients.each do |user|
DmsfMailer.workflow_notification(
user,
- @workflow,
+ @dmsf_workflow,
revision,
- l(:text_email_subject_rejected, :name => @workflow.name),
- l(:text_email_finished_rejected, :name => @workflow.name, :filename => revision.file.name, :notice => action.note),
+ l(:text_email_subject_rejected, :name => @dmsf_workflow.name),
+ l(:text_email_finished_rejected, :name => @dmsf_workflow.name, :filename => revision.file.name, :notice => action.note),
l(:text_email_to_see_history)).deliver if user
end
end
@@ -86,33 +87,33 @@ class DmsfWorkflowsController < ApplicationController
delegate = User.find_by_id params[:step_action].to_i / 10
DmsfMailer.workflow_notification(
delegate,
- @workflow,
+ @dmsf_workflow,
revision,
- l(:text_email_subject_delegated, :name => @workflow.name),
- l(:text_email_finished_delegated, :name => @workflow.name, :filename => revision.file.name, :notice => action.note),
+ l(:text_email_subject_delegated, :name => @dmsf_workflow.name),
+ l(:text_email_finished_delegated, :name => @dmsf_workflow.name, :filename => revision.file.name, :notice => action.note),
l(:text_email_to_proceed)).deliver if delegate
else
# Next step
- assignments = @workflow.next_assignments revision.id
+ assignments = @dmsf_workflow.next_assignments revision.id
unless assignments.empty?
if assignments.first.dmsf_workflow_step.step != action.dmsf_workflow_step_assignment.dmsf_workflow_step.step
# Next step
assignments.each do |assignment|
DmsfMailer.workflow_notification(
assignment.user,
- @workflow,
+ @dmsf_workflow,
revision,
- l(:text_email_subject_requires_approval, :name => @workflow.name),
- l(:text_email_finished_step, :name => @workflow.name, :filename => revision.file.name),
+ l(:text_email_subject_requires_approval, :name => @dmsf_workflow.name),
+ l(:text_email_finished_step, :name => @dmsf_workflow.name, :filename => revision.file.name),
l(:text_email_to_proceed)).deliver if assignment.user
end
to = User.find_by_id revision.dmsf_workflow_assigned_by
DmsfMailer.workflow_notification(
to,
- @workflow,
+ @dmsf_workflow,
revision,
- l(:text_email_subject_updated, :name => @workflow.name),
- l(:text_email_finished_step_short, :name => @workflow.name, :filename => revision.file.name),
+ l(:text_email_subject_updated, :name => @dmsf_workflow.name),
+ l(:text_email_finished_step_short, :name => @dmsf_workflow.name, :filename => revision.file.name),
l(:text_email_to_see_status)).deliver if to
end
end
@@ -163,12 +164,12 @@ class DmsfWorkflowsController < ApplicationController
end
def new
- @workflow = DmsfWorkflow.new
+ @dmsf_workflow = DmsfWorkflow.new
end
def create
- @workflow = DmsfWorkflow.new(:name => params[:name], :project_id => params[:project_id])
- if request.post? && @workflow.save
+ @dmsf_workflow = DmsfWorkflow.new(:name => params[:name], :project_id => params[:project_id])
+ if request.post? && @dmsf_workflow.save
flash[:notice] = l(:notice_successful_create)
if @project
redirect_to settings_project_path(@project, :tab => 'dmsf_workflow')
@@ -184,7 +185,7 @@ class DmsfWorkflowsController < ApplicationController
end
def update
- if request.put? && @workflow.update_attributes({:name => params[:name]})
+ if request.put? && @dmsf_workflow.update_attributes({:name => params[:name]})
flash[:notice] = l(:notice_successful_update)
if @project
redirect_to settings_project_path(@project, :tab => 'dmsf_workflow')
@@ -198,7 +199,7 @@ class DmsfWorkflowsController < ApplicationController
def destroy
begin
- @workflow.destroy
+ @dmsf_workflow.destroy
flash[:notice] = l(:notice_successful_delete)
rescue
flash[:error] = l(:error_unable_delete_dmsf_workflow)
@@ -218,14 +219,14 @@ class DmsfWorkflowsController < ApplicationController
if request.post?
users = User.find_all_by_id(params[:user_ids])
if params[:step] == '0'
- step = @workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq.count + 1
+ step = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq.count + 1
else
step = params[:step].to_i
end
operator = (params[:commit] == l(:dmsf_and)) ? DmsfWorkflowStep::OPERATOR_AND : DmsfWorkflowStep::OPERATOR_OR
users.each do |user|
- @workflow.dmsf_workflow_steps << DmsfWorkflowStep.new(
- :dmsf_workflow_id => @workflow.id,
+ @dmsf_workflow.dmsf_workflow_steps << DmsfWorkflowStep.new(
+ :dmsf_workflow_id => @dmsf_workflow.id,
:step => step,
:user_id => user.id,
:operator => operator)
@@ -238,10 +239,10 @@ class DmsfWorkflowsController < ApplicationController
def remove_step
if request.delete?
- DmsfWorkflowStep.where(:dmsf_workflow_id => @workflow.id, :step => params[:step]).each do |ws|
- @workflow.dmsf_workflow_steps.delete(ws)
+ DmsfWorkflowStep.where(:dmsf_workflow_id => @dmsf_workflow.id, :step => params[:step]).each do |ws|
+ @dmsf_workflow.dmsf_workflow_steps.delete(ws)
end
- @workflow.dmsf_workflow_steps.each do |ws|
+ @dmsf_workflow.dmsf_workflow_steps.each do |ws|
n = ws.step.to_i
if n > params[:step].to_i
ws.step = n - 1
@@ -258,7 +259,7 @@ class DmsfWorkflowsController < ApplicationController
def reorder_steps
if request.put?
- unless @workflow.reorder_steps(params[:step].to_i, params[:workflow_step][:move_to])
+ unless @dmsf_workflow.reorder_steps(params[:step].to_i, params[:workflow_step][:move_to])
flash[:error] = l(:notice_cannot_renumber_steps)
end
end
@@ -270,16 +271,16 @@ class DmsfWorkflowsController < ApplicationController
def start
revision = DmsfFileRevision.find_by_id(params[:dmsf_file_revision_id])
if revision
- revision.set_workflow(@workflow.id, params[:action])
+ revision.set_workflow(@dmsf_workflow.id, params[:action])
if revision.save
- assignments = @workflow.next_assignments revision.id
+ assignments = @dmsf_workflow.next_assignments revision.id
assignments.each do |assignment|
DmsfMailer.workflow_notification(
assignment.user,
- @workflow,
+ @dmsf_workflow,
revision,
- l(:text_email_subject_started, :name => @workflow.name),
- l(:text_email_started, :name => @workflow.name, :filename => revision.file.name),
+ l(:text_email_subject_started, :name => @dmsf_workflow.name),
+ l(:text_email_started, :name => @dmsf_workflow.name, :filename => revision.file.name),
l(:text_email_to_proceed)).deliver if assignment.user
end
flash[:notice] = l(:notice_workflow_started)
@@ -291,25 +292,26 @@ class DmsfWorkflowsController < ApplicationController
end
private
- def find_workflow
- @workflow = DmsfWorkflow.find_by_id(params[:id])
- end
-
+
def find_project
- if @workflow && @workflow.project
- @project = @workflow.project
+ if @dmsf_workflow && @dmsf_workflow.project
+ @project = @dmsf_workflow.project
elsif params[:project_id].present?
@project = Project.find_by_id params[:project_id]
+ else
+ @project = Project.find_by_identifier params[:id]
end
end
- def workflows_layout
- find_workflow
- find_project
+ def workflows_layout
@project ? 'base' : 'admin'
end
- def authorize_custom
- require_admin unless @project
+ def authorize_custom
+ if @project
+ authorize
+ else
+ require_admin
+ end
end
-end
+end
\ No newline at end of file
diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb
index a42b5995..8bc52962 100644
--- a/app/models/dmsf_file.rb
+++ b/app/models/dmsf_file.rb
@@ -66,14 +66,12 @@ class DmsfFile < ActiveRecord::Base
:url => Proc.new {|o| {:controller => 'dmsf_files', :action => 'show', :id => o}},
:datetime => Proc.new {|o| o.updated_at },
:author => Proc.new {|o| o.last_revision.user }
-
-
- @@storage_path = Setting.plugin_redmine_dmsf['dmsf_storage_directory'].strip
+
+ @@storage_path = nil
def self.storage_path
- if !File.exists?(@@storage_path)
- Dir.mkdir(@@storage_path)
- end
+ self.storage_path = Setting.plugin_redmine_dmsf['dmsf_storage_directory'].strip unless @@storage_path
+ Dir.mkdir(@@storage_path) unless File.exists?(@@storage_path)
@@storage_path
end
diff --git a/app/views/dmsf_files/_file_new_revision.html.erb b/app/views/dmsf_files/_file_new_revision.html.erb
index 9398d29e..c30ee1b1 100644
--- a/app/views/dmsf_files/_file_new_revision.html.erb
+++ b/app/views/dmsf_files/_file_new_revision.html.erb
@@ -32,7 +32,7 @@
<%= label_tag('dmsf_file_revision_title', "#{l(:label_title)}:") %>
- <%= f.text_field(:title, :size => '32') %>
+ <%= f.text_field(:title, :size => 32) %>
@@ -41,7 +41,7 @@
<%= f.select(:dmsf_folder_id,
options_for_select(DmsfFolder.directory_tree(@project),
:selected => (@revision.folder.id if @revision.folder))) %> /
- <%= f.text_field(:name, :size => '22') %>
+ <%= f.text_field(:name, :size => 22) %>
@@ -49,7 +49,7 @@
<%= label_tag('dmsf_file_revision_description', "#{l(:label_description)}:") %>
- <%= f.text_area(:description, :rows=> '6', :class => 'wiki-edit') %>
+ <%= f.text_area(:description, :rows => 6, :class => 'wiki-edit') %>
@@ -70,8 +70,8 @@
<%= label_tag('file_upload', "#{l(:label_new_content)}:") %>
- <%= file_field_tag('file_upload', :size => 30) %>
-
+ <%= file_field_tag('file_upload') %>
+
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
@@ -88,7 +88,7 @@
<%= label_tag('dmsf_file_revision_comment', "#{l(:label_comment)}:") %>
- <%= f.text_area(:comment, :rows=> '2', :style => 'width: 99%;') %>
+ <%= f.text_area(:comment, :rows=> 2, :style => 'width: 99%;') %>
diff --git a/app/views/dmsf_files/show.html.erb b/app/views/dmsf_files/show.html.erb
index 9c1f898c..de20da44 100644
--- a/app/views/dmsf_files/show.html.erb
+++ b/app/views/dmsf_files/show.html.erb
@@ -59,7 +59,7 @@
<%= error_messages_for('file') %>
<%= error_messages_for('revision') %>
<%= render(:partial => 'file_new_revision') if User.current.allowed_to?(:file_manipulation, @file.project) %>
-<%= form_tag('', :id => 'entries_form') %>
+<%#= form_tag('', :id => 'entries_form') %>
<%= l(:heading_revisions) %>
<% @file.revisions.visible[@revision_pages.offset,@revision_pages.per_page].each do |revision| %>
@@ -147,8 +147,8 @@
-
-
+
<% end %>
diff --git a/app/views/dmsf_workflows/_action.html.erb b/app/views/dmsf_workflows/_action.html.erb
index 7b8ef077..3774cd58 100644
--- a/app/views/dmsf_workflows/_action.html.erb
+++ b/app/views/dmsf_workflows/_action.html.erb
@@ -34,8 +34,8 @@
<%= label_tag 'delegate', l(:label_dmsf_wokflow_action_delegate) %>
<%= text_field_tag 'user_search', nil %>
- <%= javascript_tag "observeSearchfield('user_search', 'users_for_delegate', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@workflow, :dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id], :dmsf_file_revision_id => params[:dmsf_file_revision_id]) }')" %>
- <%= content_tag('div', principals_radio_button_tags('step_action', @workflow.delegates(nil, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id])), :id => 'users_for_delegate') %>
+ <%= javascript_tag "observeSearchfield('user_search', 'users_for_delegate', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@dmsf_workflow, :dmsf_workflow_step_assignment_id => params[:dmsf_workflow_step_assignment_id], :dmsf_file_revision_id => params[:dmsf_file_revision_id]) }')" %>
+ <%= content_tag('div', principals_radio_button_tags('step_action', @dmsf_workflow.delegates(nil, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id])), :id => 'users_for_delegate') %>
diff --git a/app/views/dmsf_workflows/_log.html.erb b/app/views/dmsf_workflows/_log.html.erb
index aff97ed5..83c2ac5f 100644
--- a/app/views/dmsf_workflows/_log.html.erb
+++ b/app/views/dmsf_workflows/_log.html.erb
@@ -24,10 +24,10 @@