Data-Mapper

 view release on metacpan or  search on metacpan

t/mapper.t  view on Meta::CPAN

use t::lib::Utils;
use Test::Requires qw(DBI DBD::SQLite);

use Test::More;
use Test::Fatal;

use t::lib::Data::Mapper;
use t::lib::Another::Mapper;
use Data::Mapper::Adapter::DBI;

my $dbh = t::lib::Utils::dbh;
   $dbh->do('create table test (id integer primary key, value text)');

my $adapter = Data::Mapper::Adapter::DBI->new({ driver => $dbh });
my $mapper  = t::lib::Data::Mapper->new({ adapter => $adapter });
my $another = t::lib::Another::Mapper->new({ adapter => $adapter });

subtest 'create' => sub {
    my $data = $mapper->create(test => { value => 'test create' });

    ok     $data;
    isa_ok $data, 't::lib::Data::Mapper::Data::Test';
    like   $data->param('id'),    qr/^\d+$/;
    is     $data->param('value'), 'test create';
    ok    !$data->is_changed;
};

subtest 'find' => sub {
    my $created = $mapper->create(test => { value => 'test find' });
    my $found   = $mapper->find(test => { id => $created->{id} });

    ok        $found;
    isa_ok    $found, 't::lib::Data::Mapper::Data::Test';
    is_deeply $created, $found;
    ok       !$found->is_changed;

    note 'when not found';
    my $ret = $mapper->find(test => { id => 'not found key' });
    ok !$ret;
};

subtest 'search' => sub {
    my $created1 = $mapper->create(test => { value => 'test search' });
    my $created2 = $mapper->create(test => { value => 'test search' });
    my $result  = $mapper->search(test => {
        value => 'test search'
    }, {
        order_by => 'id desc'
    });

    ok $result;
    is ref $result, 'ARRAY';
    is scalar @$result, 2;

    for my $record (@$result) {
        isa_ok $record, 't::lib::Data::Mapper::Data::Test';
        ok    !$record->is_changed;
    }

    is_deeply $result, [$created2, $created1];
};

subtest 'update' => sub {
    my $data = $mapper->create(test => { value => 'test update' });



( run in 1.838 second using v1.01-cache-2.11-cpan-54e63673c56 )