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;