]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 601376: Test the __all__, __open__, and __closed__ arguments to
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 2 Oct 2010 17:03:12 +0000 (10:03 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Sat, 2 Oct 2010 17:03:12 +0000 (10:03 -0700)
bug_status in xt/search.t
r=mkanat, a=mkanat (module owner)

xt/lib/Bugzilla/Test/Search.pm
xt/lib/Bugzilla/Test/Search/Constants.pm
xt/lib/Bugzilla/Test/Search/FieldTest.pm
xt/lib/Bugzilla/Test/Search/FieldTestNormal.pm

index 467615ba0784ee946d130246fb7ad8ea08feb103..5137302b71c96424be04c81a8266c626d136c2f6 100644 (file)
@@ -58,6 +58,7 @@ use Bugzilla::FlagType;
 use Bugzilla::Group;
 use Bugzilla::Install ();
 use Bugzilla::Test::Search::Constants;
+use Bugzilla::Test::Search::FieldTestNormal;
 use Bugzilla::Test::Search::OperatorTest;
 use Bugzilla::User ();
 use Bugzilla::Util qw(generate_random_password);
@@ -108,7 +109,11 @@ sub num_tests {
     my $sql_injection_tests = scalar(@fields) * scalar(@top_operators)
                               * scalar(@injection_values) * NUM_SEARCH_TESTS;
 
-    return $operator_field_tests + $sql_injection_tests;
+    # This @{ [] } thing is the only reasonable way to get a count out of a
+    # constant array.
+    my $special_tests = scalar(@{ [SPECIAL_PARAM_TESTS] }) * TESTS_PER_RUN;
+    
+    return $operator_field_tests + $sql_injection_tests + $special_tests;
 }
 
 sub _total_operator_tests {
@@ -852,6 +857,14 @@ sub run {
     # Even though _setup_bugs set us as an admin, we want to be sure at
     # this point that we have an admin with refreshed group memberships.
     Bugzilla->set_user($self->admin);
+    foreach my $test (SPECIAL_PARAM_TESTS) {
+        my $operator_test =
+            new Bugzilla::Test::Search::OperatorTest($test->{operator}, $self);
+        my $field = Bugzilla::Field->check($test->{field});
+        my $special_test = new Bugzilla::Test::Search::FieldTestNormal(
+            $operator_test, $field, $test);
+        $special_test->run();
+    }
     foreach my $operator ($self->top_level_operators) {
         my $operator_test =
             new Bugzilla::Test::Search::OperatorTest($operator, $self);
index 3c68f69d2cee23d7ba3262d31b73ce563dedb830..abe01bbd1f13c8200a815946a95ba6b1bb075fee 100644 (file)
@@ -48,6 +48,7 @@ our @EXPORT = qw(
     OR_SKIP
     PG_BROKEN
     SKIP_FIELDS
+    SPECIAL_PARAM_TESTS
     SUBSTR_NO_FIELD_ADD
     SUBSTR_SIZE
     TESTS
@@ -1248,4 +1249,17 @@ use constant OR_BROKEN => {
     },
 };
 
+#################
+# Special Tests #
+#################
+
+use constant SPECIAL_PARAM_TESTS => (
+    { field => 'bug_status', operator => 'anyexact', value => '__open__',
+      contains => [5] },
+    { field => 'bug_status', operator => 'anyexact', value => '__closed__',
+      contains => [1,2,3,4] },
+    { field => 'bug_status', operator => 'anyexact', value => '__all__',
+      contains => [1,2,3,4,5] },
+);
+
 1;
index 98f6275fe534cb3e9e91babded8d3be27719c39d..f73facb19945b1bfa03f505825e5e8b752eeb406 100644 (file)
@@ -59,7 +59,7 @@ sub field_object { return $_[0]->{field_object} }
 # than we need the object.
 sub field {
     my ($self) = @_;
-    return $self->{field_name} ||= $self->field_object->name;
+    $self->{field_name} ||= $self->field_object->name;
     return $self->{field_name};
 }
 # The Bugzilla::Test::Search object that this is a child of.
index b42db08e2b51167a84df1fbc5430d6f747bb5821..a4b913caa088730fa1f0ff266457116c8ee27032 100644 (file)
@@ -26,12 +26,22 @@ use strict;
 use warnings;
 use base qw(Bugzilla::Test::Search::FieldTest);
 
-# We just clone a FieldTest because that's the best for performance,
-# overall--that way we don't have to translate the value again.
+use Scalar::Util qw(blessed);
+
+# Normally, we just clone a FieldTest because that's the best for performance,
+# overall--that way we don't have to translate the value again. However,
+# sometimes (like in Bugzilla::Test::Search's direct code) we just want
+# to create a FieldTestNormal.
 sub new {
-    my ($class, $field_test) = @_;
-    my $self = { %$field_test };
-    return bless $self, $class;
+    my $class = shift;
+    my ($first_arg) = @_;
+    if (blessed $first_arg
+        and $first_arg->isa('Bugzilla::Test::Search::FieldTest'))
+    {
+        my $self = { %$first_arg };
+        return bless $self, $class;
+    }
+    return $class->SUPER::new(@_);
 }
 
 sub name {