cvsuser 02/07/30 14:19:33
Added: P5EEx/Blue/t Repository.01.constructor.t
Repository.05.object.t
Log:
new file
Revision Changes Path
1.1 p5ee/P5EEx/Blue/t/Repository.01.constructor.t
Index: Repository.01.constructor.t
===================================================================
#!/usr/local/bin/perl -wT
use Test::More qw(no_plan);
use lib ".";
use lib "..";
use P5EEx::Blue::P5EE;
use strict;
#$P5EEx::Blue::DEBUG = 6;
my ($rep);
###########################################################################
# CONSTRUCTOR
###########################################################################
# The proper way to construct a Repository object is to use the factory
# method on the Context.
#
# P5EEx::Blue::P5EE->context() [get the global Context]
# $context->repository($name, %named)
# $context->service("Repository", $name, %named)
# $context->wget() [set attributes in {store} and {cache}]
# $context->wdelete()
# P5EEx::Blue::P5EE->use() [pull in class code]
# $service->init()
# $service->init2() [get $ENV{DBNAME} etc. as $self->{dbname}]
# $service->connect() [connect to database]
# $service->load_rep_metadata() [read metadata in database]
# $service->load_rep_metadata_auto() [read native metadata]
# $dbh->tables()
# $dbh->type_info_all()
# $service->serial()
# $service->load_rep_metadata() [another table]
# return ($service)
{
my $context = P5EEx::Blue::P5EE->context();
$rep = $context->repository();
ok(defined $rep, "constructor ok");
isa_ok($rep, "P5EEx::Blue::Repository", "right class");
ok($rep->{name} eq "default", "name ok");
isa_ok($rep->{dbh}, "DBI::db", "dbh");
ok($rep->is_connected(), "connected [yes]");
ok($rep->disconnect(), "disconnect OK");
ok(!$rep->is_connected(), "connected [no]");
ok(! defined $rep->{dbh}, "dbh undefed");
}
use_ok("P5EEx::Blue::Repository");
###########################################################################
# CONSTRUCTOR
###########################################################################
# Using what looks like ordinary constructors is really kind of a weird way
# to construct a Repository. This is because the real constructor is a
# factory method on the Context. The new() method really just gets the
# Context and calls the service() method with "Repository" as the type
# for the first argument.
#
# P5EEx::Blue::Repository->new($name, %named)
# P5EEx::Blue::P5EE->context() [get the global Context]
# $class->service_type()
# $context->service($type, $name, %named)
# $context->wget() [set attributes in {store} and {cache}]
# $context->wdelete()
# P5EEx::Blue::P5EE->use() [pull in class code]
# $service->init()
# $service->init2() [get $ENV{DBNAME} etc. as $self->{dbname}]
# $service->connect() [connect to database]
# $service->load_rep_metadata() [read metadata in database]
# $service->load_rep_metadata_auto() [read native metadata]
# $dbh->tables()
# $dbh->type_info_all()
# $service->serial()
# $service->load_rep_metadata() [another table]
# return ($service)
{
# get a repository (whatever "default" is defined as in config file)
$rep = P5EEx::Blue::Repository->new(); # no args! name=default!
ok(defined $rep, "constructor ok");
isa_ok($rep, "P5EEx::Blue::Repository", "right class");
ok($rep->{name} eq "default", "name ok");
ok($rep->connect(), "connect OK");
isa_ok($rep->{dbh}, "DBI::db", "dbh");
ok($rep->is_connected(), "connected [yes]");
ok($rep->disconnect(), "disconnect OK");
ok(!$rep->is_connected(), "connected [no]");
ok(! defined $rep->{dbh}, "dbh undefed");
}
{
# get a repository (no need for config file)
$rep = P5EEx::Blue::Repository::DBI->new("test2",
dbidriver => "mysql",
dbname => "test",
dbuser => "dbuser",
dbpass => "dbuser7",
); # name=test2!
ok(defined $rep, "constructor ok");
isa_ok($rep, "P5EEx::Blue::Repository::DBI", "right class");
ok($rep->{name} eq "test2", "name ok");
isa_ok($rep->{dbh}, "DBI::db", "dbh");
ok($rep->is_connected(), "connected [yes]");
ok($rep->disconnect(), "disconnect OK");
ok(!$rep->is_connected(), "connected [no]");
ok(! defined $rep->{dbh}, "dbh undefed");
}
exit 0;
1.1 p5ee/P5EEx/Blue/t/Repository.05.object.t
Index: Repository.05.object.t
===================================================================
#!/usr/local/bin/perl -wT
use Test::More qw(no_plan);
use lib ".";
use lib "..";
use P5EEx::Blue::P5EE;
use strict;
#$P5EEx::Blue::DEBUG = 6;
my $context = P5EEx::Blue::P5EE->context();
{
my $rep = $context->repository();
#cheating... I know its a DBI, but I have to set up the test somehow
my $dbh = $rep->{dbh};
$dbh->do("drop table test_usr");
$dbh->do("create table test_usr (usr_id integer, age integer, name
varchar(16))");
$context->shutdown(); # disconnect from and forget about all repositories
}
my $rep = $context->repository("default",
override => 1,
table => {
test_usr => {
prikey => ["usr_id"],
},
},
);
print join(" ", @{$rep->get_table_names()}), "\n";
my $table = "test_usr";
my $columns = [ "usr_id", "age", "name" ];
my $rows = [
[ 1, 39, "stephen" ],
[ 2, 37, "susan" ],
[ 3, 6, "maryalice" ],
[ 4, 3, "paul" ],
[ 5, 1, "christine" ],
[ 6, 45, "tim" ],
[ 7, 39, "keith" ],
];
my $rval = $rep->store_rows($table, $columns, $rows);
ok($rval, "insert rows");
my $rows2 = $rep->select_rows($table, $columns);
is_deeply($rows2, $rows, "got same data as inserted");
my $obj = $rep->object($table, 1);
my $name = $obj->get("name");
is($name, "stephen", "get name");
$obj->set("name", "steve");
$name = $obj->get("name");
is($name, "steve", "get modified name");
$rep->commit();
{
my $dbh = $rep->{dbh};
$dbh->do("drop table test_usr");
}
exit 0;