]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 656994: Test custom search more thoroughly in xt/search.t.
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 13 May 2011 20:01:42 +0000 (13:01 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Fri, 13 May 2011 20:01:42 +0000 (13:01 -0700)
r=mkanat, a=mkanat (module owner)

xt/lib/Bugzilla/Test/Search/Constants.pm
xt/lib/Bugzilla/Test/Search/CustomTest.pm

index 5558238dfda92b4bd4b7715f85c2c89c1fc6da82..a06ceecc7ad87bacd304503882cb7ccc3b0fe76e 100644 (file)
@@ -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;
index dabf338b078ef483ce61f313a7a8cf6b5b234a2f..d19a9c35086087d072fea6397a7a76b90e693a88 100644 (file)
@@ -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;