summaryrefslogtreecommitdiffstats
path: root/xt/lib/Bugzilla/Test/Search/AndTest.pm
blob: d7b21af48388443b5145b9162b6d970511efd082 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2010 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
#   Max Kanat-Alexander <mkanat@bugzilla.org>

# This test combines two field/operator combinations using AND in
# a single boolean chart.
package Bugzilla::Test::Search::AndTest;
use base qw(Bugzilla::Test::Search::OrTest);

use Bugzilla::Test::Search::Constants;
use Bugzilla::Test::Search::FakeCGI;
use List::MoreUtils qw(all);

use constant type => 'AND';

#############
# Accessors #
#############

# In an AND test, bugs ARE supposed to be contained only if they are contained
# by ALL tests.
sub bug_is_contained {
    my ($self, $number) = @_;
    return all { $_->bug_is_contained($number) } $self->field_tests;
}

########################
# SKIP & TODO Messages #
########################

sub _join_skip { () }
sub _join_broken_constant { {} }

##############################
# Bugzilla::Search arguments #
##############################

sub search_params {
    my ($self) = @_;
    my @all_params = map { $_->search_params } $self->field_tests;
    my $params = new Bugzilla::Test::Search::FakeCGI;
    my $chart = 0;
    foreach my $item (@all_params) {
        $params->param("field0-$chart-0", $item->param('field0-0-0'));
        $params->param("type0-$chart-0", $item->param('type0-0-0'));
        $params->param("value0-$chart-0", $item->param('value0-0-0'));
        $chart++;
    }
    return $params;
}

1;