The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use t::Utils;
use Mock::Basic;
use Test::More;

my $dbh = t::Utils->setup_dbh;
Mock::Basic->set_dbh($dbh);
Mock::Basic->setup_test_db;

Mock::Basic->insert('mock_basic',{
    id   => 1,
    name => 'perl',
});

subtest 'update mock_basic data' => sub {
    ok +Mock::Basic->update('mock_basic',{name => 'python'},{id => 1});
    my $row = Mock::Basic->single('mock_basic',{id => 1});

    isa_ok $row, 'DBIx::Skinny::Row';
    is $row->name, 'python';
};

subtest 'row object update' => sub {
    my $row = Mock::Basic->single('mock_basic',{id => 1});
    is $row->name, 'python';

    ok $row->update({name => 'perl'});
    is $row->name, 'perl';
    my $new_row = Mock::Basic->single('mock_basic',{id => 1});
    is $new_row->name, 'perl';
};

subtest 'row data set and update' => sub {
    my $row = Mock::Basic->single('mock_basic',{id => 1});
    is $row->name, 'perl';

    $row->set_columns({name => 'ruby'});

    is $row->name, 'ruby';

    my $row2 = Mock::Basic->single('mock_basic',{id => 1});
    is $row2->name, 'perl';

    ok $row->update;
    my $new_row = Mock::Basic->single('mock_basic',{id => 1});
    is $new_row->name, 'ruby';
};

subtest 'scalarref update' => sub {
    my $row = Mock::Basic->single('mock_basic',{id => 1});
    is $row->name, 'ruby';

    ok $row->update({name => '1'});
    my $new_row = Mock::Basic->single('mock_basic',{id => 1});
    is $new_row->name, '1';

    $new_row->update({name => \'name + 1'});

    is +Mock::Basic->single('mock_basic',{id => 1})->name, 2;
};

subtest 'update row count' => sub {
    Mock::Basic->insert('mock_basic',{
        id   => 2,
        name => 'c++',
    });

    my $cnt = Mock::Basic->update('mock_basic',{name => 'java'});
    is $cnt, 2;
};

done_testing;