diff options
Diffstat (limited to 'rt/t/web/query_builder_queue_limits.t')
-rw-r--r-- | rt/t/web/query_builder_queue_limits.t | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/rt/t/web/query_builder_queue_limits.t b/rt/t/web/query_builder_queue_limits.t new file mode 100644 index 000000000..a3b976524 --- /dev/null +++ b/rt/t/web/query_builder_queue_limits.t @@ -0,0 +1,180 @@ +use strict; +use warnings; + +use RT::Test tests => 34; + +my $lifecycles = RT->Config->Get('Lifecycles'); +$lifecycles->{foo} = { + initial => ['initial'], + active => ['open'], + inactive => ['resolved'], + +}; + +RT::Lifecycle->FillCache(); + +my $general = RT::Test->load_or_create_queue( Name => 'General' ); +my $foo = RT::Test->load_or_create_queue( Name => 'foo', Lifecycle => 'foo' ); + +my $global_cf = RT::Test->load_or_create_custom_field( + Name => 'global_cf', + Queue => 0, + Type => 'FreeformSingle', +); + +my $general_cf = RT::Test->load_or_create_custom_field( + Name => 'general_cf', + Queue => 'General', + Type => 'FreeformSingle', +); + +my $foo_cf = RT::Test->load_or_create_custom_field( + Name => 'foo_cf', + Queue => 'foo', + Type => 'FreeformSingle' +); + +my $root = RT::Test->load_or_create_user( Name => 'root', ); +my $user_a = RT::Test->load_or_create_user( + Name => 'user_a', + Password => 'password', +); +my $user_b = RT::Test->load_or_create_user( + Name => 'user_b', + Password => 'password', +); + +ok( + RT::Test->set_rights( + { + Principal => $user_a, + Object => $general, + Right => ['OwnTicket'], + }, + { + Principal => $user_b, + Object => $foo, + Right => ['OwnTicket'], + }, + ), + 'granted OwnTicket right for user_a and user_b' +); + +my ( $url, $m ) = RT::Test->started_ok; +ok( $m->login, 'logged in' ); + +$m->get_ok( $url . '/Search/Build.html' ); + +diag "check default statuses, cf and owners"; +my $form = $m->form_name('BuildQuery'); +ok( $form, 'found BuildQuery form' ); +ok( $form->find_input("ValueOf'CF.{global_cf}'"), 'found global_cf by default' ); +ok( !$form->find_input("ValueOf'CF.{general_cf}'"), 'no general_cf by default' ); +ok( !$form->find_input("ValueOf'CF.{foo_cf}'"), 'no foo_cf by default' ); + +my $status_input = $form->find_input('ValueOfStatus'); +my @statuses = sort $status_input->possible_values; +is_deeply( + \@statuses, [ '', qw/initial new open rejected resolved stalled/], 'found all statuses' +); + +my $owner_input = $form->find_input('ValueOfActor'); +my @owners = sort $owner_input->possible_values; +is_deeply( + \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users' +); + +diag "limit queue to foo"; +$m->submit_form( + fields => { ValueOfQueue => 'foo' }, + button => 'AddClause', +); + +$form = $m->form_name('BuildQuery'); +ok( $form->find_input("ValueOf'CF.{foo_cf}'"), 'found foo_cf' ); +ok( $form->find_input("ValueOf'CF.{global_cf}'"), 'found global_cf' ); +ok( !$form->find_input("ValueOf'CF.{general_cf}'"), 'still no general_cf' ); +$status_input = $form->find_input('ValueOfStatus'); +@statuses = sort $status_input->possible_values; +is_deeply( + \@statuses, + [ '', qw/initial open resolved/ ], + 'found statuses from foo only' +); + +$owner_input = $form->find_input('ValueOfActor'); +@owners = sort $owner_input->possible_values; +is_deeply( + \@owners, [ '', qw/Nobody root user_b/], 'no user_a' +); + +diag "limit queue to general too"; + +$m->submit_form( + fields => { ValueOfQueue => 'General' }, + button => 'AddClause', +); + +$form = $m->form_name('BuildQuery'); +ok( $form->find_input("ValueOf'CF.{general_cf}'"), 'found general_cf' ); +ok( $form->find_input("ValueOf'CF.{foo_cf}'"), 'found foo_cf' ); +ok( $form->find_input("ValueOf'CF.{global_cf}'"), 'found global_cf' ); +$status_input = $form->find_input('ValueOfStatus'); +@statuses = sort $status_input->possible_values; +is_deeply( + \@statuses, + [ '', qw/initial new open rejected resolved stalled/ ], + 'found all statuses again' +); +$owner_input = $form->find_input('ValueOfActor'); +@owners = sort $owner_input->possible_values; +is_deeply( + \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users again' +); + +diag "limit queue to != foo"; +$m->get_ok( $url . '/Search/Build.html?NewQuery=1' ); +$m->submit_form( + form_name => 'BuildQuery', + fields => { ValueOfQueue => 'foo', QueueOp => '!=' }, + button => 'AddClause', +); + +$form = $m->form_name('BuildQuery'); +ok( $form->find_input("ValueOf'CF.{global_cf}'"), 'found global_cf' ); +ok( !$form->find_input("ValueOf'CF.{foo_cf}'"), 'no foo_cf' ); +ok( !$form->find_input("ValueOf'CF.{general_cf}'"), 'no general_cf' ); +$status_input = $form->find_input('ValueOfStatus'); +@statuses = sort $status_input->possible_values; +is_deeply( + \@statuses, [ '', qw/initial new open rejected resolved stalled/], + 'found all statuses' +); +$owner_input = $form->find_input('ValueOfActor'); +@owners = sort $owner_input->possible_values; +is_deeply( + \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users' +); + +diag "limit queue to General OR foo"; +$m->get_ok( $url . '/Search/Edit.html' ); +$m->submit_form( + form_name => 'BuildQueryAdvanced', + fields => { Query => q{Queue = 'General' OR Queue = 'foo'} }, +); +$form = $m->form_name('BuildQuery'); +ok( $form->find_input("ValueOf'CF.{general_cf}'"), 'found general_cf' ); +ok( $form->find_input("ValueOf'CF.{foo_cf}'"), 'found foo_cf' ); +ok( $form->find_input("ValueOf'CF.{global_cf}'"), 'found global_cf' ); +$status_input = $form->find_input('ValueOfStatus'); +@statuses = sort $status_input->possible_values; +is_deeply( + \@statuses, + [ '', qw/initial new open rejected resolved stalled/ ], + 'found all statuses' +); +$owner_input = $form->find_input('ValueOfActor'); +@owners = sort $owner_input->possible_values; +is_deeply( + \@owners, [ '', qw/Nobody root user_a user_b/], 'found all users' +); |