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 )