App-Repository
view release on metacpan or search on metacpan
t/DBI-repobjectset.t view on Meta::CPAN
my $rep = $context->repository();
{
#cheating... I know its a DBI, but I have to set up the test somehow
my $dbh = $rep->{dbh};
eval { $dbh->do("drop table test_person"); };
my $ddl = <<EOF;
create table test_person (
person_id integer not null auto_increment primary key,
first_name varchar(99) null,
last_name varchar(99) null,
address varchar(99) null,
city varchar(99) null,
state varchar(99) null,
zip varchar(10) null,
country char(2) null,
home_phone varchar(99) null,
work_phone varchar(99) null,
email_address varchar(99) null,
gender char(1) null,
birth_dt date null,
age integer null,
index person_ie1 (last_name, first_name)
)
EOF
$dbh->do($ddl);
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (1,39,'stephen', 'M','GA')");
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (2,37,'susan', 'F','GA')");
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (3, 6,'maryalice','F','GA')");
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (4, 3,'paul', 'M','GA')");
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (5, 1,'christine','F','GA')");
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (6,45,'tim', 'M','GA')");
$dbh->do("insert into test_person (person_id,age,first_name,gender,state) values (7,39,'keith', 'M','GA')");
}
###########################################################################
# DATA ACCESS TESTS
###########################################################################
my ($person_id, $first_name, $last_name, $address, $city, $state, $zip, $country);
my ($home_phone, $work_phone, $email_address, $gender, $birth_dt, $age);
my $columns = [ "person_id", "age", "first_name", "gender", "state" ];
my $rows = [
[ 1, 39, "stephen", "M", "GA", ],
[ 2, 37, "susan", "F", "GA", ],
[ 3, 6, "maryalice", "F", "GA", ],
[ 4, 3, "paul", "M", "GA", ],
[ 5, 1, "christine", "F", "GA", ],
[ 6, 45, "tim", "M", "GA", ],
[ 7, 39, "keith", "M", "GA", ],
];
my ($row, $nrows);
#####################################################################
# $value = $rep->get ($table, $key, $col, \%options);
# $rep->set($table, $key, $col, $value, \%options);
#####################################################################
{
my $objset = $context->session_object("adults");
ok(1, "looks good");
my ($objects, $index);
#eval {
# $objects = $objset->get_objects();
#};
#ok($@ =~ /table not defined/, "table not defined");
#$objset->set_table("test_person");
$objects = $objset->get_objects();
ok($#$objects == 6, "got all 7 objects");
$objset->set_params({ "age.ge" => 18 });
$objects = $objset->get_objects();
ok($#$objects == 3, "got 4 objects");
$objset->set_params({});
$objects = $objset->get_objects("F",["gender"]);
ok($#$objects == 2, "got 3 female objects");
$objects = $objset->get_objects("M","gender");
ok($#$objects == 3, "got 4 male objects");
$index = $objset->get_index("gender");
ok(ref($index) eq "HASH", "got a hashref for an index");
ok(defined $index->{M}, "M part of index found");
ok(defined $index->{F}, "F part of index found");
ok(ref($index->{M}) eq "ARRAY", "M part of index ARRAY ref");
ok(ref($index->{F}) eq "ARRAY", "F part of index ARRAY ref");
my $values = $objset->get_column_values("gender");
is_deeply($values, ["M","F"], "gender values");
$index = $objset->get_unique_index("ak1", ["first_name"]);
is($index->{stephen}{age}, 39, "get_unique_index worked on stephen");
$objset->set_params({ "age.ge" => 1 });
$objset->update_params({ "age.ge" => 18, first_name => "stephen"});
$objects = $objset->get_objects();
ok($#$objects == 3, "got 4 objects");
$objset->get_unique_index(["first_name"]);
my $object = $objset->get_object("stephen","first_name");
ok($object->{age} == 39, "got stephen object (age 39)");
# max_age
$rep->set("test_person",1,"age",40);
$objects = $objset->get_objects(); # NOTE: objects are cached. we miss the update.
is($objects->[0]{age}, 39, "max_age: no refresh without max_age");
$objects = $objset->get_objects({max_age => 100}); # NOTE: objects are cached. we miss the update.
is($objects->[0]{age}, 39, "max_age: no refresh with big max_age");
$objects = $objset->get_objects({max_age => 0}); # NOTE: we get the update.
is($objects->[0]{age}, 40, "max_age: refresh with small max_age");
$rep->set("test_person",1,"age",41);
$objset->{max_age} = 0;
$objects = $objset->get_objects({max_age => 100}); # NOTE: objects are cached. we miss the update.
is($objects->[0]{age}, 40, "max_age: no refresh by overriding small max_age on objset with large max_age");
$objects = $objset->get_objects(); # NOTE: we get the update.
is($objects->[0]{age}, 41, "max_age: refresh with max_age on objset");
$rep->_disconnect();
my $hashes = [
{ person_id => 1, age => 39, name => "stephen", gender => "M", state => "GA", num_kids => 3, },
{ person_id => 2, age => 37, name => "susan", gender => "F", state => "GA", num_kids => 3, },
{ person_id => 3, age => 6, name => "maryalice", gender => "F", state => "GA", num_kids => 0, },
{ person_id => 4, age => 3, name => "paul", gender => "M", state => "GA", num_kids => 0, },
{ person_id => 5, age => 1, name => "christine", gender => "F", state => "GA", num_kids => undef, },
{ person_id => 6, age => 45, name => "tim", gender => "M", state => "GA", num_kids => 2, },
{ person_id => 7, age => 39, name => "keith", gender => "M", state => "GA", num_kids => 4, },
];
my $new_object_set = $rep->create_temporary_object_set("test_person", {fee => 1, fie => 2, foe => "fum"}, undef, $hashes);
( run in 0.454 second using v1.01-cache-2.11-cpan-39bf76dae61 )