File: 205_write_geo_data.t

package info (click to toggle)
openguides 0.84-1.2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,628 kB
  • sloc: perl: 4,812; sh: 56; javascript: 56; makefile: 19
file content (174 lines) | stat: -rw-r--r-- 7,775 bytes parent folder | download | duplicates (6)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
use strict;
use Wiki::Toolkit::Setup::SQLite;
use OpenGuides::Config;
use OpenGuides;
use OpenGuides::Test;
use Test::More;

eval { require DBD::SQLite; };
if ( $@ ) {
    my ($error) = $@ =~ /^(.*?)\n/;
    plan skip_all => "DBD::SQLite could not be used - no database to test with. ($error)";
}

eval { require Plucene; };
if ( $@ ) {
    plan skip_all => "Plucene not installed";
}

plan tests => 53;

# Clear out the database from any previous runs.
    OpenGuides::Test::refresh_db();

my $config = OpenGuides::Config->new(
       vars => {
                 dbtype             => "sqlite",
                 dbname             => "t/node.db",
                 indexing_directory => "t/indexes",
                 script_name        => "wiki.cgi",
                 script_url         => "http://example.com/",
                 site_name          => "Test Site",
                 template_path      => "./templates",
                 use_plucene        => 1,
                 geo_handler        => 1,
               }
);

# First check that British National Grid will accept both OS X/Y and lat/long,
# and will store both however the data was given to it.
my $guide = OpenGuides->new( config => $config );
is( $guide->locator->x_field, "os_x", "correct x field" );
is( $guide->locator->y_field, "os_y", "correct y field" );

OpenGuides::Test->write_data(
                              guide      => $guide,
                              node       => "Crabtree Tavern",
                              os_x       => 523465,
                              os_y       => 177490,
                              categories => "Pubs",
                            );
my %data = $guide->wiki->retrieve_node( "Crabtree Tavern" );
is( $data{metadata}{os_x}[0], 523465,      "os_x stored correctly" );
is( $data{metadata}{os_y}[0], 177490,      "os_y stored correctly" );
ok( defined $data{metadata}{latitude}[0],  "latitude stored" );
ok( defined $data{metadata}{longitude}[0], "longitude stored" );

OpenGuides::Test->write_data(
                              guide      => $guide,
                              node       => "El Sombrero",
                              latitude   => 51.368,
                              longitude  => -0.097,
                              categories => "Restaurants",
                            );
%data = $guide->wiki->retrieve_node( "El Sombrero" );
ok( defined $data{metadata}{os_x}[0],      "os_x stored" );
like( $data{metadata}{os_x}[0], qr/^\d+$/,  "...as integer" );
ok( defined $data{metadata}{os_y}[0],      "os_y stored" );
like( $data{metadata}{os_y}[0], qr/^\d+$/,  "...as integer" );
is( $data{metadata}{latitude}[0], 51.368,  "latitude stored correctly" );
is( $data{metadata}{longitude}[0], -0.097, "longitude stored correctly" );

eval {
    local $SIG{__WARN__} = sub { die $_[0]; };
    OpenGuides::Test->write_data(
                                  guide      => $guide,
                                  node       => "Locationless Page 1",
                                );
};
is( $@, "",
    "commit doesn't warn when using BNG and node has no location data" );
%data = $guide->wiki->retrieve_node( "Locationless Page 1" );
ok( !defined $data{metadata}{latitude}[0],  "...and latitude not stored" );
ok( !defined $data{metadata}{longitude}[0], "...nor longitude" );
ok( !defined $data{metadata}{os_x}[0],      "...nor os_x" );
ok( !defined $data{metadata}{os_y}[0],      "...nor os_y" );
ok( !defined $data{metadata}{osie_x}[0],    "...nor osie_x" );
ok( !defined $data{metadata}{osie_y}[0],    "...nor osie_y" );

# Now check Irish National Grid.
$config->geo_handler( 2 );
$guide = OpenGuides->new( config => $config );
is( $guide->locator->x_field, "osie_x", "correct x field" );
is( $guide->locator->y_field, "osie_y", "correct y field" );

OpenGuides::Test->write_data(
                              guide      => $guide,
                              node       => "I Made This Place Up",
                              osie_x     => 100000,
                              osie_y     => 200000,
                            );
%data = $guide->wiki->retrieve_node( "I Made This Place Up" );
is( $data{metadata}{osie_x}[0], 100000,    "osie_x stored correctly" );
is( $data{metadata}{osie_y}[0], 200000,    "osie_y stored correctly" );
ok( defined $data{metadata}{latitude}[0],  "latitude stored" );
ok( defined $data{metadata}{longitude}[0], "longitude stored" );

OpenGuides::Test->write_data(
                              guide      => $guide,
                              node       => "Brambles Coffee Shop",
                              latitude   => 54.6434,
                              longitude  => -5.6731,
                             );
%data = $guide->wiki->retrieve_node( "Brambles Coffee Shop" );
ok( defined $data{metadata}{osie_x}[0],     "osie_x stored" );
like( $data{metadata}{osie_x}[0], qr/^\d+$/,  "...as integer" );
ok( defined $data{metadata}{osie_y}[0],     "osie_y stored" );
like( $data{metadata}{osie_y}[0], qr/^\d+$/,  "...as integer" );
is( $data{metadata}{latitude}[0], 54.6434,  "latitude stored correctly" );
is( $data{metadata}{longitude}[0], -5.6731, "longitude stored correctly" );

eval {
    local $SIG{__WARN__} = sub { die $_[0]; };
    OpenGuides::Test->write_data(
                                  guide      => $guide,
                                  node       => "Locationless Page 2",
                                );
};
is( $@, "",
    "commit doesn't warn when using ING and node has no location data" );
%data = $guide->wiki->retrieve_node( "Locationless Page 2" );
ok( !defined $data{metadata}{latitude}[0],  "...and latitude not stored" );
ok( !defined $data{metadata}{longitude}[0], "...nor longitude" );
ok( !defined $data{metadata}{os_x}[0],      "...nor os_x" );
ok( !defined $data{metadata}{os_y}[0],      "...nor os_y" );
ok( !defined $data{metadata}{osie_x}[0],    "...nor osie_x" );
ok( !defined $data{metadata}{osie_y}[0],    "...nor osie_y" );

# Finally check UTM.
$config->geo_handler( 3 );
$config->ellipsoid( "Airy" );
$guide = OpenGuides->new( config => $config );
is( $guide->locator->x_field, "easting", "correct x field" );
is( $guide->locator->y_field, "northing", "correct y field" );

OpenGuides::Test->write_data(
                              guide      => $guide,
                              node       => "London Aquarium",
                              latitude   => 51.502,
                              longitude  => -0.118,
                            );
%data = $guide->wiki->retrieve_node( "London Aquarium" );
ok( defined $data{metadata}{easting}[0],       "easting stored" );
like( $data{metadata}{easting}[0], qr/^\d+$/,  "...as integer" );
ok( defined $data{metadata}{northing}[0],      "northing stored" );
like( $data{metadata}{northing}[0], qr/^\d+$/, "...as integer" );
is( $data{metadata}{latitude}[0], 51.502,      "latitude stored correctly" );
is( $data{metadata}{longitude}[0], -0.118,     "longitude stored correctly" );

eval {
    local $SIG{__WARN__} = sub { die $_[0]; };
    OpenGuides::Test->write_data(
                                  guide      => $guide,
                                  node       => "Locationless Page 3",
                                );
};
is( $@, "",
    "commit doesn't warn when using UTM and node has no location data" );
%data = $guide->wiki->retrieve_node( "Locationless Page 3" );
ok( !defined $data{metadata}{latitude}[0],  "...and latitude not stored" );
ok( !defined $data{metadata}{longitude}[0], "...nor longitude" );
ok( !defined $data{metadata}{os_x}[0],      "...nor os_x" );
ok( !defined $data{metadata}{os_y}[0],      "...nor os_y" );
ok( !defined $data{metadata}{osie_x}[0],    "...nor osie_x" );
ok( !defined $data{metadata}{osie_y}[0],    "...nor osie_y" );