##// END OF EJS Templates
Added a "Member of Role" to the issues filters. #5869...
Eric Davis -
r3964:41f8d043eb29
parent child
Show More
@@ -198,6 +198,9 class Query < ActiveRecord::Base
198
198
199 group_values = Group.all.collect {|g| [g.name, g.id] }
199 group_values = Group.all.collect {|g| [g.name, g.id] }
200 @available_filters["member_of_group"] = { :type => :list_optional, :order => 6, :values => group_values } unless group_values.empty?
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 if User.current.logged?
205 if User.current.logged?
203 @available_filters["watcher_id"] = { :type => :list, :order => 15, :values => [["<< #{l(:label_me)} >>", "me"]] }
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 sql << '(' + sql_for_field("assigned_to_id", operator, members_of_groups, Issue.table_name, "assigned_to_id", false) + ')'
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 else
477 else
455 # regular field
478 # regular field
456 db_table = Issue.table_name
479 db_table = Issue.table_name
@@ -294,6 +294,7 en:
294 field_sharing: Sharing
294 field_sharing: Sharing
295 field_parent_issue: Parent task
295 field_parent_issue: Parent task
296 field_member_of_group: Member of Group
296 field_member_of_group: Member of Group
297 field_assigned_to_role: Member of Role
297
298
298 setting_app_title: Application title
299 setting_app_title: Application title
299 setting_app_subtitle: Application subtitle
300 setting_app_subtitle: Application subtitle
@@ -13,6 +13,11 module ObjectDaddyHelpers
13 User.spawn(attributes)
13 User.spawn(attributes)
14 end
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 # Generate the default Query
21 # Generate the default Query
17 def Query.generate_default!(attributes={})
22 def Query.generate_default!(attributes={})
18 query = Query.spawn(attributes)
23 query = Query.spawn(attributes)
@@ -404,7 +404,29 class QueryTest < ActiveSupport::TestCase
404 end
404 end
405
405
406 end
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 end
430 end
409
431
410 context "#statement" do
432 context "#statement" do
@@ -453,6 +475,50 class QueryTest < ActiveSupport::TestCase
453
475
454 end
476 end
455 end
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 end
522 end
457
523
458 end
524 end
General Comments 0
You need to be logged in to leave comments. Login now