package Fey::Test::Pg;
{
$Fey::Test::Pg::VERSION = '0.10';
}
use strict;
use warnings;
use Test::More;
BEGIN {
local $Test::Builder::Level = $Test::Builder::Level + 1;
unless ( eval { require DBD::Pg; 1 } ) {
plan skip_all => 'These tests require DBD::Pg';
}
}
use DBI;
use File::Spec;
use File::Temp ();
{
my $DBH;
sub dbh {
my $class = shift;
return $DBH if $DBH;
my $dbh = DBI->connect(
'dbi:Pg:dbname=template1', q{}, q{},
{ PrintError => 0, RaiseError => 1 }
);
eval { $dbh->do('DROP DATABASE test_fey') };
$dbh->do('CREATE DATABASE test_fey');
$dbh = DBI->connect(
'dbi:Pg:dbname=test_fey', q{}, q{},
{ PrintError => 0, RaiseError => 1 }
);
# Shuts up "NOTICE" warnings from Pg.
local $dbh->{PrintWarn} = 0;
$class->_run_ddl($dbh);
return $DBH = $dbh;
}
}
sub _run_ddl {
my $class = shift;
my $dbh = shift;
for my $ddl ( $class->_sql() ) {
$dbh->do($ddl);
}
}
sub _sql {
return (
<<'EOF',
CREATE TABLE "User" (
user_id serial not null,
username text unique not null,
email text null,
PRIMARY KEY (user_id)
)
EOF
<<'EOF',
CREATE TABLE "Group" (
group_id serial not null,
name text not null,
PRIMARY KEY (group_id),
UNIQUE (name)
)
EOF
<<'EOF',
CREATE TABLE "UserGroup" (
user_id integer not null,
group_id integer not null,
PRIMARY KEY (user_id, group_id),
FOREIGN KEY (user_id) REFERENCES "User" (user_id),
FOREIGN KEY (group_id) REFERENCES "Group" (group_id)
)
EOF
<<'EOF',
CREATE TABLE "Message" (
message_id SERIAL NOT NULL,
quality DECIMAL(5,2) NOT NULL DEFAULT 2.3,
message VARCHAR(255) NOT NULL DEFAULT 'Some message \'" text',
message_date DATE NOT NULL DEFAULT NOW(),
parent_message_id INTEGER NULL,
user_id INTEGER NOT NULL,
PRIMARY KEY (message_id),
FOREIGN KEY (parent_message_id) REFERENCES "Message" (message_id),
FOREIGN KEY (user_id) REFERENCES "User" (user_id)
)
EOF
<<'EOF',
CREATE VIEW "TestView"
AS SELECT user_id FROM "User"
EOF
);
}
1;