Moose Still Extends

Back into extended test mode here in the Moose-Pen;

Time to get back to some more practical tests as I have been side tracked by a few API issues. Just to re-cap the practical tests are found in the 'xt' dir and I am using them to test Driver::DBI against a real DB. So far this practical testing has sniffed out a whole lot of bugs and I am hoping to sniff out a few more.

Today I am am going to play with the DBIs 'execute array' this should be totally transparent to the end user all I need to do is pass an 'Array-ref' into my $da as the container and DBI::Driver should do the rest.

First I will need some more data and I added;

{first_name =>'Tom',
last_name =>'Atkins',
user_id =>'atkinst'},
{first_name =>'Tom',
last_name =>'Atkins2',
user_id =>'atkinst2'},
{first_name =>'Tom',
last_name =>'Atkins3',
user_id =>'atkinst3'},
{first_name =>'Tom',
last_name =>'Atkins4',
user_id =>'atkinst4'},

to the '_new_person_data' array ref. Next I will need a new test case '25_exe_array.t';

use Test::More tests => 2;
use Data::Dumper;
use Xtest::DB::Users;
use Xtest::DA::Person;
use Test::Deep qw(cmp_deeply);

my $user_db = Xtest::DB::Users->new();
my $dbh = $user_db->connect();
my $people = $user_db->new_person_data;
my $person= Xtest::DA::Person->new();
my $da = $person->da();

ok($da->create($dbh,$people),"Create Four New Users ");
ok($da->result()->effected == 4,"Four row effected");

Lets see what happens when I run the above I get;

can\'t use an undefined value as a HASH reference at D:/Perl64/lib/ line 1962
hmm seems I need to clean out a little more data that just the first one on that ' new_person_data'.

This patch should fix that;

my $people = $user_db->new_person_data;
my $person= Xtest::DA::Person->new();

That is funny I can't remember when the last time I had to splice an array must be at least 6 or 7 years. Anyway on the next run I get;

ok 1 - Create Four New Users
ok 2 - Four row effected
Ok that supposedly worked but the only way to know for sure is to add in another test;

$da = $person->da();
                left => {
                    name => 'first_name',
                right     => { value => $people->[0]->{first_name}},
                operator  => '=',


cmp_deeply( $da->result()->set->[0], $people,
"All 4 users added correctly");

Now for the above to work I have to re-set my DB as it may already have those four records in it. I can accomplish this simply by running '10_crud_basic.t' first. On my next run I got this error;

DBD::Oracle::db prepare failed: ORA-00904: "PEOPLE_ADDRESS"."ID":

and looking at the genrated SQL

LEFT JOIN people_address ON = people_address.people_id

That is the Link API buggering me up this time. That should be

LEFT JOIN people_address ON = people_address.people_id

So a quick fix to the 'Xtest::DA::Person' class '_build_da' sub;

links => [{type => 'LEFT',
to => { name => 'people_address'},
conditions => [{ left => { name => 'id',
++ view => 'people' },
right => { name => 'people_id'}},
{condition =>'and',
left => { name => 'primary_ind',
view => 'people_address' },
right => { value => 1}}}},

and another try I get this;

Compared array length of $data
# got : array with 14 element(s)
# expect : array with 4 element(s)

and looking at the returned value;

[ '6',
'atkinst ',

I will have to pad out those expected values a little as the returned so I will just add them onto the end of the '_people_data' array ref from 'Xtest::DB::Users' and adjust my test a little;

++my $all_people = $user_db->_people_data();
--cmp_deeply( $da->result()->set->[0], $people,
++cmp_deeply( $da->result()->set, $all_people,
            "All 4 users added correctly");
and when I run (after a fix of a few typos in my '_people_data' I get

ok 1 - Create Four New Users
ok 2 - Four row effected
ok 3 - All 4 users added correctly
So not bad for a days work;


Leave a comment

About byterock

user-pic Long time Perl guy, a few CPAN mods allot of work on DBD::Oracle and a few YAPC presentations