@@ -198,6 +198,9 class Query < ActiveRecord::Base | |||
|
198 | 198 | |
|
199 | 199 | group_values = Group.all.collect {|g| [g.name, g.id] } |
|
200 | 200 | @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty? |
|
201 | ||
|
202 | role_values = Role.givable.collect {|r| [r.name, r.id] } | |
|
203 | @available_filters["assigned_to_role"] = { :type => :list_optional, :order => 7, :values => role_values } unless role_values.empty? | |
|
201 | 204 | |
|
202 | 205 | if User.current.logged? |
|
203 | 206 | @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] } |
@@ -451,6 +454,26 class Query < ActiveRecord::Base | |||
|
451 | 454 | |
|
452 | 455 | sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')' |
|
453 | 456 | |
|
457 | elsif field == "assigned_to_role" # named field | |
|
458 | if operator == "*" # Any Role | |
|
459 | roles = Role.givable | |
|
460 | operator = '=' # Override the operator since we want to find by assigned_to | |
|
461 | elsif operator == "!*" # No role | |
|
462 | roles = Role.givable | |
|
463 | operator = '!' # Override the operator since we want to find by assigned_to | |
|
464 | else | |
|
465 | roles = Role.givable.find_all_by_id(v) | |
|
466 | end | |
|
467 | roles ||= [] | |
|
468 | ||
|
469 | members_of_roles = roles.inject([]) {|user_ids, role| | |
|
470 | if role && role.members | |
|
471 | user_ids << role.members.collect(&:user_id) | |
|
472 | end | |
|
473 | user_ids.flatten.uniq.compact | |
|
474 | }.sort.collect(&:to_s) | |
|
475 | ||
|
476 | sql << '(' + sql_for_field("assigned_to_id", operator, members_of_roles, Issue.table_name, "assigned_to_id", false) + ')' | |
|
454 | 477 | else |
|
455 | 478 | # regular field |
|
456 | 479 | db_table = Issue.table_name |
@@ -294,6 +294,7 en: | |||
|
294 | 294 | field_sharing: Sharing |
|
295 | 295 | field_parent_issue: Parent task |
|
296 | 296 | field_member_of_group: Member of Group |
|
297 | field_assigned_to_role: Member of Role | |
|
297 | 298 | |
|
298 | 299 | setting_app_title: Application title |
|
299 | 300 | setting_app_subtitle: Application subtitle |
@@ -13,6 +13,11 module ObjectDaddyHelpers | |||
|
13 | 13 | User.spawn(attributes) |
|
14 | 14 | end |
|
15 | 15 | |
|
16 | def User.add_to_project(user, project, roles) | |
|
17 | roles = [roles] unless roles.is_a?(Array) | |
|
18 | Member.generate!(:principal => user, :project => project, :roles => roles) | |
|
19 | end | |
|
20 | ||
|
16 | 21 | # Generate the default Query |
|
17 | 22 | def Query.generate_default!(attributes={}) |
|
18 | 23 | query = Query.spawn(attributes) |
@@ -404,7 +404,29 class QueryTest < ActiveSupport::TestCase | |||
|
404 | 404 | end |
|
405 | 405 | |
|
406 | 406 | end |
|
407 | ||
|
407 | ||
|
408 | context "'assigned_to_role' filter" do | |
|
409 | should "be present" do | |
|
410 | assert @query.available_filters.keys.include?("assigned_to_role") | |
|
411 | end | |
|
412 | ||
|
413 | should "be an optional list" do | |
|
414 | assert_equal :list_optional, @query.available_filters["assigned_to_role"][:type] | |
|
415 | end | |
|
416 | ||
|
417 | should "have a list of the Roles as values" do | |
|
418 | assert @query.available_filters["assigned_to_role"][:values].include?(['Manager',1]) | |
|
419 | assert @query.available_filters["assigned_to_role"][:values].include?(['Developer',2]) | |
|
420 | assert @query.available_filters["assigned_to_role"][:values].include?(['Reporter',3]) | |
|
421 | end | |
|
422 | ||
|
423 | should "not include the built in Roles as values" do | |
|
424 | assert ! @query.available_filters["assigned_to_role"][:values].include?(['Non member',4]) | |
|
425 | assert ! @query.available_filters["assigned_to_role"][:values].include?(['Anonymous',5]) | |
|
426 | end | |
|
427 | ||
|
428 | end | |
|
429 | ||
|
408 | 430 | end |
|
409 | 431 | |
|
410 | 432 | context "#statement" do |
@@ -453,6 +475,50 class QueryTest < ActiveSupport::TestCase | |||
|
453 | 475 | |
|
454 | 476 | end |
|
455 | 477 | end |
|
478 | ||
|
479 | context "with 'assigned_to_role' filter" do | |
|
480 | setup do | |
|
481 | # No fixtures | |
|
482 | MemberRole.delete_all | |
|
483 | Member.delete_all | |
|
484 | Role.delete_all | |
|
485 | ||
|
486 | @manager_role = Role.generate!(:name => 'Manager') | |
|
487 | @developer_role = Role.generate!(:name => 'Developer') | |
|
488 | ||
|
489 | @project = Project.generate! | |
|
490 | @manager = User.generate! | |
|
491 | @developer = User.generate! | |
|
492 | @boss = User.generate! | |
|
493 | User.add_to_project(@manager, @project, @manager_role) | |
|
494 | User.add_to_project(@developer, @project, @developer_role) | |
|
495 | User.add_to_project(@boss, @project, [@manager_role, @developer_role]) | |
|
496 | end | |
|
497 | ||
|
498 | should "search assigned to for users with the Role" do | |
|
499 | @query = Query.new(:name => '_') | |
|
500 | @query.add_filter('assigned_to_role', '=', [@manager_role.id.to_s]) | |
|
501 | ||
|
502 | assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@manager.id}','#{@boss.id}')" | |
|
503 | assert_find_issues_with_query_is_successful @query | |
|
504 | end | |
|
505 | ||
|
506 | should "search assigned to for users not assigned to any Role (none)" do | |
|
507 | @query = Query.new(:name => '_') | |
|
508 | @query.add_filter('assigned_to_role', '!*', ['']) | |
|
509 | ||
|
510 | assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IS NULL OR #{Issue.table_name}.assigned_to_id NOT IN ('#{@manager.id}','#{@developer.id}','#{@boss.id}')" | |
|
511 | assert_find_issues_with_query_is_successful @query | |
|
512 | end | |
|
513 | ||
|
514 | should "search assigned to for users assigned to any Role (all)" do | |
|
515 | @query = Query.new(:name => '_') | |
|
516 | @query.add_filter('assigned_to_role', '*', ['']) | |
|
517 | ||
|
518 | assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@manager.id}','#{@developer.id}','#{@boss.id}')" | |
|
519 | assert_find_issues_with_query_is_successful @query | |
|
520 | end | |
|
521 | end | |
|
456 | 522 | end |
|
457 | 523 | |
|
458 | 524 | end |
General Comments 0
You need to be logged in to leave comments.
Login now