#!/usr/bin/perl
########################################################################
# this tesst checks that store_XXX in Test::DatabaseRow's row_ok
# functions works
########################################################################
use strict;
use warnings;
use Test::More tests => 10;
use Test::DatabaseRow;
use Test::Builder::Tester;
use Data::Dumper;
$Test::DatabaseRow::dbh = FakeDBI->new(results => 2);
########################################################################
my @rows;
test_out("ok 1 - matches");
row_ok(table => "dummy",
where => [ dummy => "dummy" ],
results => 2,
label => "matches",
store_rows => \@rows);
test_test("array");
is_deeply(\@rows, [
{ fooid => 123, name => "fred" },
{ fooid => 124, name => "bert" },
]);
########################################################################
my $row;
test_out("ok 1 - matches");
row_ok(table => "dummy",
where => [ dummy => "dummy" ],
results => 2,
label => "matches",
store_row => \$row);
test_test("scalar");
is_deeply($row, { fooid => 123, name => "fred" });
test_out("ok 1 - matches");
row_ok(table => "dummy",
where => [ dummy => "dummy" ],
results => 2,
label => "matches",
store_row => \$row);
test_test("scalar");
is_deeply($row, { fooid => 123, name => "fred" });
my %row;
test_out("ok 1 - matches");
row_ok(table => "dummy",
where => [ dummy => "dummy" ],
results => 2,
label => "matches",
store_row => \%row);
test_test("hash");
is_deeply(\%row, { fooid => 123, name => "fred" });
$row = {};
test_out("ok 1 - matches");
row_ok(table => "dummy",
where => [ dummy => "dummy" ],
results => 2,
label => "matches",
store_row => \$row);
test_test("ref");
is_deeply($row, { fooid => 123, name => "fred" });
########################################################################
# fake database package
package FakeDBI;
sub new { my $class = shift; return bless { @_ }, $class };
sub quote { return "qtd<$_[1]>" };
sub prepare
{
my $this = shift;
# die if we need to
if ($this->fallover)
{ die "Khaaaaaaaaaaaaan!" }
return FakeSTH->new($this);
}
sub results { return $_[0]->{results} }
sub nomatch { return $_[0]->{nomatch} }
sub fallover { return $_[0]->{fallover} }
package FakeSTH;
sub new { return bless { parent => $_[1] }, $_[0] };
sub execute { return 1 };
sub fetchrow_hashref
{
my $this = shift;
my $parent = $this->{parent};
$this->{returned}++;
return if $parent->nomatch;
return if $this->{returned} > $parent->results;
if ($this->{returned} == 1)
{ return { fooid => 123, name => "fred" } }
if ($this->{returned} == 2)
{ return { fooid => 124, name => "bert" } }
if ($this->{returned} == 3)
{ return { fooid => 125, name => "ernie" } }
# oops, someone wanted more results than we prepared
return;
}