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;
my $db_basic = Mock::Basic->new({dbh => $dbh});
$db_basic->setup_test_db;
Mock::Basic->load_plugin('Lookup');

subtest 'lookup method' => sub {
    $db_basic->insert('mock_basic', => +{
        id   => 1,
        name => 'perl',
    });

    my $row = $db_basic->lookup('mock_basic', +{id => 1});
    isa_ok $row, 'Mock::Basic::Row::MockBasic';
    is_deeply $row->get_columns, +{
        id        => 1,
        name      => 'perl',
        delete_fg => 0,
    };

    # multiple key
    $row = $db_basic->lookup('mock_basic', +{id => 1, name => 'perl'});
    isa_ok $row, 'Mock::Basic::Row::MockBasic';
    is_deeply $row->get_columns, +{
        id        => 1,
        name      => 'perl',
        delete_fg => 0,
    };
    $row->delete;
};

subtest 'lookup method(arrayref)' => sub {
    $db_basic->insert('mock_basic', => {
        id   => 1,
        name => 'perl',
    });

    my $row = $db_basic->lookup('mock_basic', [id => 1]);
    isa_ok $row, 'Mock::Basic::Row::MockBasic';
    is_deeply $row->get_columns, +{
        id        => 1,
        name      => 'perl',
        delete_fg => 0,
    };

    # multiple key
    $row = $db_basic->lookup('mock_basic', [id => 1, name => 'perl']);
    isa_ok $row, 'Mock::Basic::Row::MockBasic';
    is_deeply $row->get_columns, +{
        id        => 1,
        name      => 'perl',
        delete_fg => 0,
    };
    $row->delete;
};

subtest 'lookup_with_columns' => sub {
    $db_basic->insert('mock_basic', => +{
        id   => 2,
        name => 'ruby',
    });

    my $row = $db_basic->lookup('mock_basic', +{id => 2}, { columns => [qw/id/]});
    isa_ok $row, 'Mock::Basic::Row::MockBasic';
    is_deeply $row->get_columns, +{
        id => 2,
    };
};
subtest 'lookup_with_+columns' => sub {
    $db_basic->insert('mock_basic', => +{
        id   => 3,
        name => 'python',
    });

    my $row = $db_basic->lookup('mock_basic', +{id => 3}, { '+columns' => [\'id+20 as calc']});
    isa_ok $row, 'Mock::Basic::Row::MockBasic';
    is_deeply $row->get_columns, +{
        id        => 3,
        name      => 'python',
        calc      => 23,
        delete_fg => 0,
    };
};

done_testing;