Changeset 956 for trunk/t/31_search.t


Ignore:
Timestamp:
Mar 20, 2007, 4:47:05 PM (15 years ago)
Author:
Earle Martin
Message:

Complete transition to using skip_all (remove old SKIP blocks).
More verbose reporting for error "require"ing DBD::SQLite.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/t/31_search.t

    r785 r956  
    77eval { require DBD::SQLite; };
    88if ( $@ ) {
    9     plan skip_all => "DBD::SQLite not installed";
    10 } else {
    11     plan tests => 18;
     9    my ($error) = $@ =~ /^(.*?)\n/;
     10    plan skip_all => "DBD::SQLite could not be used - no database to test with. ($error)";
     11}
    1212
    13     # Clear out the database from any previous runs.
    14     unlink "t/node.db";
    15     unlink <t/indexes/*>;
     13plan tests => 18;
    1614
    17     Wiki::Toolkit::Setup::SQLite::setup( { dbname => "t/node.db" } );
    18     my $config = OpenGuides::Test->make_basic_config;
    19     $config->script_name( "wiki.cgi" );
    20     $config->script_url( "http://example.com/" );
     15# Clear out the database from any previous runs.
     16unlink "t/node.db";
     17unlink <t/indexes/*>;
    2118
    22     # Plucene is the recommended searcher now.
    23     eval { require Wiki::Toolkit::Search::Plucene; };
    24     if ( $@ ) { $config->use_plucene( 0 ) };
     19Wiki::Toolkit::Setup::SQLite::setup( { dbname => "t/node.db" } );
     20my $config = OpenGuides::Test->make_basic_config;
     21$config->script_name( "wiki.cgi" );
     22$config->script_url( "http://example.com/" );
    2523
    26     my $search = OpenGuides::Search->new( config => $config );
    27     isa_ok( $search, "OpenGuides::Search" );
     24# Plucene is the recommended searcher now.
     25eval { require Wiki::Toolkit::Search::Plucene; };
     26if ( $@ ) { $config->use_plucene( 0 ) };
    2827
    29     my $output = $search->run( return_output => 1 );
    30     unlike( $output, qr/no items matched/i,
    31             "doesn't output 'no items matched' if no terms supplied" );
    32     unlike( $output, qr/action=edit/,
    33             "doesn't offer edit link" );
     28my $search = OpenGuides::Search->new( config => $config );
     29isa_ok( $search, "OpenGuides::Search" );
    3430
    35     my %tt_vars = $search->run(
    36                                 return_tt_vars => 1,
    37                                 vars           => { search => "banana" },
    38                               );
    39     is( $tt_vars{first_num}, 0, "first_num set to 0 when no hits" );
    40     is( scalar @{ $tt_vars{results} }, 0, "...and results array empty" );
     31my $output = $search->run( return_output => 1 );
     32unlike( $output, qr/no items matched/i,
     33        "doesn't output 'no items matched' if no terms supplied" );
     34unlike( $output, qr/action=edit/,
     35        "doesn't offer edit link" );
    4136
    42     $output = $search->run(
    43                             return_output => 1,
    44                             vars          => { search => "banana" }
    45                            );
    46     like( $output, qr/no items matched/i,
    47           "outputs 'no items matched' if term not found" );
    48     unlike( $output, qr/matches found, showing/i,
    49             "doesn't output 'matches found, showing' if term not found" );
     37my %tt_vars = $search->run(
     38                            return_tt_vars => 1,
     39                            vars           => { search => "banana" },
     40                          );
     41is( $tt_vars{first_num}, 0, "first_num set to 0 when no hits" );
     42is( scalar @{ $tt_vars{results} }, 0, "...and results array empty" );
    5043
    51     # Pop some data in and search again.
    52     my $wiki = $search->{wiki}; # white boxiness
    53     $wiki->write_node( "Banana", "banana" );
    54     $wiki->write_node( "Monkey", "banana brains" );
    55     $wiki->write_node( "Monkey Brains", "BRANES" );
    56     $wiki->write_node( "Want Pie Now", "weebl" );
    57     $wiki->write_node( "Punctuation", "*" );
    58     $wiki->write_node( "Choice", "Eenie meenie minie mo");
     44$output = $search->run(
     45                        return_output => 1,
     46                        vars          => { search => "banana" }
     47                      );
     48like( $output, qr/no items matched/i,
     49      "outputs 'no items matched' if term not found" );
     50unlike( $output, qr/matches found, showing/i,
     51        "doesn't output 'matches found, showing' if term not found" );
    5952
    60     # Test with two hits first - simpler.
    61     %tt_vars = $search->run(
    62                              return_tt_vars => 1,
    63                              vars           => { search => "banana" },
    64                            );
    65     my @found = map { $_->{name} } @{ $tt_vars{results} || [] };
    66     is( scalar @found, 2, "search finds single word twice" );
    67     is_deeply( [ sort @found ], [ "Banana", "Monkey" ],
    68                "...in the right places" );
    69     print "# Found in $_\n" foreach @found;
     53# Pop some data in and search again.
     54my $wiki = $search->{wiki}; # white boxiness
     55$wiki->write_node( "Banana", "banana" );
     56$wiki->write_node( "Monkey", "banana brains" );
     57$wiki->write_node( "Monkey Brains", "BRANES" );
     58$wiki->write_node( "Want Pie Now", "weebl" );
     59$wiki->write_node( "Punctuation", "*" );
     60$wiki->write_node( "Choice", "Eenie meenie minie mo");
    7061
    71     # Make sure that $output matches too - we're testing the template here.
    72     $output =  $search->run(
    73                              return_output => 1,
    74                              vars           => { search => "banana" },
    75                            );
    76     like( $output, qr/<a href="http:\/\/example.com\/wiki.cgi\?Banana">/,
    77           "...and link is included in template output" );
     62# Test with two hits first - simpler.
     63%tt_vars = $search->run(
     64                         return_tt_vars => 1,
     65                         vars           => { search => "banana" },
     66                       );
     67my @found = map { $_->{name} } @{ $tt_vars{results} || [] };
     68is( scalar @found, 2, "search finds single word twice" );
     69is_deeply( [ sort @found ], [ "Banana", "Monkey" ],
     70           "...in the right places" );
     71print "# Found in $_\n" foreach @found;
    7872
    79     # One hit in body only should show result list.
    80     $output = $search->run(
    81                             return_output => 1,
    82                             vars          => { search => "weebl" },
    83                           );
    84     unlike( $output, qr/Status: 302/,
    85             "no redirect if match only in body");
     73# Make sure that $output matches too - we're testing the template here.
     74$output = $search->run(
     75                         return_output => 1,
     76                         vars           => { search => "banana" },
     77                       );
     78like( $output, qr/<a href="http:\/\/example.com\/wiki.cgi\?Banana">/,
     79      "...and link is included in template output" );
    8680
    87     # One hit in title should redirect to that page.
    88     $output = $search->run(
    89                             return_output => 1,
    90                             vars          => { search => "want pie now" },
    91                           );
    92     like( $output, qr/Status: 302/,
    93           "prints redirect on single hit and match in title" );
    94     # Old versions of CGI.pm mistakenly print location: instead of Location:
    95     like( $output,
    96           qr/[lL]ocation: http:\/\/example.com\/wiki.cgi\?Want_Pie_Now/,
    97           "...and node name munged correctly in URL" );
     81# One hit in body only should show result list.
     82$output = $search->run(
     83                        return_output => 1,
     84                        vars          => { search => "weebl" },
     85                      );
     86unlike( $output, qr/Status: 302/,
     87        "no redirect if match only in body");
    9888
    99     # Test the AND search
    100     %tt_vars = $search->run(
    101                             return_tt_vars => 1,
    102                             vars           => { search => "monkey banana" },
    103                            );
    104     @found = map { $_->{name} } @{ $tt_vars{results} || [] };
    105     is_deeply( \@found, [ "Monkey" ], "AND search returns right results" );
     89# One hit in title should redirect to that page.
     90$output = $search->run(
     91                        return_output => 1,
     92                        vars          => { search => "want pie now" },
     93                      );
     94like( $output, qr/Status: 302/,
     95      "prints redirect on single hit and match in title" );
     96# Old versions of CGI.pm mistakenly print location: instead of Location:
     97like( $output,
     98      qr/[lL]ocation: http:\/\/example.com\/wiki.cgi\?Want_Pie_Now/,
     99      "...and node name munged correctly in URL" );
    106100
    107     # Test the OR search
    108     %tt_vars = $search->run(
    109                              return_tt_vars => 1,
    110                              vars           => { search => "brains, pie" },
    111                            );
    112     @found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
    113     is_deeply( \@found, [ "Monkey", "Monkey Brains", "Want Pie Now" ],
    114                "OR search returns right results" );
    115     print "# Found in $_\n" foreach @found;
     101# Test the AND search
     102%tt_vars = $search->run(
     103                        return_tt_vars => 1,
     104                        vars           => { search => "monkey banana" },
     105                       );
     106@found = map { $_->{name} } @{ $tt_vars{results} || [] };
     107is_deeply( \@found, [ "Monkey" ], "AND search returns right results" );
    116108
    117     SKIP: {
    118         skip "NOT search not done yet", 1;
    119     # Test the NOT search
    120     %tt_vars = $search->run(
    121                              return_tt_vars => 1,
    122                              vars           => { search => "banana -monkey" },
    123                            );
    124     @found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
    125     is_deeply( \@found, [ "Banana" ], "NOT search returns right results" );
    126     } # end of SKIP
     109# Test the OR search
     110%tt_vars = $search->run(
     111                         return_tt_vars => 1,
     112                         vars           => { search => "brains, pie" },
     113                       );
     114@found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
     115is_deeply( \@found, [ "Monkey", "Monkey Brains", "Want Pie Now" ],
     116           "OR search returns right results" );
     117print "# Found in $_\n" foreach @found;
    127118
    128     # Test the phrase search
    129     $output = $search->run(
    130                             return_output => 1,
    131                             vars          => { search => '"monkey brains"' },
    132                            );
    133     like( $output,
    134           qr/[lL]ocation: http:\/\/example.com\/wiki.cgi\?Monkey_Brains/,   
    135           "phrase search returns right results and redirects to page"
    136         );
     119SKIP: {
     120    skip "NOT search not done yet", 1;
     121# Test the NOT search
     122%tt_vars = $search->run(
     123                         return_tt_vars => 1,
     124                         vars           => { search => "banana -monkey" },
     125                       );
     126@found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
     127is_deeply( \@found, [ "Banana" ], "NOT search returns right results" );
     128} # end of SKIP
    137129
    138     #####
    139     ##### Test numbering when we have more than a page of results.
    140     #####
     130# Test the phrase search
     131$output = $search->run(
     132                        return_output => 1,
     133                        vars          => { search => '"monkey brains"' },
     134                       );
     135like( $output,
     136      qr/[lL]ocation: http:\/\/example.com\/wiki.cgi\?Monkey_Brains/,   
     137      "phrase search returns right results and redirects to page"
     138    );
    141139
    142     foreach my $i ( 1 .. 30 ) {
    143         $wiki->write_node( "Node $i", "wombat" ) or die "Can't write Node $i";
    144     }
    145     $output = $search->run(
    146                             return_output => 1,
    147                             vars          => {
    148                                                search => "wombat",
    149                                                next   => 20,
    150                                              },
    151                           );
    152     like( $output, qr/ol start="21"/,
    153           "second page of results starts with right numbering" );
     140#####
     141##### Test numbering when we have more than a page of results.
     142#####
     143
     144foreach my $i ( 1 .. 30 ) {
     145    $wiki->write_node( "Node $i", "wombat" ) or die "Can't write Node $i";
    154146}
     147$output = $search->run(
     148                        return_output => 1,
     149                        vars          => {
     150                                           search => "wombat",
     151                                           next   => 20,
     152                                         },
     153                      );
     154like( $output, qr/ol start="21"/,
     155      "second page of results starts with right numbering" );
Note: See TracChangeset for help on using the changeset viewer.