@@ -136,26 +136,19 class IssuesController < ApplicationController | |||
|
136 | 136 | render_error l(:error_no_tracker_in_project) |
|
137 | 137 | return |
|
138 | 138 | end |
|
139 | if @issue.status.nil? | |
|
140 | render_error l(:error_no_default_issue_status) | |
|
141 | return | |
|
142 | end | |
|
139 | 143 | if params[:issue].is_a?(Hash) |
|
140 | 144 | @issue.safe_attributes = params[:issue] |
|
141 | 145 | @issue.watcher_user_ids = params[:issue]['watcher_user_ids'] if User.current.allowed_to?(:add_issue_watchers, @project) |
|
142 | 146 | end |
|
143 | 147 | @issue.author = User.current |
|
144 | 148 | |
|
145 | default_status = IssueStatus.default | |
|
146 | unless default_status | |
|
147 | render_error l(:error_no_default_issue_status) | |
|
148 | return | |
|
149 | end | |
|
150 | @issue.status = default_status | |
|
151 | @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true) | |
|
152 | ||
|
153 | 149 | if request.get? || request.xhr? |
|
154 | 150 | @issue.start_date ||= Date.today |
|
155 | 151 | else |
|
156 | requested_status = IssueStatus.find_by_id(params[:issue][:status_id]) | |
|
157 | # Check that the user is allowed to apply the requested status | |
|
158 | @issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status | |
|
159 | 152 | call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue }) |
|
160 | 153 | if @issue.save |
|
161 | 154 | attachments = Attachment.attach_files(@issue, params[:attachments]) |
@@ -179,6 +172,7 class IssuesController < ApplicationController | |||
|
179 | 172 | end |
|
180 | 173 | end |
|
181 | 174 | @priorities = IssuePriority.all |
|
175 | @allowed_statuses = @issue.new_statuses_allowed_to(User.current, true) | |
|
182 | 176 | render :layout => !request.xhr? |
|
183 | 177 | end |
|
184 | 178 |
@@ -163,6 +163,11 class Issue < ActiveRecord::Base | |||
|
163 | 163 | end |
|
164 | 164 | issue |
|
165 | 165 | end |
|
166 | ||
|
167 | def status_id=(sid) | |
|
168 | self.status = nil | |
|
169 | write_attribute(:status_id, sid) | |
|
170 | end | |
|
166 | 171 | |
|
167 | 172 | def priority_id=(pid) |
|
168 | 173 | self.priority = nil |
@@ -451,6 +451,7 class IssuesControllerTest < ActionController::TestCase | |||
|
451 | 451 | assert_difference 'Issue.count' do |
|
452 | 452 | post :new, :project_id => 1, |
|
453 | 453 | :issue => {:tracker_id => 3, |
|
454 | :status_id => 2, | |
|
454 | 455 | :subject => 'This is the test_new issue', |
|
455 | 456 | :description => 'This is the description', |
|
456 | 457 | :priority_id => 5, |
@@ -463,6 +464,7 class IssuesControllerTest < ActionController::TestCase | |||
|
463 | 464 | assert_not_nil issue |
|
464 | 465 | assert_equal 2, issue.author_id |
|
465 | 466 | assert_equal 3, issue.tracker_id |
|
467 | assert_equal 2, issue.status_id | |
|
466 | 468 | assert_nil issue.estimated_hours |
|
467 | 469 | v = issue.custom_values.find(:first, :conditions => {:custom_field_id => 2}) |
|
468 | 470 | assert_not_nil v |
@@ -598,6 +600,47 class IssuesControllerTest < ActionController::TestCase | |||
|
598 | 600 | end |
|
599 | 601 | end |
|
600 | 602 | |
|
603 | context "without workflow privilege" do | |
|
604 | setup do | |
|
605 | Workflow.delete_all(["role_id = ?", Role.anonymous.id]) | |
|
606 | Role.anonymous.add_permission! :add_issues | |
|
607 | end | |
|
608 | ||
|
609 | context "#new" do | |
|
610 | should "propose default status only" do | |
|
611 | get :new, :project_id => 1 | |
|
612 | assert_response :success | |
|
613 | assert_template 'new' | |
|
614 | assert_tag :tag => 'select', | |
|
615 | :attributes => {:name => 'issue[status_id]'}, | |
|
616 | :children => {:count => 1}, | |
|
617 | :child => {:tag => 'option', :attributes => {:value => IssueStatus.default.id.to_s}} | |
|
618 | end | |
|
619 | ||
|
620 | should "accept default status" do | |
|
621 | assert_difference 'Issue.count' do | |
|
622 | post :new, :project_id => 1, | |
|
623 | :issue => {:tracker_id => 1, | |
|
624 | :subject => 'This is an issue', | |
|
625 | :status_id => 1} | |
|
626 | end | |
|
627 | issue = Issue.last(:order => 'id') | |
|
628 | assert_equal IssueStatus.default, issue.status | |
|
629 | end | |
|
630 | ||
|
631 | should "ignore unauthorized status" do | |
|
632 | assert_difference 'Issue.count' do | |
|
633 | post :new, :project_id => 1, | |
|
634 | :issue => {:tracker_id => 1, | |
|
635 | :subject => 'This is an issue', | |
|
636 | :status_id => 3} | |
|
637 | end | |
|
638 | issue = Issue.last(:order => 'id') | |
|
639 | assert_equal IssueStatus.default, issue.status | |
|
640 | end | |
|
641 | end | |
|
642 | end | |
|
643 | ||
|
601 | 644 | def test_copy_issue |
|
602 | 645 | @request.session[:user_id] = 2 |
|
603 | 646 | get :new, :project_id => 1, :copy_from => 1 |
General Comments 0
You need to be logged in to leave comments.
Login now