Defect #5385 » 5385_restrict_issues_statuses_in_query.patch
| app/models/issue_query.rb | ||
|---|---|---|
| 82 | 82 | |
| 83 | 83 |
def initialize_available_filters |
| 84 | 84 |
add_available_filter "status_id", |
| 85 |
:type => :list_status, :values => lambda { IssueStatus.sorted.collect{|s| [s.name, s.id.to_s] } }
|
|
| 85 |
:type => :list_status, :values => lambda { issue_statuses }
|
|
| 86 | 86 | |
| 87 | 87 |
add_available_filter("project_id",
|
| 88 | 88 |
:type => :list, :values => lambda { project_values }
|
| app/models/project.rb | ||
|---|---|---|
| 324 | 324 |
@shared_versions = nil |
| 325 | 325 |
@rolled_up_versions = nil |
| 326 | 326 |
@rolled_up_trackers = nil |
| 327 |
@rolled_up_statuses = nil |
|
| 327 | 328 |
@rolled_up_custom_fields = nil |
| 328 | 329 |
@all_issue_custom_fields = nil |
| 329 | 330 |
@all_time_entry_custom_fields = nil |
| ... | ... | |
| 452 | 453 |
sorted |
| 453 | 454 |
end |
| 454 | 455 | |
| 456 |
def rolled_up_statuses |
|
| 457 |
issue_status_ids = WorkflowTransition. |
|
| 458 |
where(:tracker_id => trackers). |
|
| 459 |
distinct. |
|
| 460 |
pluck(:old_status_id, :new_status_id). |
|
| 461 |
flatten. |
|
| 462 |
uniq |
|
| 463 | ||
| 464 |
IssueStatus.where(:id => issue_status_ids).sorted |
|
| 465 |
end |
|
| 466 | ||
| 455 | 467 |
# Closes open and locked project versions that are completed |
| 456 | 468 |
def close_completed_versions |
| 457 | 469 |
Version.transaction do |
| app/models/query.rb | ||
|---|---|---|
| 551 | 551 |
Version.sort_by_status(versions).collect{|s| ["#{s.project.name} - #{s.name}", s.id.to_s, l("version_status_#{s.status}")] }
|
| 552 | 552 |
end |
| 553 | 553 | |
| 554 |
# Returns a scope of issue statuses that are available as columns for filters |
|
| 555 |
def issue_statuses |
|
| 556 |
if project |
|
| 557 |
statuses = project.rolled_up_statuses |
|
| 558 |
else |
|
| 559 |
statuses = IssueStatus.all.sorted |
|
| 560 |
end |
|
| 561 |
statuses.collect{|s| [s.name, s.id.to_s]}
|
|
| 562 |
end |
|
| 563 | ||
| 554 | 564 |
# Returns a scope of issue custom fields that are available as columns or filters |
| 555 | 565 |
def issue_custom_fields |
| 556 | 566 |
if project |
| test/unit/project_test.rb | ||
|---|---|---|
| 483 | 483 |
assert_equal [1,2], parent.rolled_up_trackers.collect(&:id) |
| 484 | 484 |
end |
| 485 | 485 | |
| 486 |
def test_rolled_up_statuses |
|
| 487 |
project = Project.find(1) |
|
| 488 | ||
| 489 |
WorkflowTransition.delete_all |
|
| 490 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3) |
|
| 491 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4) |
|
| 492 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3) |
|
| 493 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 2, :old_status_id => 1, :new_status_id => 3) |
|
| 494 | ||
| 495 |
assert_kind_of IssueStatus, project.rolled_up_statuses.first |
|
| 496 |
assert_equal IssueStatus.find(1), project.rolled_up_statuses.first |
|
| 497 | ||
| 498 |
assert_equal [1, 2, 3, 4], project.rolled_up_statuses.collect(&:id) |
|
| 499 |
end |
|
| 500 | ||
| 486 | 501 |
test "#rolled_up_trackers should ignore projects with issue_tracking module disabled" do |
| 487 | 502 |
parent = Project.generate! |
| 488 | 503 |
parent.trackers = Tracker.find([1, 2]) |
| test/unit/query_test.rb | ||
|---|---|---|
| 2093 | 2093 |
issues = find_issues_with_query(query) |
| 2094 | 2094 |
assert_equal [1, 2, 5, 11, 12, 13], issues.map(&:id).sort |
| 2095 | 2095 |
end |
| 2096 | ||
| 2097 |
def test_issue_statuses_should_return_only_statuses_used_by_that_project |
|
| 2098 |
query = IssueQuery.new(:name => '_', :project => Project.find(1)) |
|
| 2099 |
query.filters = {'status_id' => {:operator => '=', :values => []}}
|
|
| 2100 | ||
| 2101 |
WorkflowTransition.delete_all |
|
| 2102 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3) |
|
| 2103 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4) |
|
| 2104 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3) |
|
| 2105 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 2, :old_status_id => 1, :new_status_id => 3) |
|
| 2106 | ||
| 2107 |
assert_equal ['1','2','3','4'], query.available_filters['status_id'][:values].map(&:second) |
|
| 2108 |
end |
|
| 2109 | ||
| 2110 |
def test_issue_statuses_without_project_should_return_all_statuses |
|
| 2111 |
query = IssueQuery.new(:name => '_') |
|
| 2112 |
query.filters = {'status_id' => {:operator => '=', :values => []}}
|
|
| 2113 | ||
| 2114 |
WorkflowTransition.delete_all |
|
| 2115 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3) |
|
| 2116 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4) |
|
| 2117 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3) |
|
| 2118 |
WorkflowTransition.create(:role_id => 1, :tracker_id => 2, :old_status_id => 1, :new_status_id => 3) |
|
| 2119 | ||
| 2120 |
assert_equal ['1','2','3','4','5','6'], query.available_filters['status_id'][:values].map(&:second) |
|
| 2121 |
end |
|
| 2096 | 2122 |
end |
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »