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;
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);
......
......@@ -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;
......@@ -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.
......
......@@ -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 };
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 {
......
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