Mercurial > hg > soundsoftware-site
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 |