use Test::More 'no_plan';
# build the testing class
package Foo;
use Storm::Object -traits => 'Storm::Meta::Class::Trait::AutoTable';
use Storm::Types qw( StormArrayRef );
has 'identifier' => ( is => 'rw', traits => [qw( PrimaryKey AutoIncrement )] );
has 'array' => (
is => 'rw',
isa => StormArrayRef,
default => sub { [ ] },
);
package Bar;
use Storm::Object -traits => 'Storm::Meta::Class::Trait::AutoTable';
has 'identifier' => ( is => 'rw', traits => [qw( PrimaryKey AutoIncrement )] );
has 'int' => (
is => 'rw',
isa => 'Int',
);
# run the tests
package main;
use Storm;
my $storm = Storm->new( source => ['DBI:SQLite:dbname=:memory:'] );
$storm->aeolus->install_class( 'Foo' );
$storm->aeolus->install_class( 'Bar' );
{ # insert and data lookup
my @bars = map { Bar->new( int => $_ ) } 1..5;
my $foo = Foo->new( array => \@bars );
$storm->insert( @bars );
$storm->insert( $foo );
my $sth = $storm->source->dbh->prepare( 'SELECT identifier, array FROM Foo' );
$sth->execute;
my @data = $sth->fetchrow_array;
is_deeply \@data, ['1', '[Bar=1,Bar=2,Bar=3,Bar=4,Bar=5]'], 'object data retrieved from database';
}
{
my $scope = $storm->new_scope;
my $foo = $storm->lookup( 'Foo', 1 );
for ( 1..5 ) {
is $foo->array->[$_ - 1]->identifier, $_, 'retrieved array element ' . $_;
}
}