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

Last change on this file since 956 was 956, checked in by Earle Martin, 15 years ago

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

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 KB
Line 
1use strict;
2use Wiki::Toolkit::Setup::SQLite;
3use OpenGuides::Config;
4use OpenGuides::Search;
5use OpenGuides::Test;
6use Test::More;
7
8eval { require DBD::SQLite; };
9if ( $@ ) {
10    my ($error) = $@ =~ /^(.*?)\n/;
11    plan skip_all => "DBD::SQLite could not be used - no database to test with ($error)";
12}
13
14eval { require Plucene; };
15if ( $@ ) {
16    plan skip_all => "Plucene not installed";
17}
18
19eval { require Geo::Coordinates::UTM; };
20if ( $@ ) {
21    plan skip_all => "Geo::Coordinates::UTM not installed";
22}
23
24plan tests => 4;
25
26# Clear out the database from any previous runs.
27unlink "t/node.db";
28unlink <t/indexes/*>;
29Wiki::Toolkit::Setup::SQLite::setup( { dbname => "t/node.db" } );
30
31my $config = OpenGuides::Config->new(
32       vars => {
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        => 3,
42                 ellipsoid          => "Airy",
43           }
44);
45my $search = OpenGuides::Search->new( config => $config );
46my $guide = OpenGuides->new( config => $config );
47
48# Write some data.
49OpenGuides::Test->write_data(
50                              guide      => $guide,
51                              node       => "Crabtree Tavern",
52                              latitude   => 51.482385,
53                              longitude  => -0.221743,
54                              categories => "Pubs",
55                            );
56
57OpenGuides::Test->write_data(
58                              guide      => $guide,
59                              node       => "Blue Anchor",
60                              latitude   => 51.489176,
61                              longitude  => -0.229488,
62                              categories => "Pubs",
63                            );
64
65OpenGuides::Test->write_data(
66                              guide      => $guide,
67                              node       => "Star Tavern",
68                              latitude   => 51.498043,
69                              longitude  => -0.154247,
70                              categories => "Pubs",
71                            );
72
73OpenGuides::Test->write_data(
74                              guide      => $guide,
75                              node       => "Hammersmith Bridge",
76                              latitude   => 51.488135,
77                              longitude  => -0.228463,
78                            );
79
80# Sanity check.
81print "# Distances should be round about:\n";
82my $locator = $guide->locator;
83foreach my $node ( "Blue Anchor", "Crabtree Tavern", "Hammersmith Bridge"){
84    print "# $node: " . $locator->distance( from_x  => 692756,
85                                            from_y  => 5706917,
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                               latitude     => 51.484320,
126                               longitude    => -0.223484,
127                               latlong_dist => 1000,
128                               search       => "pubs",
129                             },
130                   );
131@found = sort map { $_->{name} } @{ $tt_vars{results} || [] };
132is_deeply( \@found, [ "Blue Anchor", "Crabtree Tavern", ],
133       "distance search in combination with text search works" );
Note: See TracBrowser for help on using the repository browser.