source: trunk/t/33_supersearch_advanced_search.t @ 562

Last change on this file since 562 was 562, checked in by kake, 17 years ago

Pull out common testing code into OpenGuides::Test

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.8 KB
Line 
1use strict;
2use CGI::Wiki::Plugin::Locator::Grid; # use directly to help debug
3use CGI::Wiki::Setup::SQLite;
4use Config::Tiny;
5use OpenGuides::SuperSearch;
6use OpenGuides::Test;
7use Test::More;
8
9eval { require DBD::SQLite; };
10if ( $@ ) {
11    plan skip_all => "DBD::SQLite not installed";
12}
13
14eval { require Plucene; };
15if ( $@ ) {
16    plan skip_all => "Plucene not installed";
17}
18
19eval { require Geography::NationalGrid::GB; };
20if ( $@ ) {
21    plan skip_all => "Geography::NationalGrid::GB not installed";
22}
23
24plan tests => 8;
25
26# Clear out the database from any previous runs.
27unlink "t/node.db";
28unlink <t/indexes/*>;
29CGI::Wiki::Setup::SQLite::setup( { dbname => "t/node.db" } );
30
31my $config = Config::Tiny->new;
32$config->{_} = {
33                 dbtype             => "sqlite",
34                 dbname             => "t/node.db",
35                 indexing_directory => "t/indexes",
36                 script_name        => "wiki.cgi",
37                 script_url         => "http://example.com/",
38                 site_name          => "Test Site",
39                 template_path      => "./templates",
40                 use_plucene        => 1,
41                 geo_handler        => 1,
42           };
43my $search = OpenGuides::SuperSearch->new( config => $config );
44my $guide = OpenGuides->new( config => $config );
45
46# Write some data.
47OpenGuides::Test->write_data(
48                              guide      => $guide,
49                              node       => "Crabtree Tavern",
50                              os_x       => 523465,
51                              os_y       => 177490,
52                              categories => "Pubs",
53                            );
54
55OpenGuides::Test->write_data(
56                              guide      => $guide,
57                              node       => "Blue Anchor",
58                              os_x       => 522909,
59                              os_y       => 178232,
60                              categories => "Pubs",
61                            );
62
63OpenGuides::Test->write_data(
64                              guide      => $guide,
65                              node       => "Star Tavern",
66                              os_x       => 528107,
67                              os_y       => 179347,
68                              categories => "Pubs",
69                            );
70
71OpenGuides::Test->write_data(
72                              guide      => $guide,
73                              node       => "Hammersmith Bridge",
74                              os_x       => 522983,
75                              os_y       => 178118,
76                            );
77
78# Sanity check.
79print "# Distances should be:\n";
80my $locator = CGI::Wiki::Plugin::Locator::Grid->new(x => "os_x", y => "os_y");
81my $wiki = $guide->wiki;
82$wiki->register_plugin( plugin => $locator );
83foreach my $node ( "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge"){
84    print "# $node: " . $locator->distance( from_x  => 523450,
85                                            from_y  => 177650,
86                                            to_node => $node ) . "\n";
87}
88
89# Check that a lat/long distance search finds them.
90my %tt_vars = $search->run(
91                            return_tt_vars => 1,
92                            vars => {
93                                      latitude     => 51.484320,
94                                      longitude    => -0.223484,
95                                      latlong_dist => 1000,
96                                    },
97                          );
98my @ordered = map { $_->{name} } @{ $tt_vars{results} || [] };
99my @found = sort @ordered;
100is_deeply( \@found,
101           [ "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge" ],
102           "distance search finds the right things" );
103is_deeply( \@ordered,
104           [ "Crabtree Tavern", "Hammersmith Bridge", "Blue Anchor" ],
105           "...and returns them in the right order" );
106
107%tt_vars = $search->run(
108                         return_tt_vars => 1,
109                         vars => {
110                                   latitude     => 51.484320,
111                                   longitude    => -0.223484,
112                                   latlong_dist => 1000,
113                                   search       => " ",
114                                 },
115                       );
116@ordered = map { $_->{name} } @{ $tt_vars{results} || [] };
117@found = sort @ordered;
118is_deeply( \@found,
119           [ "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge" ],
120           "...still works if whitespace-only search text supplied" );
121
122%tt_vars = $search->run(
123                         return_tt_vars => 1,
124                         vars => {
125                                   os_x    => 523450,
126                                   os_y    => 177650,
127                                   os_dist => 1000,
128                                   search  => " ",
129                                 },
130                       );
131@ordered = map { $_->{name} } @{ $tt_vars{results} || [] };
132@found = sort @ordered;
133is_deeply( \@found,
134       [ "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge" ],
135       "...works with OS co-ords" );
136
137%tt_vars = eval {
138       $search->run(
139                     return_tt_vars => 1,
140                     vars => {
141                               os_x      => 523450,
142                               os_y      => 177650,
143                               os_dist   => 1000,
144                               search    => " ",
145                               latitude  => " ",
146                               longitude => " ",
147                             },
148                   );
149};
150is( $@, "", "...works with OS co-ords and whitespace-only lat/long" );
151@ordered = map { $_->{name} } @{ $tt_vars{results} || [] };
152@found = sort @ordered;
153is_deeply( \@found,
154       [ "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge" ],
155         "...returns the right stuff" );
156
157%tt_vars = $search->run(
158                     return_tt_vars => 1,
159                     vars => {
160                               latitude     => 51.484320,
161                               longitude    => -0.223484,
162                               latlong_dist => 1000,
163                               search       => "pubs",
164                             },
165                   );
166@found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
167is_deeply( \@found, [ "Blue Anchor", "Crabtree Tavern", ],
168       "distance search in combination with text search works" );
169
170%tt_vars = $search->run(
171                     return_tt_vars => 1,
172                     vars => {
173                               os_x    => 523450,
174                               os_y    => 177650,
175                               os_dist => 1000,
176                               search  => "pubs",
177                             },
178                   );
179@found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
180is_deeply( \@found, [ "Blue Anchor", "Crabtree Tavern", ],
181       "...works with OS co-ords too" );
Note: See TracBrowser for help on using the repository browser.