#183 Create document links - unit tests and fixes

This commit is contained in:
Karel Picman 2014-02-20 13:17:50 +01:00
parent adb33cd7f7
commit 5c53966873
21 changed files with 439 additions and 178 deletions

View File

@ -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

View File

@ -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

View File

@ -32,7 +32,7 @@
<div class="splitcontentleft">
<p>
<%= label_tag('dmsf_file_revision_title', "#{l(:label_title)}:") %>
<%= f.text_field(:title, :size => '32') %>
<%= f.text_field(:title, :size => 32) %>
</p>
</div>
<div class="splitcontentright">
@ -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) %>
</p>
</div>
</div>
@ -49,7 +49,7 @@
<%= label_tag('dmsf_file_revision_description', "#{l(:label_description)}:") %>
</p>
<div class="wiki data clear">
<%= f.text_area(:description, :rows=> '6', :class => 'wiki-edit') %>
<%= f.text_area(:description, :rows => 6, :class => 'wiki-edit') %>
</div>
<div class="splitcontentleft">
<p>
@ -70,8 +70,8 @@
<p>
<%= label_tag('file_upload', "#{l(:label_new_content)}:") %>
<div class="data">
<%= file_field_tag('file_upload', :size => 30) %>
<br />
<%= file_field_tag('file_upload') %>
<br/>
<small>
(<%= l(:label_max_size) %>: <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
</small>
@ -88,7 +88,7 @@
<p>
<%= label_tag('dmsf_file_revision_comment', "#{l(:label_comment)}:") %>
<div class="data">
<%= f.text_area(:comment, :rows=> '2', :style => 'width: 99%;') %>
<%= f.text_area(:comment, :rows=> 2, :style => 'width: 99%;') %>
</div>
</p>
</div>

View File

@ -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') %>
<h3><%= l(:heading_revisions) %></h3>
<% @file.revisions.visible[@revision_pages.offset,@revision_pages.per_page].each do |revision| %>
@ -147,8 +147,8 @@
</div>
</div>
</div>
<br/>
<br/>
<!--<br/>
<br/>-->
<% end %>
<p class="pagination"><%= pagination_links_full @revision_pages, @file.revisions.visible.count %></p>

View File

@ -34,8 +34,8 @@
<p>
<%= label_tag 'delegate', l(:label_dmsf_wokflow_action_delegate) %><br/>
<%= 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') %>
</p>
<p class="buttons">

View File

@ -24,10 +24,10 @@
<div class="log_header_box">
<div class="log_header_left">
<%= label_tag 'workflow_name', "#{l(:link_workflow)} #{l(:field_name).downcase}: " %>
<% if User.current.allowed_to?(:manage_workflows, @workflow.project) %>
<%= link_to @workflow.name, edit_dmsf_workflow_path(@workflow) %>
<% if User.current.allowed_to?(:manage_workflows, @dmsf_workflow.project) %>
<%= link_to @dmsf_workflow.name, edit_dmsf_workflow_path(@dmsf_workflow) %>
<% else %>
<%= @workflow.name %>
<%= @dmsf_workflow.name %>
<% end %>
</div>
<div>
@ -78,7 +78,7 @@
<td><%= link_to_user User.find_by_id(row['author_id'].present? ? row['author_id'] : row['user_id']) %></td>
<td><%= DmsfWorkflowStepAction.action_str(row['action']) %></td>
<td>
<% if((row['step'].to_i == @workflow.dmsf_workflow_steps.last.step) && (revision.workflow == DmsfWorkflow::STATE_APPROVED) && (row['action'] != DmsfWorkflowStepAction::ACTION_DELEGATE)) %>
<% if((row['step'].to_i == @dmsf_workflow.dmsf_workflow_steps.last.step) && (revision.workflow == DmsfWorkflow::STATE_APPROVED) && (row['action'] != DmsfWorkflowStepAction::ACTION_DELEGATE)) %>
<%= l(:title_approved) %>
<% else %>
<%= DmsfWorkflowStepAction.workflow_str(row['action']) %>

View File

@ -16,23 +16,23 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%>
<% if @workflow.project %>
<h2><%= link_to l(:label_dmsf_workflow_plural), settings_project_path(@project, :tab => 'dmsf_workflow') %> &#187; <%=h @workflow %></h2>
<% if @dmsf_workflow.project %>
<h2><%= link_to l(:label_dmsf_workflow_plural), settings_project_path(@project, :tab => 'dmsf_workflow') %> &#187; <%=h @dmsf_workflow %></h2>
<% else %>
<h2><%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> &#187; <%=h @workflow %></h2>
<h2><%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> &#187; <%=h @dmsf_workflow %></h2>
<% end %>
<%= labelled_form_for @workflow do |f| %>
<%= labelled_form_for @dmsf_workflow do |f| %>
<%= error_messages_for 'workflow' %>
<div class="box tabular">
<p><%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name, @workflow.name %><%= submit_tag l(:button_save) %></p>
<p><%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name, @dmsf_workflow.name %><%= submit_tag l(:button_save) %></p>
</div>
<% end %>
<div class="tab-content" id="tab-content-members">
<div class="splitcontentleft">
<% steps = @workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq %>
<% steps = @dmsf_workflow.dmsf_workflow_steps.collect{|s| s.step}.uniq %>
<% if steps.any? %>
<table class="list">
<thead><tr>
@ -46,7 +46,7 @@
<tr id="step-<%= i %>" class="<%= cycle 'odd', 'even' %> step">
<td class="step"><%= i %></td>
<td class="approval">
<% @workflow.dmsf_workflow_steps.collect{|s| (s.step == i) ? s : nil}.compact.each_with_index do |step, j| %>
<% @dmsf_workflow.dmsf_workflow_steps.collect{|s| (s.step == i) ? s : nil}.compact.each_with_index do |step, j| %>
<% if j != 0 %>
<b><%= step.soperator %></b>&nbsp
<% end %>
@ -54,10 +54,10 @@
<% end %>
</td>
<td class="reorder">
<%= reorder_links('workflow_step', {:action => 'edit', :id => @workflow, :step => i}, :put) %>
<%= reorder_links('workflow_step', {:action => 'edit', :id => @dmsf_workflow, :step => i}, :put) %>
</td>
<td class="buttons">
<%= delete_link edit_dmsf_workflow_path(@workflow, :step => i) %>
<%= delete_link edit_dmsf_workflow_path(@dmsf_workflow, :step => i) %>
</td>
</tr>
<% end; reset_cycle %>
@ -69,15 +69,15 @@
</div>
<div class="splitcontentright">
<%= form_for(@workflow, :url => edit_dmsf_workflow_path(@workflow),
<%= form_for(@dmsf_workflow, :url => edit_dmsf_workflow_path(@dmsf_workflow),
:html => {:method => :post}) do |f| %>
<fieldset><legend><%=l(:label_user_new)%></legend>
<p><%= label_tag 'user_search', l(:label_user_search) %><%= text_field_tag 'user_search', nil %></p>
<%= javascript_tag "observeSearchfield('user_search', 'users', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@workflow, :dmsf_workflow_step_assignment_id => nil, :dmsf_file_revision_id => nil, :project_id => @project ? @project.id : nil) }')" %>
<%= javascript_tag "observeSearchfield('user_search', 'users', '#{ escape_javascript autocomplete_for_user_dmsf_workflow_path(@dmsf_workflow, :dmsf_workflow_step_assignment_id => nil, :dmsf_file_revision_id => nil, :project_id => @project ? @project.id : nil) }')" %>
<div id="users">
<%= render_principals_for_new_dmsf_workflow_users(@workflow, nil, nil) %>
<%= render_principals_for_new_dmsf_workflow_users(@dmsf_workflow, nil, nil) %>
</div>
<p>

View File

@ -16,6 +16,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%>
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'action', :locals => {:workflow => @workflow}) %>');
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'action', :locals => {:workflow => @dmsf_workflow}) %>');
showModal('ajax-modal', '400px');
$('#ajax-modal').addClass('new-action');

View File

@ -16,6 +16,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%>
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'assign', :locals => {:workflow => @workflow}) %>');
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'assign', :locals => {:workflow => @dmsf_workflow}) %>');
showModal('ajax-modal', '400px');
$('#ajax-modal').addClass('assignment');

View File

@ -16,4 +16,4 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%>
<%= render_principals_for_new_dmsf_workflow_users(@workflow, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id]) %>
<%= render_principals_for_new_dmsf_workflow_users(@dmsf_workflow, params[:dmsf_workflow_step_assignment_id], params[:dmsf_file_revision_id]) %>

View File

@ -16,6 +16,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.%>
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'log', :locals => {:workflow => @workflow}) %>');
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'log', :locals => {:workflow => @dmsf_workflow}) %>');
showModal('ajax-modal', '800px');
$('#ajax-modal').addClass('workflow-log');

View File

@ -23,7 +23,7 @@
<h2><%= link_to l(:label_dmsf_workflow_plural), dmsf_workflows_path %> &#187; <%=l(:label_dmsf_workflow_new)%></h2>
<% end %>
<%= labelled_form_for @workflow do |f| %>
<%= labelled_form_for @dmsf_workflow do |f| %>
<%= error_messages_for 'workflow' %>
<div class="box tabular">
<p><%= f.label :label_dmsf_workflow_name %><%= text_field_tag :name %></p>

View File

@ -27,7 +27,7 @@
<h3><%= l(:label_my_locked_documents)%> (<%= folders.count %>/<%= files.count %>)</h3>
<% if folders.any? || files.any?%>
<%= form_tag({}) do %>
<div><table class="list">
<table class="list">
<thead>
<tr>
<th><%=l(:field_project)%></th>

View File

@ -30,7 +30,7 @@
<h3><%= l(:label_my_open_approvals)%> (<%= assignments.count %>)</h3>
<% if assignments.any? %>
<%= form_tag({}) do %>
<div><table class="list">
<table class="list">
<thead>
<tr>
<th><%=l(:field_project)%></th>

26
test/fixtures/dmsf_links.yml vendored Normal file
View File

@ -0,0 +1,26 @@
---
folder_link:
id: 1
target_project_id: 1
target_id: 1
target_type: DmsfFolder
name: folder1_link
project_id: 1
dmsf_folder_id: NULL
deleted: 0
deleted_by_user_id: NULL
created_at: <%= DateTime.now() %>
updated_at: <%= DateTime.now() %>
file_link:
id: 2
target_project_id: 1
target_id: 4
target_type: DmsfFile
name: test_link
project_id: 1
dmsf_folder_id: 1
deleted: 0
deleted_by_user_id: NULL
created_at: <%= DateTime.now() %>
updated_at: <%= DateTime.now() %>

View File

@ -2,7 +2,7 @@
wf1:
id: 1
name: wf1
project_id: 5
project_id: 1
wf2:
id: 2

View File

@ -1,8 +1,107 @@
# Redmine plugin for Document Management System "Features"
#
# Copyright (C) 2014 Karel Pičman <karel.picman@lbcfree.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../test_helper', __FILE__)
class DmsfLinksControllerTest < ActionController::TestCase
# Replace this with your real tests.
def test_truth
assert true
class DmsfLinksControllerTest < RedmineDmsf::Test::TestCase
fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions,
:dmsf_folders, :dmsf_links, :roles, :member_roles
def setup
@user_admin = User.find_by_id 1
@user_member = User.find_by_id 2
@user_non_member = User.find_by_id 3
@project1 = Project.find_by_id 1
assert_not_nil @project1
@project1.enable_module! :dmsf
@role_manager = Role.where(:name => 'Manager').first
assert_not_nil @role_manager
@role_manager.add_permission! :file_manipulation
@folder1 = DmsfFolder.find_by_id 1
@file1 = DmsfFile.find_by_id 1
@request.session[:user_id] = @user_member.id
@file_link = DmsfLink.find_by_id 1
@request.env['HTTP_REFERER'] = dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
end
def test_truth
assert_kind_of User, @user_admin
assert_kind_of User, @user_member
assert_kind_of User, @user_non_member
assert_kind_of Project, @project1
assert_kind_of Role, @role_manager
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfLink, @file_link
end
def test_authorize
# Admin
@request.session[:user_id] = @user_admin.id
get :new, :project_id => @project1.id
assert_response :success
assert_template 'new'
# Non member
@request.session[:user_id] = @user_non_member.id
get :new, :project_id => @project1.id
assert_response :forbidden
# Member
@request.session[:user_id] = @user_member.id
get :new, :project_id => @project1.id
assert_response :success
# Without the module
@project1.disable_module!(:dmsf)
get :new, :project_id => @project1.id
assert_response :forbidden
# Without permissions
@project1.enable_module!(:dmsf)
@role_manager.remove_permission! :file_manipulation
get :new, :project_id => @project1.id
assert_response :forbidden
end
def test_new
get :new, :project_id => @project1.id
assert_response :success
end
def test_create
assert_difference 'DmsfLink.count', +1 do
post :create, :dmsf_link => {
:project_id => @project1.id,
:target_project_id => @project1.id,
:dmsf_folder_id => @folder1.id,
:target_file_id => @file1.id,
:name => 'file_link'
}
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
def test_destroy
assert_difference 'DmsfLink.count', -1 do
delete :destroy, :project_id => @project1.id, :id => @file_link.id
end
assert_redirected_to dmsf_folder_path(:id => @project1.id, :folder_id => @folder1.id)
end
end

View File

@ -30,17 +30,16 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
@user_member = User.find_by_id 2 # John Smith - manager
@user_non_member = User.find_by_id 3 #Dave Lopper
@request.session[:user_id] = @user_member.id
@role_manager = Role.where(:name => 'Manager').first
@role_manager.add_permission! :file_manipulation
@role_manager = Role.find_by_name('Manager')
@role_manager.add_permission! :file_manipulation
@role_manager.add_permission! :manage_workflows
@wfs1 = DmsfWorkflowStep.find_by_id 1 # step 1
@wfs2 = DmsfWorkflowStep.find_by_id 2 # step 2
@wfs3 = DmsfWorkflowStep.find_by_id 3 # step 1
@wfs4 = DmsfWorkflowStep.find_by_id 4 # step 2
@wfs5 = DmsfWorkflowStep.find_by_id 5 # step 3
@manager_role = Role.find_by_name('Manager')
@project1 = Project.find_by_id 1
@project5 = Project.find_by_id 5
@project5.enable_module! :dmsf
@wfs5 = DmsfWorkflowStep.find_by_id 5 # step 3
@project1 = Project.find_by_id 1
@project1.enable_module! :dmsf
@wf1 = DmsfWorkflow.find_by_id 1
@wfsa2 = DmsfWorkflowStepAssignment.find_by_id 2
@revision1 = DmsfFileRevision.find_by_id 1
@ -48,6 +47,27 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
@revision3 = DmsfFileRevision.find_by_id 3
@file1 = DmsfFile.find_by_id 1
@file2 = DmsfFile.find_by_id 2
@request.env['HTTP_REFERER'] = dmsf_folder_path(:id => @project1.id)
end
def test_truth
assert_kind_of User, @user_admin
assert_kind_of User, @user_member
assert_kind_of User, @user_non_member
assert_kind_of Role, @role_manager
assert_kind_of DmsfWorkflowStep, @wfs1
assert_kind_of DmsfWorkflowStep, @wfs2
assert_kind_of DmsfWorkflowStep, @wfs3
assert_kind_of DmsfWorkflowStep, @wfs4
assert_kind_of DmsfWorkflowStep, @wfs5
assert_kind_of Project, @project1
assert_kind_of DmsfWorkflow, @wf1
assert_kind_of DmsfWorkflowStepAssignment, @wfsa2
assert_kind_of DmsfFileRevision, @revision1
assert_kind_of DmsfFileRevision, @revision2
assert_kind_of DmsfFileRevision, @revision3
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2
end
def test_authorize
@ -59,7 +79,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
# Non member
@request.session[:user_id] = @user_non_member.id
get :index, :project_id => @project5.id
get :index, :project_id => @project1.id
assert_response :forbidden
# Member
@ -68,28 +88,37 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
get :index
assert_response :forbidden
# Project
get :index, :project_id => @project5.id
get :index, :project_id => @project1.id
assert_response :success
assert_template 'index'
# Without the module
@project5.disable_module!(:dmsf)
get :index, :project_id => @project5.id
assert_response :forbidden
# Without permissions
@project5.enable_module!(:dmsf)
@role_manager.remove_permission! :manage_workflows
get :index, :project_id => @project1.id
assert_response :forbidden
@role_manager.add_permission! :manage_workflows
@revision2.dmsf_workflow_id = @wf1.id
get :start, :id => @revision2.dmsf_workflow_id,:dmsf_file_revision_id => @revision2.id
assert_response :redirect
@role_manager.remove_permission! :file_manipulation
get :index, :project_id => @project5.id
assert_response :forbidden
get :start, :id => @revision2.dmsf_workflow_id,:dmsf_file_revision_id => @revision2.id
assert_response :forbidden
# Without the module
@role_manager.add_permission! :file_manipulation
@project1.disable_module!(:dmsf)
get :index, :project_id => @project1.id
assert_response :forbidden
end
def test_index
get :index, :project_id => @project5.id
get :index, :project_id => @project1.id
assert_response :success
assert_template 'index'
end
def test_new
get :new, :project_id => @project5.id
get :new, :project_id => @project1.id
assert_response :success
assert_template 'new'
end
@ -102,9 +131,9 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
def test_create
assert_difference 'DmsfWorkflow.count', +1 do
post :create, :name => 'wf3', :project_id => @project5.id
post :create, :name => 'wf3', :project_id => @project1.id
end
assert_redirected_to settings_project_path(@project5, :tab => 'dmsf_workflow')
assert_redirected_to settings_project_path(@project1, :tab => 'dmsf_workflow')
end
def test_update
@ -113,13 +142,12 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
assert_equal 'wf1a', @wf1.name
end
def test_destroy
id = @wf1.id
def test_destroy
assert_difference 'DmsfWorkflow.count', -1 do
delete :destroy, :id => @wf1.id
end
assert_redirected_to settings_project_path(@project5, :tab => 'dmsf_workflow')
assert_equal 0, DmsfWorkflowStep.where(:dmsf_workflow_id => id).all.count
assert_redirected_to settings_project_path(@project1, :tab => 'dmsf_workflow')
assert_equal 0, DmsfWorkflowStep.where(:dmsf_workflow_id => @wf1.id).all.count
end
def test_add_step
@ -204,46 +232,42 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
assert_equal 3, @wfs3.step
end
def test_action_approve
@request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf'
def test_action_approve
post(
:new_action,
: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 => '')
assert_redirected_to dmsf_folder_path(:id => @project1.id)
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:action => DmsfWorkflowStepAction::ACTION_APPROVE).first
end
def test_action_reject
post(
:new_action,
:commit => l(:button_submit),
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision2.id,
:step_action => DmsfWorkflowStepAction::ACTION_APPROVE,
:user_id => nil,
:note => '')
:step_action => DmsfWorkflowStepAction::ACTION_REJECT,
:note => 'Rejected because...')
assert_response :redirect
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:action => DmsfWorkflowStepAction::ACTION_APPROVE).first
:action => DmsfWorkflowStepAction::ACTION_REJECT).first
end
#
# def test_action_reject
# # TODO: There is a strange error: 'ActiveRecord::RecordNotFound: Couldn't find Project with id=0'
# # while saving the revision
# @request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf'
# post(
# :new_action,
# :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...')
# assert_response :redirect
# assert DmsfWorkflowStepAction.where(
# :dmsf_workflow_step_assignment_id => @wfsa2.id,
# :action => DmsfWorkflowStepAction::ACTION_REJECT).first
# end
#
def test_action
xhr(
:get,
:action,
:project_id => @project5.id,
:project_id => @project1.id,
:id => @wf1.id,
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:dmsf_file_revision_id => @revision2.id,
@ -253,8 +277,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
assert_template 'action'
end
def test_new_action_delegate
@request.env['HTTP_REFERER'] = 'http://test.host/projects/2/dmsf'
def test_new_action_delegate
post(
:new_action,
:commit => l(:button_submit),
@ -263,7 +286,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
:dmsf_file_revision_id => @revision2.id,
:step_action => @user_admin.id * 10,
:note => 'Delegated because...')
assert_response :redirect
assert_redirected_to dmsf_folder_path(:id => @project1.id)
assert DmsfWorkflowStepAction.where(
:dmsf_workflow_step_assignment_id => @wfsa2.id,
:action => DmsfWorkflowStepAction::ACTION_DELEGATE).first
@ -275,7 +298,7 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
xhr(
:get,
:assign,
:project_id => @project5.id,
:project_id => @project1.id,
:id => @wf1.id,
:dmsf_file_revision_id => @revision1.id,
:title => l(:label_dmsf_wokflow_action_assign))
@ -284,21 +307,21 @@ class DmsfWorkflowsControllerTest < RedmineDmsf::Test::TestCase
assert_template 'assign'
end
# def test_assignment
# # TODO: There is a strange error: 'ActiveRecord::RecordNotFound: Couldn't find Project with id=0'
# # while saving the revision
# @request.env['HTTP_REFERER'] = 'http://test.host/projects/3/dmsf'
# post(
# :assignment,
# :commit => l(:button_submit),
# :id => @wf1.id,
# :dmsf_workflow_id => @wf1.id,
# :dmsf_file_revision_id => @revision3.id,
# :action => 'assignment',
# :project_id => @project5.id)
# assert_response :redirect
# @file1.reload
# assert file1.locked?
# assert true
# end
def test_start
@revision2.dmsf_workflow_id = @wf1.id
get :start, :id => @revision2.dmsf_workflow_id,:dmsf_file_revision_id => @revision2.id
assert_redirected_to dmsf_folder_path(:id => @project1.id)
end
def test_assignment
post(
:assignment,
:commit => l(:button_submit),
:id => @wf1.id,
:dmsf_workflow_id => @wf1.id,
:dmsf_file_revision_id => @revision2.id,
:action => 'assignment',
:project_id => @project1.id)
assert_response :redirect
end
end

View File

@ -16,7 +16,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.dirname(__FILE__) + '/../test_helper'
require File.expand_path('../../test_helper', __FILE__)
class DmsfFileTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :users, :dmsf_folders, :dmsf_files, :dmsf_file_revisions,

View File

@ -18,10 +18,122 @@
require File.expand_path('../../test_helper', __FILE__)
class DmsfLinksTest < ActiveSupport::TestCase
class DmsfLinksTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :members, :dmsf_files, :dmsf_file_revisions,
:dmsf_folders, :dmsf_links
# Replace this with your real tests.
def test_truth
assert true
def setup
@project1 = Project.find_by_id 1
@folder1 = DmsfFolder.find_by_id 1
@folder2 = DmsfFolder.find_by_id 2
@file1 = DmsfFile.find_by_id 1
@file4 = DmsfFile.find_by_id 4
@folder_link = DmsfLink.find_by_id 1
@file_link = DmsfLink.find_by_id 2
end
end
def test_truth
assert_kind_of Project, @project1
assert_kind_of DmsfFolder, @folder1
assert_kind_of DmsfFolder, @folder2
assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file4
assert_kind_of DmsfLink, @folder_link
assert_kind_of DmsfLink, @file_link
end
def test_create
# Folder link
folder_link = DmsfLink.new(
:target_project_id => @project1.id,
:target_id => @folder1.id,
:target_type => DmsfFolder.model_name,
:name => 'folder1_link2',
:project_id => @project1.id,
:created_at => DateTime.now(),
:updated_at => DateTime.now())
assert folder_link.save
# File link
file_link = DmsfLink.new(
:target_project_id => @project1.id,
:target_id => @file1.id,
:target_type => DmsfFile.model_name,
:name => 'file1_link2',
:project_id => @project1.id,
:created_at => DateTime.now(),
:updated_at => DateTime.now())
assert file_link.save
end
def test_validate_name_length
@folder_link.name = 'a' * 256
assert !@folder_link.save
assert_equal 1, @folder_link.errors.count
end
def test_validate_name_presence
@folder_link.name = ''
assert !@folder_link.save
assert_equal 1, @folder_link.errors.count
end
def test_validate_target_id_presence
@folder_link.target_id = nil
assert !@folder_link.save
assert_equal 1, @folder_link.errors.count
end
def test_belongs_to_project
@project1.destroy
assert_nil DmsfLink.find_by_id 1
assert_nil DmsfLink.find_by_id 2
end
def test_belongs_to_dmsf_folder
@folder1.destroy
assert_nil DmsfLink.find_by_id 1
assert_nil DmsfLink.find_by_id 2
end
def test_target_folder_id
assert_equal 2, @file_link.target_folder_id
assert_equal 1, @folder_link.target_folder_id
end
def target_folder
assert_equal @folder2, @file_link.target_folder
assert_equal @folder1, @folder_link.target_folder
end
def target_file_id
assert_equal 4, @file_link.target_file_id
assert_nil @folder_link.target_file
end
def target_file
assert_equal @file4, @file_link.target_file
assert_nil @folder_link.target_file
end
def target_project
assert_equal @project, @file_link.target_project
assert_equal @project, @folder_link.target_project
end
def folder
assert_equal @folder1, @file_link.folder
assert_nil @folder_link.folder
end
def title
assert_equal @file_link.name, @file_link.title
assert_equal @folder_link.name, @folder_link.title
end
def test_destroy
@folder_link.destroy
assert_nil DmsfLink.find_by_id 1
end
end

View File

@ -38,6 +38,7 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
@revision1 = DmsfFileRevision.find_by_id 1
@revision2 = DmsfFileRevision.find_by_id 2
@project = Project.find_by_id 2
@project5 = Project.find_by_id 5
end
def test_truth
@ -152,8 +153,8 @@ class DmsfWorkflowTest < RedmineDmsf::Test::UnitTest
def test_delegates
delegates = @wf1.delegates(nil, nil, nil)
assert_equal delegates.size, User.active.all.size
delegates = @wf1.delegates('Redmine', nil, nil)
assert_equal(delegates.all.count + 1, @project5.users.all.count)
delegates = @wf1.delegates('Dave', nil, nil)
assert_equal delegates.size, 1
delegates = @wf1.delegates(nil, @wfsa1.id, 2)
assert !delegates.any?{|user| user.id == @wfsa1.user_id}