source: trunk/t/33_search_advanced_search_utm.t @ 730

Last change on this file since 730 was 717, checked in by Earle Martin, 16 years ago

Sorry, I screwed up the last commit - tests pass now. This fixes bug #17.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.9 KB
Line 
1use strict;
2use CGI::Wiki::Setup::SQLite;
3use OpenGuides::Config;
4use OpenGuides::Search;
5use OpenGuides::Test;
6use Test::More;
7
8eval { require DBD::SQLite; };
9if ( $@ ) {
10    plan skip_all => "DBD::SQLite not installed";
11}
12
13eval { require Plucene; };
14if ( $@ ) {
15    plan skip_all => "Plucene not installed";
16}
17
18eval { require Geo::Coordinates::UTM; };
19if ( $@ ) {
20    plan skip_all => "Geo::Coordinates::UTM not installed";
21}
22
23plan tests => 4;
24
25# Clear out the database from any previous runs.
26unlink "t/node.db";
27unlink <t/indexes/*>;
28CGI::Wiki::Setup::SQLite::setup( { dbname => "t/node.db" } );
29
30my $config = OpenGuides::Config->new(
31       vars => {
32                 dbtype             => "sqlite",
33                 dbname             => "t/node.db",
34                 indexing_directory => "t/indexes",
35                 script_name        => "wiki.cgi",
36                 script_url         => "http://example.com/",
37                 site_name          => "Test Site",
38                 template_path      => "./templates",
39                 use_plucene        => 1,
40                 geo_handler        => 3,
41                 ellipsoid          => "Airy",
42           }
43);
44my $search = OpenGuides::Search->new( config => $config );
45my $guide = OpenGuides->new( config => $config );
46
47# Write some data.
48OpenGuides::Test->write_data(
49                              guide      => $guide,
50                              node       => "Crabtree Tavern",
51                              latitude   => 51.482385,
52                              longitude  => -0.221743,
53                              categories => "Pubs",
54                            );
55
56OpenGuides::Test->write_data(
57                              guide      => $guide,
58                              node       => "Blue Anchor",
59                              latitude   => 51.489176,
60                              longitude  => -0.229488,
61                              categories => "Pubs",
62                            );
63
64OpenGuides::Test->write_data(
65                              guide      => $guide,
66                              node       => "Star Tavern",
67                              latitude   => 51.498043,
68                              longitude  => -0.154247,
69                              categories => "Pubs",
70                            );
71
72OpenGuides::Test->write_data(
73                              guide      => $guide,
74                              node       => "Hammersmith Bridge",
75                              latitude   => 51.488135,
76                              longitude  => -0.228463,
77                            );
78
79# Sanity check.
80print "# Distances should be round about:\n";
81my $locator = $guide->locator;
82foreach my $node ( "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge"){
83    print "# $node: " . $locator->distance( from_x  => 692756,
84                                            from_y  => 5706917,
85                                            to_node => $node ) . "\n";
86}
87
88# Check that a lat/long distance search finds them.
89my %tt_vars = $search->run(
90                            return_tt_vars => 1,
91                            vars => {
92                                      latitude     => 51.484320,
93                                      longitude    => -0.223484,
94                                      latlong_dist => 1000,
95                                    },
96                          );
97my @ordered = map { $_->{name} } @{ $tt_vars{results} || [] };
98my @found = sort @ordered;
99is_deeply( \@found,
100           [ "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge" ],
101           "distance search finds the right things" );
102is_deeply( \@ordered,
103           [ "Crabtree Tavern", "Hammersmith Bridge", "Blue Anchor" ],
104           "...and returns them in the right order" );
105
106%tt_vars = $search->run(
107                         return_tt_vars => 1,
108                         vars => {
109                                   latitude     => 51.484320,
110                                   longitude    => -0.223484,
111                                   latlong_dist => 1000,
112                                   search       => " ",
113                                 },
114                       );
115@ordered = map { $_->{name} } @{ $tt_vars{results} || [] };
116@found = sort @ordered;
117is_deeply( \@found,
118           [ "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge" ],
119           "...still works if whitespace-only search text supplied" );
120
121%tt_vars = $search->run(
122                     return_tt_vars => 1,
123                     vars => {
124                               latitude     => 51.484320,
125                               longitude    => -0.223484,
126                               latlong_dist => 1000,
127                               search       => "pubs",
128                             },
129                   );
130@found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
131is_deeply( \@found, [ "Blue Anchor", "Crabtree Tavern", ],
132       "distance search in combination with text search works" );
Note: See TracBrowser for help on using the repository browser.