use strict;
use warnings;
use Test::More tests => 14;
use DBICx::TestDatabase;
BEGIN { use_ok('DBIx::Class::DynamicDefault') }
use FindBin;
use lib "$FindBin::Bin/lib";
my $schema = DBICx::TestDatabase->new('TestSchema');
my $rs = $schema->resultset('Table');
my $rs2 = $schema->resultset('Affe');
my $row = $rs->create({ fred => 'affe' });
is($row->quux, 1, 'default on create with methodname');
is($row->garply, undef, 'no default on create');
is($row->corge, 'create', 'default on create with coderef');
$row->update({ fred => 'moo' });
is($row->quux, 1, 'no default on update');
is($row->garply, $$, 'default on update with coderef');
is($row->corge, 'update2', 'default on update with methodname');
$row->garply(-42);
$row->update;
is($row->garply, -42, 'defaults don\'t get set when a value is specified explicitly on update');
$row->update;
is($row->corge, 'update3', 'no default on update without changes');
$row = $rs->create({ quux => -23, fred => 'zomtec' });
is($row->quux, -23, 'defaults don\'t get set when a value is specified explicitly on create');
$row = $rs2->create({ moo => 0, kooh => '123' });
is($row->moo, 0, 'no default on create');
is($row->kooh, '123', 'no default on create');
$row->update;
is($row->moo, 1, 'default on update without changes and always_update');
is($row->kooh, 'zomtec', 'on update default without always_update if another col is changed due to always_update');