Commit 20409300 authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 601376: Test the __all__, __open__, and __closed__ arguments to

bug_status in xt/search.t r=mkanat, a=mkanat (module owner)
parent b96b7a4b
...@@ -58,6 +58,7 @@ use Bugzilla::FlagType; ...@@ -58,6 +58,7 @@ use Bugzilla::FlagType;
use Bugzilla::Group; use Bugzilla::Group;
use Bugzilla::Install (); use Bugzilla::Install ();
use Bugzilla::Test::Search::Constants; use Bugzilla::Test::Search::Constants;
use Bugzilla::Test::Search::FieldTestNormal;
use Bugzilla::Test::Search::OperatorTest; use Bugzilla::Test::Search::OperatorTest;
use Bugzilla::User (); use Bugzilla::User ();
use Bugzilla::Util qw(generate_random_password); use Bugzilla::Util qw(generate_random_password);
...@@ -108,7 +109,11 @@ sub num_tests { ...@@ -108,7 +109,11 @@ sub num_tests {
my $sql_injection_tests = scalar(@fields) * scalar(@top_operators) my $sql_injection_tests = scalar(@fields) * scalar(@top_operators)
* scalar(@injection_values) * NUM_SEARCH_TESTS; * 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 { sub _total_operator_tests {
...@@ -852,6 +857,14 @@ sub run { ...@@ -852,6 +857,14 @@ sub run {
# Even though _setup_bugs set us as an admin, we want to be sure at # 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. # this point that we have an admin with refreshed group memberships.
Bugzilla->set_user($self->admin); 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) { foreach my $operator ($self->top_level_operators) {
my $operator_test = my $operator_test =
new Bugzilla::Test::Search::OperatorTest($operator, $self); new Bugzilla::Test::Search::OperatorTest($operator, $self);
......
...@@ -48,6 +48,7 @@ our @EXPORT = qw( ...@@ -48,6 +48,7 @@ our @EXPORT = qw(
OR_SKIP OR_SKIP
PG_BROKEN PG_BROKEN
SKIP_FIELDS SKIP_FIELDS
SPECIAL_PARAM_TESTS
SUBSTR_NO_FIELD_ADD SUBSTR_NO_FIELD_ADD
SUBSTR_SIZE SUBSTR_SIZE
TESTS TESTS
...@@ -1248,4 +1249,17 @@ use constant OR_BROKEN => { ...@@ -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; 1;
...@@ -59,7 +59,7 @@ sub field_object { return $_[0]->{field_object} } ...@@ -59,7 +59,7 @@ sub field_object { return $_[0]->{field_object} }
# than we need the object. # than we need the object.
sub field { sub field {
my ($self) = @_; my ($self) = @_;
return $self->{field_name} ||= $self->field_object->name; $self->{field_name} ||= $self->field_object->name;
return $self->{field_name}; return $self->{field_name};
} }
# The Bugzilla::Test::Search object that this is a child of. # The Bugzilla::Test::Search object that this is a child of.
......
...@@ -26,12 +26,22 @@ use strict; ...@@ -26,12 +26,22 @@ use strict;
use warnings; use warnings;
use base qw(Bugzilla::Test::Search::FieldTest); use base qw(Bugzilla::Test::Search::FieldTest);
# We just clone a FieldTest because that's the best for performance, use Scalar::Util qw(blessed);
# overall--that way we don't have to translate the value again.
# 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 { sub new {
my ($class, $field_test) = @_; my $class = shift;
my $self = { %$field_test }; my ($first_arg) = @_;
return bless $self, $class; 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 { sub name {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment