Alzabo

 view release on metacpan or  search on metacpan

t/20-rev-engineer-pg-now.t  view on Meta::CPAN

#!/usr/bin/perl -w

use strict;

use File::Spec;

use lib '.', File::Spec->catdir( File::Spec->curdir, 't', 'lib' );

use Alzabo::Test::Utils;

use Test::More;

use Alzabo::Create::Schema;

my $config = Alzabo::Test::Utils->test_config_for('pg');

unless ( keys %$config )
{
    plan skip_all => 'no Postgres test config provided';
    exit;
}

{
    package FakeSchema;

    sub new { return bless { name => $_[1] }, $_[0] }

    sub db_schema_name { $_[0]->{name} }
}

require DBD::Pg;
require Alzabo::Driver::PostgreSQL;


plan tests => 6;

Alzabo::Test::Utils->remove_schema('pg');


my $schema_name = delete $config->{schema_name};
delete $config->{rdbms};

{
    # This seems to help avoid those damn 'source database "template1"
    # is being accessed by other users' errors.  Freaking Postgres!
    sleep 1;

    # We create a couple of tables *without* using Alzabo, then see
    # whether it can reverse-engineer them and preserve foreign key
    # relationships.
    my $driver = Alzabo::Driver->new( rdbms  => 'PostgreSQL',
                                      schema => FakeSchema->new('template1'),
                                    );
    $driver->connect( %$config );
    my $dbh = $driver->handle;

    $dbh->do("CREATE DATABASE $schema_name");
    $dbh->disconnect;

    ok( 1, 'drop and create database' );

    $driver = Alzabo::Driver->new( rdbms  => 'PostgreSQL',
                                   schema => FakeSchema->new($schema_name),
                                 );
    $driver->connect( %$config );
    $dbh = $driver->handle;



( run in 2.687 seconds using v1.01-cache-2.11-cpan-98e64b0badf )