@@ -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 |
|
|
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 |
|
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_ |
|
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 => ' |
|
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