Geo-OGC-Service-WFS
view release on metacpan or search on metacpan
t/postgis.t view on Meta::CPAN
use strict;
use warnings;
use Carp;
use Test::More tests => 8;
use Plack::Test;
use HTTP::Request::Common;
use Geo::OGC::Service;
use XML::LibXML;
use XML::SemanticDiff;
use XML::LibXML::PrettyPrint;
use DBI;
BEGIN { use_ok('Geo::OGC::Service::WFS') };
# create a test database first
my $user = getlogin || getpwuid($<) || "Kilroy";
my $pass = $user;
my $test_db = 'wfstest';
my $dbh;
sub setup_db {
my $connect = "dbi:Pg:dbname=postgres";
my %attr = (PrintError => 0, RaiseError => 1, AutoCommit => 1);
$dbh = DBI->connect($connect, $user, $pass, \%attr);
my ($e) = $dbh->selectrow_array("SELECT datname FROM pg_database WHERE datname='$test_db'");
return "Database '$test_db' exists, skipping." if $e;
$dbh->do("CREATE DATABASE $test_db encoding 'UTF-8'");
$connect = "dbi:Pg:dbname=$test_db";
$dbh = DBI->connect($connect, $user, $pass, \%attr);
# check for postgis before creating it
($e) = $dbh->selectrow_array("SELECT extname FROM pg_extension WHERE extname='postgis'");
unless ($e) {
$dbh->do("CREATE EXTENSION postgis") or die $dbh->errstr;
}
for my $sql (
"CREATE TABLE test (id serial primary key, i int, d double precision, s text, p text)",
"SELECT AddGeometryColumn ('public','test','geom',4326,'POINT',2)",
"INSERT INTO test (i, d, s, p, geom) VALUES (1, 2.1, 'hello', 'pass', ST_GeomFromText('POINT (1 2)',4326))"
)
{
$dbh->do($sql) or die $dbh->errstr;
}
}
sub cleanup {
my $connect = "dbi:Pg:dbname=postgres";
my %attr = (PrintError => 0, RaiseError => 1, AutoCommit => 1);
$dbh = DBI->connect($connect, $user, $pass, \%attr);
$dbh->do("DROP DATABASE IF EXISTS $test_db") or die $dbh->errstr;
}
eval {
setup_db();
};
my $error = $@;
my $pp = XML::LibXML::PrettyPrint->new(indent_string => " ");
SKIP: {
skip "Skip PostGIS tests. Reason: can't create or connect to database '$test_db': ".$error, 7 if $error;
my $config = {
"resource" => "/",
"Content-Type" => "text/xml",
"TARGET_NAMESPACE" => "http://ogr.maptools.org/",
"PREFIX" => "ogr",
"debug" => "0",
"Title" => "Test WFS",
"Operations" => "Query,Insert,Update,Delete",
"FeatureTypeList" => [
{
"prefix" => "local",
"gml:id" => "id",
"DataSource" => "PG:dbname=$test_db host=localhost user=$user password=$pass",
"test_auth.geom" => {
"Operations" => "Query,Insert,Update,Delete",
( run in 1.907 second using v1.01-cache-2.11-cpan-ceb78f64989 )