Defect #26023 » 26023_tests_visibility_fix.patch
app/models/issue_category.rb | ||
---|---|---|
28 | 28 |
safe_attributes 'name', 'assigned_to_id' |
29 | 29 | |
30 | 30 |
scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)} |
31 |
scope :visible, lambda {|user = User.current| |
|
32 |
joins(:project). |
|
33 |
where(Project.allowed_to_condition(user, :view_issues)) |
|
34 |
} |
|
31 | 35 | |
32 | 36 |
alias :destroy_without_reassign :destroy |
33 | 37 |
app/models/issue_query.rb | ||
---|---|---|
124 | 124 | |
125 | 125 |
add_available_filter "category_id", |
126 | 126 |
:type => :list_optional, |
127 |
:values => lambda { project.issue_categories.collect{|s| [s.name, s.id.to_s] } } if project
|
|
127 |
:values => lambda { issue_category_values }
|
|
128 | 128 | |
129 | 129 |
add_available_filter "subject", :type => :text |
130 | 130 |
add_available_filter "description", :type => :text |
app/models/project.rb | ||
---|---|---|
330 | 330 |
@users = nil |
331 | 331 |
@shared_versions = nil |
332 | 332 |
@rolled_up_versions = nil |
333 |
@rolled_up_issue_categories = nil |
|
333 | 334 |
@rolled_up_trackers = nil |
334 | 335 |
@rolled_up_statuses = nil |
335 | 336 |
@rolled_up_custom_fields = nil |
... | ... | |
482 | 483 |
where("#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status <> ?", lft, rgt, STATUS_ARCHIVED) |
483 | 484 |
end |
484 | 485 | |
486 |
def rolled_up_issue_categories |
|
487 |
@rolled_up_issue_categories ||= |
|
488 |
IssueCategory. |
|
489 |
joins(:project). |
|
490 |
where("#{Project.table_name}.lft >= ? AND #{Project.table_name}.rgt <= ? AND #{Project.table_name}.status <> ?", lft, rgt, STATUS_ARCHIVED) |
|
491 |
end |
|
492 | ||
485 | 493 |
# Returns a scope of the Versions used by the project |
486 | 494 |
def shared_versions |
487 | 495 |
if new_record? |
app/models/query.rb | ||
---|---|---|
570 | 570 |
watcher_values |
571 | 571 |
end |
572 | 572 | |
573 |
def issue_category_values |
|
574 |
categories = |
|
575 |
if project |
|
576 |
project.rolled_up_issue_categories |
|
577 |
else |
|
578 |
IssueCategory |
|
579 |
end |
|
580 |
categories.visible.collect {|c| [c.name, c.id.to_s] } |
|
581 |
end |
|
582 | ||
573 | 583 |
# Returns a scope of issue custom fields that are available as columns or filters |
574 | 584 |
def issue_custom_fields |
575 | 585 |
if project |
test/fixtures/issue_categories.yml | ||
---|---|---|
19 | 19 |
project_id: 2 |
20 | 20 |
assigned_to_id: |
21 | 21 |
id: 4 |
22 |
issue_categories_005: |
|
23 |
name: Services |
|
24 |
project_id: 5 |
|
25 |
assigned_to_id: |
|
26 |
id: 5 |
test/functional/queries_controller_test.rb | ||
---|---|---|
605 | 605 |
assert_include ["eCookbook - 2.0", "3", "open"], json |
606 | 606 |
end |
607 | 607 | |
608 |
def test_issue_categories_filter_should_not_return_issue_categories_from_invisible_subprojects |
|
609 |
# Remove "jsmith" user from "Private child of eCookbook" project |
|
610 |
Project.find(5).memberships.find_by(:user_id => 2).destroy |
|
611 | ||
612 |
@request.session[:user_id] = 2 |
|
613 |
get :filter, :params => |
|
614 |
{ |
|
615 |
:project_id => 1, |
|
616 |
:name => 'category_id' |
|
617 |
} |
|
618 | ||
619 |
assert_response :success |
|
620 |
assert_equal 'application/json', response.content_type |
|
621 |
json = ActiveSupport::JSON.decode(response.body) |
|
622 | ||
623 |
assert_include ["Printing", "1"], json |
|
624 |
assert_include ["Recipes", "2"], json |
|
625 | ||
626 |
assert_not_include ["Services", "5"], json |
|
627 |
end |
|
628 | ||
608 | 629 |
def test_version_filter_without_project_id_should_return_all_visible_fixed_versions |
609 | 630 |
# Remove "jsmith" user from "Private child of eCookbook" project |
610 | 631 |
Project.find(5).memberships.find_by(:user_id => 2).destroy |
test/unit/project_test.rb | ||
---|---|---|
555 | 555 |
project.rolled_up_versions.sort |
556 | 556 |
end |
557 | 557 | |
558 |
test "#rolled_up_issue_categories should include the categories for the current project" do |
|
559 |
project = Project.generate! |
|
560 |
current_category_1 = IssueCategory.create!(:name => 'Current Category 1' ,:project => project) |
|
561 |
current_category_2 = IssueCategory.create!(:name => 'Current Category 2' ,:project => project) |
|
562 |
expected_categories = [current_category_1, current_category_2].sort |
|
563 | ||
564 |
assert_equal expected_categories, project.rolled_up_issue_categories.sort |
|
565 |
end |
|
566 | ||
567 |
test "#rolled_up_issue_categories should include categories for a subproject" do |
|
568 |
project = Project.generate! |
|
569 |
parent_category_1 = IssueCategory.create!(:name => 'Parent Category 1' ,:project => project) |
|
570 |
parent_category_2 = IssueCategory.create!(:name => 'Parent Category 2' ,:project => project) |
|
571 |
subproject = Project.generate_with_parent!(project) |
|
572 |
subproject_category = IssueCategory.create!(:name => 'Subproject Category' ,:project => subproject) |
|
573 |
expected_categories = [parent_category_1, parent_category_2, subproject_category].sort |
|
574 | ||
575 |
assert_equal expected_categories, project.rolled_up_issue_categories.sort |
|
576 |
end |
|
577 | ||
578 |
test "#rolled_up_issue_categories should include categories for a sub-subproject" do |
|
579 |
project = Project.generate! |
|
580 |
parent_category_1 = IssueCategory.create!(:name => 'Parent Category 1' ,:project => project) |
|
581 |
parent_category_2 = IssueCategory.create!(:name => 'Parent Category 2' ,:project => project) |
|
582 |
subproject = Project.generate_with_parent!(project) |
|
583 |
sub_subproject = Project.generate_with_parent!(subproject) |
|
584 |
sub_subproject_category = IssueCategory.create!(:name => 'Sub Subproject Category' ,:project => sub_subproject) |
|
585 |
project.reload |
|
586 |
expected_categories = [parent_category_1, parent_category_2, sub_subproject_category].sort |
|
587 | ||
588 |
assert_equal expected_categories, project.rolled_up_issue_categories.sort |
|
589 |
end |
|
590 | ||
591 |
test "#rolled_up_issue_categories should only check active projects" do |
|
592 |
project = Project.generate! |
|
593 |
parent_category_1 = IssueCategory.create!(:name => 'Parent Category 1' ,:project => project) |
|
594 |
parent_category_2 = IssueCategory.create!(:name => 'Parent Category 2' ,:project => project) |
|
595 |
subproject = Project.generate_with_parent!(project) |
|
596 |
IssueCategory.create!(:name => 'Subproject Category' ,:project => subproject) |
|
597 |
assert subproject.archive |
|
598 |
project.reload |
|
599 |
expected_categories = [parent_category_1, parent_category_2].sort |
|
600 | ||
601 |
assert !subproject.active? |
|
602 |
assert_equal expected_categories, project.rolled_up_issue_categories.sort |
|
603 |
end |
|
604 | ||
558 | 605 |
def test_shared_versions_none_sharing |
559 | 606 |
p = Project.find(5) |
560 | 607 |
v = Version.create!(:name => 'none_sharing', :project => p, :sharing => 'none') |