From 61ae8e8bdab6c60b7824d46615a37aa359a79e1a Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Fri, 13 May 2011 13:01:42 -0700 Subject: Bug 656994: Test custom search more thoroughly in xt/search.t. r=mkanat, a=mkanat (module owner) --- xt/lib/Bugzilla/Test/Search/Constants.pm | 135 +++++++++++++++++++++++++++++- xt/lib/Bugzilla/Test/Search/CustomTest.pm | 6 +- 2 files changed, 135 insertions(+), 6 deletions(-) (limited to 'xt') diff --git a/xt/lib/Bugzilla/Test/Search/Constants.pm b/xt/lib/Bugzilla/Test/Search/Constants.pm index 5558238df..a06ceecc7 100644 --- a/xt/lib/Bugzilla/Test/Search/Constants.pm +++ b/xt/lib/Bugzilla/Test/Search/Constants.pm @@ -1023,13 +1023,142 @@ use constant SPECIAL_PARAM_TESTS => ( ); use constant CUSTOM_SEARCH_TESTS => ( - { name => 'bug_id AND assigned_to', contains => [1], + { name => 'OP without CP', contains => [1], + params => [ + { f => 'OP' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + ] + }, + + { name => 'Empty OP/CP pair before criteria', contains => [1], + params => [ + { f => 'OP' }, { f => 'CP' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + ] + }, + + { name => 'Empty OP/CP pair after criteria', contains => [1], + params => [ + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'OP' }, { f => 'CP' }, + ] + }, + + { name => 'empty OP/CP mid criteria', contains => [1], columns => ['assigned_to'], params => [ - { f => 'bug_id', o => 'equals', v => '<1>' }, - { f => 'assigned_to', o => 'equals', v => '<1>' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'OP' }, { f => 'CP' }, + { f => 'assigned_to', o => 'substr', v => '@' }, ] }, + + { name => 'bug_id = 1 AND assigned_to contains @', contains => [1], + columns => ['assigned_to'], + params => [ + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'substr', v => '@' }, + ] + }, + + { name => 'NOT(bug_id = 1) AND NOT(assigned_to = 2)', + contains => [3,4,5], + columns => ['assigned_to'], + params => [ + { n => 1, f => 'bug_id', o => 'equals', v => '<1>' }, + { n => 1, f => 'assigned_to', o => 'equals', v => '<2>' }, + ] + }, + + { name => 'bug_id = 1 OR assigned_to = 2', contains => [1,2], + columns => ['assigned_to'], top_params => { j_top => 'OR' }, + params => [ + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'equals', v => '<2>' }, + ] + }, + + { name => 'NOT(bug_id = 1 AND assigned_to = 1)', contains => [2,3,4,5], + columns => ['assigned_to'], + params => [ + { f => 'OP', n => 1 }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'equals', v => '<1>' }, + { f => 'CP' }, + ] + }, + + + { name => '(bug_id = 1 AND assigned_to contains @) ' + . ' OR (bug_id = 2 AND assigned_to contains @)', + contains => [1,2], columns => ['assigned_to'], + top_params => { j_top => 'OR' }, + params => [ + { f => 'OP' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'substr', v => '@' }, + { f => 'CP' }, + { f => 'OP' }, + { f => 'bug_id', o => 'equals', v => '<2>' }, + { f => 'assigned_to', o => 'substr', v => '@' }, + { f => 'CP' }, + ] + }, + + { name => '(bug_id = 1 OR assigned_to = 2) ' + . ' AND (bug_id = 2 OR assigned_to = 1)', + contains => [1,2], columns => ['assigned_to'], + params => [ + { f => 'OP', j => 'OR' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'equals', v => '<2>' }, + { f => 'CP' }, + { f => 'OP', j => 'OR' }, + { f => 'bug_id', o => 'equals', v => '<2>' }, + { f => 'assigned_to', o => 'equals', v => '<1>' }, + { f => 'CP' }, + ] + }, + + { name => 'bug_id = 3 OR ( (bug_id = 1 OR assigned_to = 2) ' + . ' AND (bug_id = 2 OR assigned_to = 1) )', + contains => [1,2,3], columns => ['assigned_to'], + top_params => { j_top => 'OR' }, + params => [ + { f => 'bug_id', o => 'equals', v => '<3>' }, + { f => 'OP' }, + { f => 'OP', j => 'OR' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'equals', v => '<2>' }, + { f => 'CP' }, + { f => 'OP', j => 'OR' }, + { f => 'bug_id', o => 'equals', v => '<2>' }, + { f => 'assigned_to', o => 'equals', v => '<1>' }, + { f => 'CP' }, + { f => 'CP' }, + ] + }, + + { name => 'bug_id = 3 OR ( (bug_id = 1 OR assigned_to = 2) ' + . ' AND (bug_id = 2 OR assigned_to = 1) ) OR bug_id = 4', + contains => [1,2,3,4], columns => ['assigned_to'], + top_params => { j_top => 'OR' }, + params => [ + { f => 'bug_id', o => 'equals', v => '<3>' }, + { f => 'OP' }, + { f => 'OP', j => 'OR' }, + { f => 'bug_id', o => 'equals', v => '<1>' }, + { f => 'assigned_to', o => 'equals', v => '<2>' }, + { f => 'CP' }, + { f => 'OP', j => 'OR' }, + { f => 'bug_id', o => 'equals', v => '<2>' }, + { f => 'assigned_to', o => 'equals', v => '<1>' }, + { f => 'CP' }, + { f => 'CP' }, + { f => 'bug_id', o => 'equals', v => '<4>' }, + ] + }, + ); 1; diff --git a/xt/lib/Bugzilla/Test/Search/CustomTest.pm b/xt/lib/Bugzilla/Test/Search/CustomTest.pm index dabf338b0..d19a9c350 100644 --- a/xt/lib/Bugzilla/Test/Search/CustomTest.pm +++ b/xt/lib/Bugzilla/Test/Search/CustomTest.pm @@ -80,10 +80,10 @@ sub invalid_field_operator_combination { return undef } sub search_params { my ($self) = @_; - my %params; + my %params = %{ $self->test->{top_params} || {} }; my $counter = 0; foreach my $row (@{ $self->test->{params} }) { - $row->{v} = $self->translate_value($row); + $row->{v} = $self->translate_value($row) if exists $row->{v}; foreach my $key (keys %$row) { $params{"${key}$counter"} = $row->{$key}; } @@ -107,7 +107,7 @@ sub translate_value { sub search_columns { my ($self) = @_; - return ['bug_id', @{ $self->test->{columns} }]; + return ['bug_id', @{ $self->test->{columns} || [] }]; } 1; -- cgit v1.2.3-24-g4f1b