##// END OF EJS Templates
Fixed: No validation errors when entering an invalid "Parent task" (#11979)....
Jean-Philippe Lang -
r10404:2b797fa82fdd
parent child
Show More
@@ -416,7 +416,9 class Issue < ActiveRecord::Base
416 end
416 end
417
417
418 if attrs['parent_issue_id'].present?
418 if attrs['parent_issue_id'].present?
419 attrs.delete('parent_issue_id') unless Issue.visible(user).exists?(attrs['parent_issue_id'].to_i)
419 unless Issue.visible(user).exists?(attrs['parent_issue_id'].to_i)
420 @invalid_parent_issue_id = attrs.delete('parent_issue_id')
421 end
420 end
422 end
421
423
422 if attrs['custom_field_values'].present?
424 if attrs['custom_field_values'].present?
@@ -550,7 +552,9 class Issue < ActiveRecord::Base
550 end
552 end
551
553
552 # Checks parent issue assignment
554 # Checks parent issue assignment
553 if @parent_issue
555 if @invalid_parent_issue_id.present?
556 errors.add :parent_issue_id, :invalid
557 elsif @parent_issue
554 if !valid_parent_project?(@parent_issue)
558 if !valid_parent_project?(@parent_issue)
555 errors.add :parent_issue_id, :invalid
559 errors.add :parent_issue_id, :invalid
556 elsif !new_record?
560 elsif !new_record?
@@ -947,17 +951,19 class Issue < ActiveRecord::Base
947 end
951 end
948
952
949 def parent_issue_id=(arg)
953 def parent_issue_id=(arg)
950 parent_issue_id = arg.blank? ? nil : arg.to_i
954 s = arg.to_s.strip.presence
951 if parent_issue_id && @parent_issue = Issue.find_by_id(parent_issue_id)
955 if s && (m = s.match(%r{\A#?(\d+)\z})) && (@parent_issue = Issue.find_by_id(m[1]))
952 @parent_issue.id
956 @parent_issue.id
953 else
957 else
954 @parent_issue = nil
958 @parent_issue = nil
955 nil
959 @invalid_parent_issue_id = arg
956 end
960 end
957 end
961 end
958
962
959 def parent_issue_id
963 def parent_issue_id
960 if instance_variable_defined? :@parent_issue
964 if @invalid_parent_issue_id
965 @invalid_parent_issue_id
966 elsif instance_variable_defined? :@parent_issue
961 @parent_issue.nil? ? nil : @parent_issue.id
967 @parent_issue.nil? ? nil : @parent_issue.id
962 else
968 else
963 parent_id
969 parent_id
@@ -1945,24 +1945,42 class IssuesControllerTest < ActionController::TestCase
1945 :issue => {:tracker_id => 1,
1945 :issue => {:tracker_id => 1,
1946 :subject => 'This is a child issue',
1946 :subject => 'This is a child issue',
1947 :parent_issue_id => 2}
1947 :parent_issue_id => 2}
1948
1949 assert_response 302
1948 end
1950 end
1949 issue = Issue.find_by_subject('This is a child issue')
1951 issue = Issue.find_by_subject('This is a child issue')
1950 assert_not_nil issue
1952 assert_not_nil issue
1951 assert_equal Issue.find(2), issue.parent
1953 assert_equal Issue.find(2), issue.parent
1952 end
1954 end
1953
1955
1954 def test_post_create_subissue_with_non_numeric_parent_id
1956 def test_post_create_subissue_with_non_visible_parent_id_should_not_validate
1955 @request.session[:user_id] = 2
1957 @request.session[:user_id] = 2
1956
1958
1957 assert_difference 'Issue.count' do
1959 assert_no_difference 'Issue.count' do
1958 post :create, :project_id => 1,
1960 post :create, :project_id => 1,
1959 :issue => {:tracker_id => 1,
1961 :issue => {:tracker_id => 1,
1960 :subject => 'This is a child issue',
1962 :subject => 'This is a child issue',
1961 :parent_issue_id => 'ABC'}
1963 :parent_issue_id => '4'}
1964
1965 assert_response :success
1966 assert_select 'input[name=?][value=?]', 'issue[parent_issue_id]', '4'
1967 assert_error_tag :content => /Parent task is invalid/i
1968 end
1969 end
1970
1971 def test_post_create_subissue_with_non_numeric_parent_id_should_not_validate
1972 @request.session[:user_id] = 2
1973
1974 assert_no_difference 'Issue.count' do
1975 post :create, :project_id => 1,
1976 :issue => {:tracker_id => 1,
1977 :subject => 'This is a child issue',
1978 :parent_issue_id => '01ABC'}
1979
1980 assert_response :success
1981 assert_select 'input[name=?][value=?]', 'issue[parent_issue_id]', '01ABC'
1982 assert_error_tag :content => /Parent task is invalid/i
1962 end
1983 end
1963 issue = Issue.find_by_subject('This is a child issue')
1964 assert_not_nil issue
1965 assert_nil issue.parent
1966 end
1984 end
1967
1985
1968 def test_post_create_private
1986 def test_post_create_private
@@ -92,6 +92,20 class IssueTest < ActiveSupport::TestCase
92 end
92 end
93 end
93 end
94
94
95 def test_create_with_parent_issue_id
96 issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'Group assignment', :parent_issue_id => 1)
97 assert_save issue
98 assert_equal 1, issue.parent_issue_id
99 assert_equal Issue.find(1), issue.parent
100 end
101
102 def test_create_with_invalid_parent_issue_id
103 issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'Group assignment', :parent_issue_id => '01ABC')
104 assert !issue.save
105 assert_equal '01ABC', issue.parent_issue_id
106 assert_include 'Parent task is invalid', issue.errors.full_messages
107 end
108
95 def assert_visibility_match(user, issues)
109 def assert_visibility_match(user, issues)
96 assert_equal issues.collect(&:id).sort, Issue.all.select {|issue| issue.visible?(user)}.collect(&:id).sort
110 assert_equal issues.collect(&:id).sort, Issue.all.select {|issue| issue.visible?(user)}.collect(&:id).sort
97 end
111 end
General Comments 0
You need to be logged in to leave comments. Login now