##// END OF EJS Templates
Merged r2109, r2118, r2130, r2131, r2134, r2135, r2136 and r2139 to r2145 from trunk....
Merged r2109, r2118, r2130, r2131, r2134, r2135, r2136 and r2139 to r2145 from trunk. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/0.8-stable@2146 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r2086:50794b08a925
r2144:7389b4bed0ca
Show More
issues_controller_test.rb
729 lines | 26.4 KiB | text/x-ruby | RubyLexer
/ test / functional / issues_controller_test.rb
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Calendar....
r1796 # Redmine - project management software
# Copyright (C) 2006-2008 Jean-Philippe Lang
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 #
# 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.dirname(__FILE__) + '/../test_helper'
require 'issues_controller'
# Re-raise errors caught by the controller.
class IssuesController; def rescue_action(e) raise e end; end
class IssuesControllerTest < Test::Unit::TestCase
Jean-Philippe Lang
Added some functional tests and a CVS test repository....
r974 fixtures :projects,
:users,
:roles,
:members,
:issues,
:issue_statuses,
Jean-Philippe Lang
Functional tests fail when run on their own (#1895)....
r1826 :versions,
Jean-Philippe Lang
Added some functional tests and a CVS test repository....
r974 :trackers,
Jean-Philippe Lang
ProjectsController#add_issue moved to IssuesController#new....
r1066 :projects_trackers,
Jean-Philippe Lang
Added some functional tests and a CVS test repository....
r974 :issue_categories,
:enabled_modules,
:enumerations,
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 :attachments,
Jean-Philippe Lang
Added default value for custom fields. Fixed javascript on custom field form for project and user custom fields....
r1076 :workflows,
:custom_fields,
:custom_values,
Jean-Philippe Lang
Let the user choose when deleting issues with reported hours (closes #734, #71):...
r1168 :custom_fields_trackers,
Jean-Philippe Lang
Fixes functional tests broken by r1501....
r1490 :time_entries,
:journals,
:journal_details
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874
def setup
@controller = IssuesController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
User.current = nil
end
def test_index
get :index
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_nil assigns(:project)
Jean-Philippe Lang
Fixed: private subprojects are listed on the issues view (#1217)....
r1417 assert_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
# private projects hidden
assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
assert_no_tag :tag => 'a', :content => /Issue on project 2/
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 end
Jean-Philippe Lang
Fixed: cross-project issue list should not show issues of projects for which the issue tracking module was disabled....
r1905
def test_index_should_not_list_issues_when_module_disabled
EnabledModule.delete_all("name = 'issue_tracking' AND project_id = 1")
get :index
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_nil assigns(:project)
assert_no_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874
def test_index_with_project
Jean-Philippe Lang
Fixed: private subprojects are listed on the issues view (#1217)....
r1417 Setting.display_subprojects_issues = 0
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 get :index, :project_id => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
Jean-Philippe Lang
Fixed: private subprojects are listed on the issues view (#1217)....
r1417 assert_tag :tag => 'a', :content => /Can't print recipes/
assert_no_tag :tag => 'a', :content => /Subproject issue/
end
def test_index_with_project_and_subprojects
Setting.display_subprojects_issues = 1
get :index, :project_id => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
assert_no_tag :tag => 'a', :content => /Issue of a private subproject/
end
def test_index_with_project_and_subprojects_should_show_private_subprojects
@request.session[:user_id] = 2
Setting.display_subprojects_issues = 1
get :index, :project_id => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
assert_tag :tag => 'a', :content => /Can't print recipes/
assert_tag :tag => 'a', :content => /Subproject issue/
assert_tag :tag => 'a', :content => /Issue of a private subproject/
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 end
def test_index_with_project_and_filter
get :index, :project_id => 1, :set_filter => 1
assert_response :success
assert_template 'index.rhtml'
assert_not_nil assigns(:issues)
end
def test_index_csv_with_project
get :index, :format => 'csv'
assert_response :success
assert_not_nil assigns(:issues)
assert_equal 'text/csv', @response.content_type
get :index, :project_id => 1, :format => 'csv'
assert_response :success
assert_not_nil assigns(:issues)
assert_equal 'text/csv', @response.content_type
end
def test_index_pdf
get :index, :format => 'pdf'
assert_response :success
assert_not_nil assigns(:issues)
assert_equal 'application/pdf', @response.content_type
get :index, :project_id => 1, :format => 'pdf'
assert_response :success
assert_not_nil assigns(:issues)
assert_equal 'application/pdf', @response.content_type
end
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Gantt chart....
r1795
def test_gantt
get :gantt, :project_id => 1
assert_response :success
assert_template 'gantt.rhtml'
assert_not_nil assigns(:gantt)
events = assigns(:gantt).events
assert_not_nil events
# Issue with start and due dates
i = Issue.find(1)
assert_not_nil i.due_date
assert events.include?(Issue.find(1))
# Issue with without due date but targeted to a version with date
i = Issue.find(2)
assert_nil i.due_date
assert events.include?(i)
end
Jean-Philippe Lang
Cross-project gantt and calendar (#1157)....
r2086 def test_cross_project_gantt
get :gantt
assert_response :success
assert_template 'gantt.rhtml'
assert_not_nil assigns(:gantt)
events = assigns(:gantt).events
assert_not_nil events
end
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Gantt chart....
r1795 def test_gantt_export_to_pdf
get :gantt, :project_id => 1, :format => 'pdf'
assert_response :success
assert_template 'gantt.rfpdf'
assert_equal 'application/pdf', @response.content_type
assert_not_nil assigns(:gantt)
end
Jean-Philippe Lang
Cross-project gantt and calendar (#1157)....
r2086
def test_cross_project_gantt_export_to_pdf
get :gantt, :format => 'pdf'
assert_response :success
assert_template 'gantt.rfpdf'
assert_equal 'application/pdf', @response.content_type
assert_not_nil assigns(:gantt)
end
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Gantt chart....
r1795
if Object.const_defined?(:Magick)
def test_gantt_image
get :gantt, :project_id => 1, :format => 'png'
assert_response :success
assert_equal 'image/png', @response.content_type
end
else
puts "RMagick not installed. Skipping tests !!!"
end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Calendar....
r1796 def test_calendar
get :calendar, :project_id => 1
assert_response :success
assert_template 'calendar'
assert_not_nil assigns(:calendar)
Jean-Philippe Lang
Cross-project gantt and calendar (#1157)....
r2086 end
def test_cross_project_calendar
get :calendar
assert_response :success
assert_template 'calendar'
assert_not_nil assigns(:calendar)
Jean-Philippe Lang
Adds support for free ticket filtering and custom queries on Calendar....
r1796 end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 def test_changes
get :changes, :project_id => 1
assert_response :success
Jean-Philippe Lang
Display links to Atom feeds (closes #496, #750)....
r1171 assert_not_nil assigns(:journals)
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 assert_equal 'application/atom+xml', @response.content_type
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 def test_show_by_anonymous
Jean-Philippe Lang
Added some functional tests (issues)....
r971 get :show, :id => 1
assert_response :success
assert_template 'show.rhtml'
assert_not_nil assigns(:issue)
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 assert_equal Issue.find(1), assigns(:issue)
# anonymous role is allowed to add a note
assert_tag :tag => 'form',
:descendant => { :tag => 'fieldset',
:child => { :tag => 'legend',
:content => /Notes/ } }
Jean-Philippe Lang
Added some functional tests (issues)....
r971 end
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 def test_show_by_manager
@request.session[:user_id] = 2
get :show, :id => 1
assert_response :success
assert_tag :tag => 'form',
:descendant => { :tag => 'fieldset',
:child => { :tag => 'legend',
:content => /Change properties/ } },
:descendant => { :tag => 'fieldset',
:child => { :tag => 'legend',
:content => /Log time/ } },
:descendant => { :tag => 'fieldset',
:child => { :tag => 'legend',
:content => /Notes/ } }
end
Jean-Philippe Lang
ProjectsController#add_issue moved to IssuesController#new....
r1066 def test_get_new
@request.session[:user_id] = 2
get :new, :project_id => 1, :tracker_id => 1
assert_response :success
assert_template 'new'
Jean-Philippe Lang
Added default value for custom fields. Fixed javascript on custom field form for project and user custom fields....
r1076
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 assert_tag :tag => 'input', :attributes => { :name => 'issue[custom_field_values][2]',
Jean-Philippe Lang
Added default value for custom fields. Fixed javascript on custom field form for project and user custom fields....
r1076 :value => 'Default string' }
Jean-Philippe Lang
ProjectsController#add_issue moved to IssuesController#new....
r1066 end
def test_get_new_without_tracker_id
@request.session[:user_id] = 2
get :new, :project_id => 1
assert_response :success
assert_template 'new'
issue = assigns(:issue)
assert_not_nil issue
assert_equal Project.find(1).trackers.first, issue.tracker
end
def test_update_new_form
@request.session[:user_id] = 2
xhr :post, :new, :project_id => 1,
:issue => {:tracker_id => 2,
:subject => 'This is the test_new issue',
:description => 'This is the description',
:priority_id => 5}
assert_response :success
assert_template 'new'
end
def test_post_new
@request.session[:user_id] = 2
post :new, :project_id => 1,
Jean-Philippe Lang
Fixed: issues always created with default tracker (#1553)....
r1596 :issue => {:tracker_id => 3,
Jean-Philippe Lang
ProjectsController#add_issue moved to IssuesController#new....
r1066 :subject => 'This is the test_new issue',
:description => 'This is the description',
Jean-Philippe Lang
Fixed: Updating tickets add a time log with zero hours (#1147)....
r1370 :priority_id => 5,
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 :estimated_hours => '',
:custom_field_values => {'2' => 'Value for field 2'}}
Jean-Philippe Lang
Fix tests broken by r1243 (Redirect to issue page after creating a new issue)....
r1242 assert_redirected_to 'issues/show'
Jean-Philippe Lang
Added default value for custom fields. Fixed javascript on custom field form for project and user custom fields....
r1076
issue = Issue.find_by_subject('This is the test_new issue')
assert_not_nil issue
assert_equal 2, issue.author_id
Jean-Philippe Lang
Fixed: issues always created with default tracker (#1553)....
r1596 assert_equal 3, issue.tracker_id
Jean-Philippe Lang
Fixed: Updating tickets add a time log with zero hours (#1147)....
r1370 assert_nil issue.estimated_hours
Jean-Philippe Lang
Fixes custom fields display order at several places (#1768)....
r1730 v = issue.custom_values.find(:first, :conditions => {:custom_field_id => 2})
Jean-Philippe Lang
Added default value for custom fields. Fixed javascript on custom field form for project and user custom fields....
r1076 assert_not_nil v
assert_equal 'Value for field 2', v.value
Jean-Philippe Lang
ProjectsController#add_issue moved to IssuesController#new....
r1066 end
Jean-Philippe Lang
Prevent NoMethodError on nil class if custom_fields params is not present in IssuesController#new (#969)....
r1302 def test_post_new_without_custom_fields_param
@request.session[:user_id] = 2
post :new, :project_id => 1,
:issue => {:tracker_id => 1,
:subject => 'This is the test_new issue',
:description => 'This is the description',
:priority_id => 5}
assert_redirected_to 'issues/show'
end
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 def test_post_new_with_required_custom_field_and_without_custom_fields_param
field = IssueCustomField.find_by_name('Database')
field.update_attribute(:is_required, true)
@request.session[:user_id] = 2
post :new, :project_id => 1,
:issue => {:tracker_id => 1,
:subject => 'This is the test_new issue',
:description => 'This is the description',
:priority_id => 5}
assert_response :success
assert_template 'new'
issue = assigns(:issue)
assert_not_nil issue
assert_equal 'activerecord_error_invalid', issue.errors.on(:custom_values)
end
def test_post_should_preserve_fields_values_on_validation_failure
@request.session[:user_id] = 2
post :new, :project_id => 1,
:issue => {:tracker_id => 1,
:subject => 'This is the test_new issue',
# empty description
:description => '',
:priority_id => 6,
:custom_field_values => {'1' => 'Oracle', '2' => 'Value for field 2'}}
assert_response :success
assert_template 'new'
assert_tag :input, :attributes => { :name => 'issue[subject]',
:value => 'This is the test_new issue' }
assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
:child => { :tag => 'option', :attributes => { :selected => 'selected',
:value => '6' },
:content => 'High' }
# Custom fields
assert_tag :select, :attributes => { :name => 'issue[custom_field_values][1]' },
:child => { :tag => 'option', :attributes => { :selected => 'selected',
:value => 'Oracle' },
:content => 'Oracle' }
assert_tag :input, :attributes => { :name => 'issue[custom_field_values][2]',
:value => 'Value for field 2'}
end
Jean-Philippe Lang
ProjectsController#add_issue moved to IssuesController#new....
r1066 def test_copy_issue
@request.session[:user_id] = 2
get :new, :project_id => 1, :copy_from => 1
assert_template 'new'
assert_not_nil assigns(:issue)
orig = Issue.find(1)
assert_equal orig.subject, assigns(:issue).subject
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971 def test_get_edit
@request.session[:user_id] = 2
get :edit, :id => 1
assert_response :success
assert_template 'edit'
assert_not_nil assigns(:issue)
assert_equal Issue.find(1), assigns(:issue)
end
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116
def test_get_edit_with_params
@request.session[:user_id] = 2
get :edit, :id => 1, :issue => { :status_id => 5, :priority_id => 7 }
assert_response :success
assert_template 'edit'
issue = assigns(:issue)
assert_not_nil issue
assert_equal 5, issue.status_id
assert_tag :select, :attributes => { :name => 'issue[status_id]' },
:child => { :tag => 'option',
:content => 'Closed',
:attributes => { :selected => 'selected' } }
assert_equal 7, issue.priority_id
assert_tag :select, :attributes => { :name => 'issue[priority_id]' },
:child => { :tag => 'option',
:content => 'Urgent',
:attributes => { :selected => 'selected' } }
end
Jean-Philippe Lang
Adds a Reply link to each issue note (#739). Reply is pre-filled with the quoted note....
r1466
def test_reply_to_issue
@request.session[:user_id] = 2
get :reply, :id => 1
assert_response :success
assert_select_rjs :show, "update"
end
def test_reply_to_note
@request.session[:user_id] = 2
get :reply, :id => 1, :journal_id => 2
assert_response :success
assert_select_rjs :show, "update"
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 def test_post_edit_without_custom_fields_param
Jean-Philippe Lang
Added some functional tests (issues)....
r971 @request.session[:user_id] = 2
Jean-Philippe Lang
Add email notification to IssuesController#edit....
r1005 ActionMailer::Base.deliveries.clear
issue = Issue.find(1)
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 assert_equal '125', issue.custom_value_for(2).value
Jean-Philippe Lang
Add email notification to IssuesController#edit....
r1005 old_subject = issue.subject
new_subject = 'Subject modified by IssuesControllerTest#test_post_edit'
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 assert_difference('Journal.count') do
assert_difference('JournalDetail.count', 2) do
post :edit, :id => 1, :issue => {:subject => new_subject,
:priority_id => '6',
:category_id => '1' # no change
}
end
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971 assert_redirected_to 'issues/show/1'
Jean-Philippe Lang
Add email notification to IssuesController#edit....
r1005 issue.reload
assert_equal new_subject, issue.subject
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 # Make sure custom fields were not cleared
assert_equal '125', issue.custom_value_for(2).value
Jean-Philippe Lang
Add email notification to IssuesController#edit....
r1005
mail = ActionMailer::Base.deliveries.last
assert_kind_of TMail::Mail, mail
assert mail.subject.starts_with?("[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}]")
assert mail.body.include?("Subject changed from #{old_subject} to #{new_subject}")
Jean-Philippe Lang
Added some functional tests (issues)....
r971 end
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 def test_post_edit_with_custom_field_change
@request.session[:user_id] = 2
issue = Issue.find(1)
assert_equal '125', issue.custom_value_for(2).value
assert_difference('Journal.count') do
assert_difference('JournalDetail.count', 3) do
post :edit, :id => 1, :issue => {:subject => 'Custom field change',
:priority_id => '6',
:category_id => '1', # no change
:custom_field_values => { '2' => 'New custom value' }
}
end
end
assert_redirected_to 'issues/show/1'
issue.reload
assert_equal 'New custom value', issue.custom_value_for(2).value
mail = ActionMailer::Base.deliveries.last
assert_kind_of TMail::Mail, mail
assert mail.body.include?("Searchable field changed from 125 to New custom value")
end
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 def test_post_edit_with_status_and_assignee_change
Jean-Philippe Lang
Added some functional tests (issues)....
r971 issue = Issue.find(1)
assert_equal 1, issue.status_id
@request.session[:user_id] = 2
Jean-Philippe Lang
Fixed: Updating tickets add a time log with zero hours (#1147)....
r1370 assert_difference('TimeEntry.count', 0) do
post :edit,
:id => 1,
:issue => { :status_id => 2, :assigned_to_id => 3 },
:notes => 'Assigned to dlopper',
:time_entry => { :hours => '', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971 assert_redirected_to 'issues/show/1'
issue.reload
assert_equal 2, issue.status_id
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 j = issue.journals.find(:first, :order => 'id DESC')
Jean-Philippe Lang
Added some functional tests (issues)....
r971 assert_equal 'Assigned to dlopper', j.notes
assert_equal 2, j.details.size
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030
mail = ActionMailer::Base.deliveries.last
assert mail.body.include?("Status changed from New to Assigned")
end
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 def test_post_edit_with_note_only
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 notes = 'Note added by IssuesControllerTest#test_update_with_note_only'
# anonymous user
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 post :edit,
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 :id => 1,
:notes => notes
assert_redirected_to 'issues/show/1'
j = Issue.find(1).journals.find(:first, :order => 'id DESC')
assert_equal notes, j.notes
assert_equal 0, j.details.size
assert_equal User.anonymous, j.user
mail = ActionMailer::Base.deliveries.last
assert mail.body.include?(notes)
end
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 def test_post_edit_with_note_and_spent_time
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 @request.session[:user_id] = 2
spent_hours_before = Issue.find(1).spent_hours
Jean-Philippe Lang
Fixed: Updating tickets add a time log with zero hours (#1147)....
r1370 assert_difference('TimeEntry.count') do
post :edit,
:id => 1,
:notes => '2.5 hours added',
:time_entry => { :hours => '2.5', :comments => '', :activity_id => Enumeration.get_values('ACTI').first }
end
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 assert_redirected_to 'issues/show/1'
issue = Issue.find(1)
j = issue.journals.find(:first, :order => 'id DESC')
assert_equal '2.5 hours added', j.notes
assert_equal 0, j.details.size
t = issue.time_entries.find(:first, :order => 'id DESC')
assert_not_nil t
assert_equal 2.5, t.hours
assert_equal spent_hours_before + 2.5, issue.spent_hours
end
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 def test_post_edit_with_attachment_only
Jean-Philippe Lang
File viewer for attached text files....
r1506 set_tmp_attachments_directory
Eric Davis
Fixed a failing assertion in test_post_edit_with_attachment_only that would...
r1920 # Delete all fixtured journals, a race condition can occur causing the wrong
# journal to get fetched in the next find.
Journal.delete_all
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 # anonymous user
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 post :edit,
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 :id => 1,
:notes => '',
Jean-Philippe Lang
Adds an optional description to attachments....
r1166 :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 assert_redirected_to 'issues/show/1'
j = Issue.find(1).journals.find(:first, :order => 'id DESC')
assert j.notes.blank?
assert_equal 1, j.details.size
assert_equal 'testfile.txt', j.details.first.value
assert_equal User.anonymous, j.user
mail = ActionMailer::Base.deliveries.last
assert mail.body.include?('testfile.txt')
end
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 def test_post_edit_with_no_change
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 issue = Issue.find(1)
issue.journals.clear
ActionMailer::Base.deliveries.clear
Jean-Philippe Lang
Merged IssuesController #edit and #update into a single actions....
r1115 post :edit,
Jean-Philippe Lang
Merged IssuesController change_status and add_note actions....
r1030 :id => 1,
:notes => ''
assert_redirected_to 'issues/show/1'
issue.reload
assert issue.journals.empty?
# No email should be sent
assert ActionMailer::Base.deliveries.empty?
Jean-Philippe Lang
Added some functional tests (issues)....
r971 end
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116
def test_bulk_edit
@request.session[:user_id] = 2
# update issues priority
post :bulk_edit, :ids => [1, 2], :priority_id => 7, :notes => 'Bulk editing', :assigned_to_id => ''
assert_response 302
# check that the issues were updated
assert_equal [7, 7], Issue.find_all_by_id([1, 2]).collect {|i| i.priority.id}
assert_equal 'Bulk editing', Issue.find(1).journals.find(:first, :order => 'created_on DESC').notes
end
Jean-Philippe Lang
Fixed: when bulk editing, setting "Assigned to" to "nobody" causes an sql error with Postgresql (#935)....
r1279 def test_bulk_unassign
assert_not_nil Issue.find(2).assigned_to
@request.session[:user_id] = 2
# unassign issues
post :bulk_edit, :ids => [1, 2], :notes => 'Bulk unassigning', :assigned_to_id => 'none'
assert_response 302
# check that the issues were updated
assert_nil Issue.find(2).assigned_to
end
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 def test_move_one_issue_to_another_project
@request.session[:user_id] = 1
post :move, :id => 1, :new_project_id => 2
assert_redirected_to 'projects/ecookbook/issues'
assert_equal 2, Issue.find(1).project_id
end
def test_bulk_move_to_another_project
@request.session[:user_id] = 1
post :move, :ids => [1, 2], :new_project_id => 2
assert_redirected_to 'projects/ecookbook/issues'
# Issues moved to project 2
assert_equal 2, Issue.find(1).project_id
assert_equal 2, Issue.find(2).project_id
# No tracker change
assert_equal 1, Issue.find(1).tracker_id
assert_equal 2, Issue.find(2).tracker_id
end
def test_bulk_move_to_another_tracker
@request.session[:user_id] = 1
post :move, :ids => [1, 2], :new_tracker_id => 2
assert_redirected_to 'projects/ecookbook/issues'
assert_equal 2, Issue.find(1).tracker_id
assert_equal 2, Issue.find(2).tracker_id
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 def test_context_menu_one_issue
@request.session[:user_id] = 2
get :context_menu, :ids => [1]
assert_response :success
assert_template 'context_menu'
assert_tag :tag => 'a', :content => 'Edit',
:attributes => { :href => '/issues/edit/1',
:class => 'icon-edit' }
assert_tag :tag => 'a', :content => 'Closed',
:attributes => { :href => '/issues/edit/1?issue%5Bstatus_id%5D=5',
:class => '' }
assert_tag :tag => 'a', :content => 'Immediate',
Jean-Philippe Lang
One-click bulk edition using the issue list context menu within the same project (#1770)....
r1764 :attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;priority_id=8',
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 :class => '' }
assert_tag :tag => 'a', :content => 'Dave Lopper',
Jean-Philippe Lang
One-click bulk edition using the issue list context menu within the same project (#1770)....
r1764 :attributes => { :href => '/issues/bulk_edit?assigned_to_id=3&amp;ids%5B%5D=1',
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 :class => '' }
assert_tag :tag => 'a', :content => 'Copy',
:attributes => { :href => '/projects/ecookbook/issues/new?copy_from=1',
:class => 'icon-copy' }
assert_tag :tag => 'a', :content => 'Move',
:attributes => { :href => '/issues/move?ids%5B%5D=1',
:class => 'icon-move' }
assert_tag :tag => 'a', :content => 'Delete',
:attributes => { :href => '/issues/destroy?ids%5B%5D=1',
:class => 'icon-del' }
end
def test_context_menu_one_issue_by_anonymous
get :context_menu, :ids => [1]
assert_response :success
assert_template 'context_menu'
assert_tag :tag => 'a', :content => 'Delete',
:attributes => { :href => '#',
:class => 'icon-del disabled' }
end
def test_context_menu_multiple_issues_of_same_project
@request.session[:user_id] = 2
get :context_menu, :ids => [1, 2]
assert_response :success
assert_template 'context_menu'
assert_tag :tag => 'a', :content => 'Edit',
:attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;ids%5B%5D=2',
:class => 'icon-edit' }
Jean-Philippe Lang
One-click bulk edition using the issue list context menu within the same project (#1770)....
r1764 assert_tag :tag => 'a', :content => 'Immediate',
:attributes => { :href => '/issues/bulk_edit?ids%5B%5D=1&amp;ids%5B%5D=2&amp;priority_id=8',
:class => '' }
assert_tag :tag => 'a', :content => 'Dave Lopper',
:attributes => { :href => '/issues/bulk_edit?assigned_to_id=3&amp;ids%5B%5D=1&amp;ids%5B%5D=2',
:class => '' }
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 assert_tag :tag => 'a', :content => 'Move',
:attributes => { :href => '/issues/move?ids%5B%5D=1&amp;ids%5B%5D=2',
:class => 'icon-move' }
assert_tag :tag => 'a', :content => 'Delete',
:attributes => { :href => '/issues/destroy?ids%5B%5D=1&amp;ids%5B%5D=2',
:class => 'icon-del' }
end
def test_context_menu_multiple_issues_of_different_project
Jean-Philippe Lang
Added some functional tests (issues)....
r971 @request.session[:user_id] = 2
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 get :context_menu, :ids => [1, 2, 4]
Jean-Philippe Lang
Added some functional tests (issues)....
r971 assert_response :success
assert_template 'context_menu'
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 assert_tag :tag => 'a', :content => 'Delete',
:attributes => { :href => '#',
:class => 'icon-del disabled' }
Jean-Philippe Lang
Added some functional tests (issues)....
r971 end
Jean-Philippe Lang
Let the user choose when deleting issues with reported hours (closes #734, #71):...
r1168 def test_destroy_issue_with_no_time_entries
Jean-Philippe Lang
Custom fields (list and boolean) can be used as criteria in time report (#1012)....
r1325 assert_nil TimeEntry.find_by_issue_id(2)
Jean-Philippe Lang
Added some functional tests (issues)....
r971 @request.session[:user_id] = 2
Jean-Philippe Lang
Custom fields (list and boolean) can be used as criteria in time report (#1012)....
r1325 post :destroy, :id => 2
Jean-Philippe Lang
Project identifier is now used in URLs (instead of project id)....
r994 assert_redirected_to 'projects/ecookbook/issues'
Jean-Philippe Lang
Custom fields (list and boolean) can be used as criteria in time report (#1012)....
r1325 assert_nil Issue.find_by_id(2)
Jean-Philippe Lang
Added some functional tests (issues)....
r971 end
Jean-Philippe Lang
Let the user choose when deleting issues with reported hours (closes #734, #71):...
r1168 def test_destroy_issues_with_time_entries
@request.session[:user_id] = 2
post :destroy, :ids => [1, 3]
assert_response :success
assert_template 'destroy'
assert_not_nil assigns(:hours)
assert Issue.find_by_id(1) && Issue.find_by_id(3)
end
def test_destroy_issues_and_destroy_time_entries
@request.session[:user_id] = 2
post :destroy, :ids => [1, 3], :todo => 'destroy'
assert_redirected_to 'projects/ecookbook/issues'
assert !(Issue.find_by_id(1) || Issue.find_by_id(3))
assert_nil TimeEntry.find_by_id([1, 2])
end
def test_destroy_issues_and_assign_time_entries_to_project
@request.session[:user_id] = 2
post :destroy, :ids => [1, 3], :todo => 'nullify'
assert_redirected_to 'projects/ecookbook/issues'
assert !(Issue.find_by_id(1) || Issue.find_by_id(3))
assert_nil TimeEntry.find(1).issue_id
assert_nil TimeEntry.find(2).issue_id
end
def test_destroy_issues_and_reassign_time_entries_to_another_issue
@request.session[:user_id] = 2
post :destroy, :ids => [1, 3], :todo => 'reassign', :reassign_to_id => 2
assert_redirected_to 'projects/ecookbook/issues'
assert !(Issue.find_by_id(1) || Issue.find_by_id(3))
assert_equal 2, TimeEntry.find(1).issue_id
assert_equal 2, TimeEntry.find(2).issue_id
end
Jean-Philippe Lang
Added some functional tests (issues)....
r971 def test_destroy_attachment
issue = Issue.find(3)
a = issue.attachments.size
@request.session[:user_id] = 2
post :destroy_attachment, :id => 3, :attachment_id => 1
assert_redirected_to 'issues/show/3'
assert_nil Attachment.find_by_id(1)
issue.reload
assert_equal((a-1), issue.attachments.size)
j = issue.journals.find(:first, :order => 'created_on DESC')
assert_equal 'attachment', j.details.first.property
end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 end