DBIx-CouchLike
view release on metacpan or search on metacpan
t/21_versioning_crud.t view on Meta::CPAN
# -*- mode:perl -*-
use strict;
use Test::More qw/ no_plan /;
use Test::Requires qw/ DBD::SQLite /;
BEGIN { use_ok 'DBIx::CouchLike' }
my $dbh = require 't/connect.pl';
ok $dbh;
my $couch = DBIx::CouchLike->new({ dbh => $dbh, table => "foo", versioning => 1 });
isa_ok $couch => "DBIx::CouchLike";
ok $couch->can('dbh');
is $couch->dbh => $dbh;
ok $couch->dbh->ping;
my $trace;
if ($ENV{TRACE}) {
require IO::Scalar;
$couch->{trace} = IO::Scalar->new(\$trace);
}
ok $couch->versioning;
is $couch->table => "foo";
ok $couch->create_table;
ok !$couch->{id_generator}; # lazy
ok $couch->id_generator;
ok $couch->id_generator->get_id;
my $id = $couch->post({ foo => 1, bar => 2 });
ok $id;
my $obj = $couch->get($id);
ok $obj;
is_deeply $obj => { foo => 1, bar => 2, _id => $id, _version => 0 };
ok $couch->put( $id, { foo => 2, bar => 3, baz => 4 } );
$obj = $couch->get($id);
ok $obj;
is_deeply $obj => { foo => 2, bar => 3, baz => 4, _id => $id, _version => 1 };
$obj->{foo} = "FOO";
$obj->{bar} = "BAR";
delete $obj->{baz};
ok $couch->put($obj);
ok $obj = $couch->get($id);
is_deeply $obj => { foo => "FOO", bar => "BAR", _id => $id, _version => 2 };
ok $couch->delete($id);
ok ! $couch->get($id);
ok $couch->post( "foo" => { a => "AAA" } );
eval {
$couch->post( "foo" => { a => "AAA" } )
};
ok $@ && $@ =~ qr/(?:duplicate key value|is not unique)/;
# post with id
$id = $couch->post({ _id => "9999", foo => 1, bar => 2 });
is $id => "9999";
$obj = $couch->get("9999");
is_deeply $obj => { foo => 1, bar => 2, _id => "9999", _version => 0 };
$couch->trace(undef);
# put with id (not exists)
$id = $couch->post({ _id => 1234, foo => 9999 });
is $id => 1234;
( run in 0.924 second using v1.01-cache-2.11-cpan-b16cb0d3907 )