comparison test/unit/query_test.rb @ 22:40f7cfd4df19

* Update to SVN trunk rev 4173
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Fri, 24 Sep 2010 14:06:04 +0100
parents 1d32c0a0efbf
children 94944d00e43c
comparison
equal deleted inserted replaced
14:1d32c0a0efbf 22:40f7cfd4df19
46 Issue.find :all, 46 Issue.find :all,
47 :include => [ :assigned_to, :status, :tracker, :project, :priority ], 47 :include => [ :assigned_to, :status, :tracker, :project, :priority ],
48 :conditions => query.statement 48 :conditions => query.statement
49 end 49 end
50 50
51 def assert_find_issues_with_query_is_successful(query)
52 assert_nothing_raised do
53 find_issues_with_query(query)
54 end
55 end
56
57 def assert_query_statement_includes(query, condition)
58 assert query.statement.include?(condition), "Query statement condition not found in: #{query.statement}"
59 end
60
51 def test_query_should_allow_shared_versions_for_a_project_query 61 def test_query_should_allow_shared_versions_for_a_project_query
52 subproject_version = Version.find(4) 62 subproject_version = Version.find(4)
53 query = Query.new(:project => Project.find(1), :name => '_') 63 query = Query.new(:project => Project.find(1), :name => '_')
54 query.add_filter('fixed_version_id', '=', [subproject_version.id.to_s]) 64 query.add_filter('fixed_version_id', '=', [subproject_version.id.to_s])
55 65
360 assert !q.editable_by?(manager) 370 assert !q.editable_by?(manager)
361 assert !q.editable_by?(developer) 371 assert !q.editable_by?(developer)
362 end 372 end
363 373
364 context "#available_filters" do 374 context "#available_filters" do
375 setup do
376 @query = Query.new(:name => "_")
377 end
378
365 should "include users of visible projects in cross-project view" do 379 should "include users of visible projects in cross-project view" do
366 query = Query.new(:name => "_") 380 users = @query.available_filters["assigned_to_id"]
367 users = query.available_filters["assigned_to_id"]
368 assert_not_nil users 381 assert_not_nil users
369 assert users[:values].map{|u|u[1]}.include?("3") 382 assert users[:values].map{|u|u[1]}.include?("3")
370 end 383 end
371 end 384
385 context "'member_of_group' filter" do
386 should "be present" do
387 assert @query.available_filters.keys.include?("member_of_group")
388 end
389
390 should "be an optional list" do
391 assert_equal :list_optional, @query.available_filters["member_of_group"][:type]
392 end
393
394 should "have a list of the groups as values" do
395 Group.destroy_all # No fixtures
396 group1 = Group.generate!.reload
397 group2 = Group.generate!.reload
398
399 expected_group_list = [
400 [group1.name, group1.id],
401 [group2.name, group2.id]
402 ]
403 assert_equal expected_group_list.sort, @query.available_filters["member_of_group"][:values].sort
404 end
405
406 end
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
430 end
431
432 context "#statement" do
433 context "with 'member_of_group' filter" do
434 setup do
435 Group.destroy_all # No fixtures
436 @user_in_group = User.generate!
437 @second_user_in_group = User.generate!
438 @user_in_group2 = User.generate!
439 @user_not_in_group = User.generate!
440
441 @group = Group.generate!.reload
442 @group.users << @user_in_group
443 @group.users << @second_user_in_group
444
445 @group2 = Group.generate!.reload
446 @group2.users << @user_in_group2
447
448 end
449
450 should "search assigned to for users in the group" do
451 @query = Query.new(:name => '_')
452 @query.add_filter('member_of_group', '=', [@group.id.to_s])
453
454 assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@user_in_group.id}','#{@second_user_in_group.id}')"
455 assert_find_issues_with_query_is_successful @query
456 end
457
458 should "search not assigned to any group member (none)" do
459 @query = Query.new(:name => '_')
460 @query.add_filter('member_of_group', '!*', [''])
461
462 # Users not in a group
463 assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IS NULL OR #{Issue.table_name}.assigned_to_id NOT IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}')"
464 assert_find_issues_with_query_is_successful @query
465
466 end
467
468 should "search assigned to any group member (all)" do
469 @query = Query.new(:name => '_')
470 @query.add_filter('member_of_group', '*', [''])
471
472 # Only users in a group
473 assert_query_statement_includes @query, "#{Issue.table_name}.assigned_to_id IN ('#{@user_in_group.id}','#{@second_user_in_group.id}','#{@user_in_group2.id}')"
474 assert_find_issues_with_query_is_successful @query
475
476 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
522 end
523
372 end 524 end