DbFramework/t/30persistent.t

83 lines
2.3 KiB
Perl
Raw Permalink Normal View History

2021-02-08 00:21:11 +08:00
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
use strict;
use Test;
use t::Config;
BEGIN { plan tests => scalar(@t::Config::drivers) * 12 }
require 't/util.pl';
use DbFramework::Persistent;
use DbFramework::DataModel;
use DbFramework::Table;
use DbFramework::Util;
package Foo;
use base qw(DbFramework::Persistent);
package main;
for ( @t::Config::drivers ) { foo($_) }
sub foo($) {
my($driver) = @_;
my($catalog_db,$c_dsn,$c_u,$c_p) = connect_args($driver,'catalog');
my($test_db,$dsn,$u,$p) = connect_args($driver,'test');
my $dm = new DbFramework::DataModel($test_db,$dsn,$u,$p);
$dm->init_db_metadata($c_dsn,$c_u,$c_p);
my $dbh = $dm->dbh; $dbh->{PrintError} = 0;
my $catalog = new DbFramework::Catalog($c_dsn);
my $foo = new Foo($dm->collects_table_h_byname('foo'),$dbh,$catalog);
ok(1);
# init
$foo->table->delete;
ok(1);
# insert
$foo->attributes_h(['foo',0,'bar','bar','baz','baz','quux',0]);
my $pk = ($driver =~ /(mSQL|Pg)/ ) ? -1 : 1;
ok($foo->insert,$pk);
my %foo = ( foo => 0, bar => 'baz', baz => 'baz', quux => 1 );
$foo->attributes_h([ %foo ]);
$pk = ($driver =~ /(mSQL|Pg)/ ) ? -1 : 2;
ok($foo->insert,$pk);
my @foo = $foo->attributes_h_byname('foo','bar');
ok($foo[1],$foo{bar});
# update
$pk = ($driver =~ /(mSQL|Pg)/ ) ? 0 : 2;
$foo->attributes_h(['foo',$pk,'bar','baz','baz','quux']);
my $rows = ($driver =~ /mSQL/ ) ? -1 : 1;
ok($foo->update,$rows);
# select
$foo->attributes_h([]);
@foo = $foo->select(undef,'bar');
my @a = $foo[0]->attributes_h_byname('foo','bar');
$pk = ($driver =~ /(mSQL|Pg)/ ) ? 0 : 1;
ok("@a","$pk bar");
@a = $foo[1]->attributes_h_byname('foo','bar');
$pk = ($driver =~ /(mSQL|Pg)/ ) ? 0 : 2;
ok("@a","$pk baz");
@foo = $foo->select(q{bar like 'b%'},'foo,bar');
ok(@foo,2);
# delete
$rows = ($driver =~ /mSQL/ ) ? -1 : 1;
ok($foo[0]->delete,$rows);
# make persistent (sub)class
my($class,$table) = ('Bar','bar');
my $ok = qq{package $class;
use strict;
use base qw(DbFramework::Persistent);
};
ok(DbFramework::Persistent->make_class($class),$ok);
eval $ok;
my $bar = $class->new($dm->collects_table_h_byname($table),$dbh,$catalog);
ok($bar->table->name,$table);
}