@@ -416,7 +416,9 class Issue < ActiveRecord::Base | |||
|
416 | 416 | end |
|
417 | 417 | |
|
418 | 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 | 422 | end |
|
421 | 423 | |
|
422 | 424 | if attrs['custom_field_values'].present? |
@@ -550,7 +552,9 class Issue < ActiveRecord::Base | |||
|
550 | 552 | end |
|
551 | 553 | |
|
552 | 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 | 558 | if !valid_parent_project?(@parent_issue) |
|
555 | 559 | errors.add :parent_issue_id, :invalid |
|
556 | 560 | elsif !new_record? |
@@ -947,17 +951,19 class Issue < ActiveRecord::Base | |||
|
947 | 951 | end |
|
948 | 952 | |
|
949 | 953 | def parent_issue_id=(arg) |
|
950 | parent_issue_id = arg.blank? ? nil : arg.to_i | |
|
951 | if parent_issue_id && @parent_issue = Issue.find_by_id(parent_issue_id) | |
|
954 | s = arg.to_s.strip.presence | |
|
955 | if s && (m = s.match(%r{\A#?(\d+)\z})) && (@parent_issue = Issue.find_by_id(m[1])) | |
|
952 | 956 | @parent_issue.id |
|
953 | 957 | else |
|
954 | 958 | @parent_issue = nil |
|
955 | nil | |
|
959 | @invalid_parent_issue_id = arg | |
|
956 | 960 | end |
|
957 | 961 | end |
|
958 | 962 | |
|
959 | 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 | 967 | @parent_issue.nil? ? nil : @parent_issue.id |
|
962 | 968 | else |
|
963 | 969 | parent_id |
@@ -1945,24 +1945,42 class IssuesControllerTest < ActionController::TestCase | |||
|
1945 | 1945 | :issue => {:tracker_id => 1, |
|
1946 | 1946 | :subject => 'This is a child issue', |
|
1947 | 1947 | :parent_issue_id => 2} |
|
1948 | ||
|
1949 | assert_response 302 | |
|
1948 | 1950 | end |
|
1949 | 1951 | issue = Issue.find_by_subject('This is a child issue') |
|
1950 | 1952 | assert_not_nil issue |
|
1951 | 1953 | assert_equal Issue.find(2), issue.parent |
|
1952 | 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 | 1957 | @request.session[:user_id] = 2 |
|
1956 | 1958 | |
|
1957 | assert_difference 'Issue.count' do | |
|
1959 | assert_no_difference 'Issue.count' do | |
|
1958 | 1960 | post :create, :project_id => 1, |
|
1959 | 1961 | :issue => {:tracker_id => 1, |
|
1960 | 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 | 1983 | end |
|
1963 | issue = Issue.find_by_subject('This is a child issue') | |
|
1964 | assert_not_nil issue | |
|
1965 | assert_nil issue.parent | |
|
1966 | 1984 | end |
|
1967 | 1985 | |
|
1968 | 1986 | def test_post_create_private |
@@ -92,6 +92,20 class IssueTest < ActiveSupport::TestCase | |||
|
92 | 92 | end |
|
93 | 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 | 109 | def assert_visibility_match(user, issues) |
|
96 | 110 | assert_equal issues.collect(&:id).sort, Issue.all.select {|issue| issue.visible?(user)}.collect(&:id).sort |
|
97 | 111 | end |
General Comments 0
You need to be logged in to leave comments.
Login now