# -*- perl -*-

# t/004_basic.t - check basic stuff

use Class::C3;
use strict;
use Test::More;
use warnings;
no warnings qw(once);

BEGIN {
    eval "use DBD::SQLite";
    plan $@
        ? ( skip_all => 'needs DBD::SQLite for testing' )
        : ( tests => 30 );
}

use lib qw(t/lib);

use_ok( 'VCTest' );

use_ok( 'VCTest::Schema' );

my $schema = VCTest->init_schema();

my $item = $schema->resultset('Test1')->new({
    name    => 'Test.1',
    vcol2   => 'VTest2.1',
    vcol3   => 'VTest3.1',
});

is($item->name,'Test.1');
is($item->vcol2,'VTest2.1');
is($item->vcol3accessor,'VTest3.1');
is($item->vcol1,undef);
$item->insert();

my $newitem = $schema->resultset('Test1')->find($item->id);
is($newitem->name,'Test.1');
is($newitem->vcol2,undef);
ok($newitem->vcol2('VTest2.2'));
is($newitem->vcol2,'VTest2.2');
is($newitem->get_column('vcol2'),'VTest2.2');
ok($newitem->set_column('vcol1','VTest1.2'));
$newitem->update();
is($newitem->get_column('vcol1'),'VTest1.2');
$newitem->update({
    description    => 'Test.3',
    vcol3          => 'VTest3.3',
});
is($newitem->vcol3accessor,'VTest3.3');
is($newitem->vcol2,'VTest2.2');

is($newitem->column_info('vcol1')->{virtual},1);
is($newitem->column_info('name')->{virtual},0);
is($newitem->column_info('name')->{data_type},'varchar');
is($newitem->column_info('vcol3')->{virtual},1);
is($newitem->column_info('vcol3')->{accessor},'vcol3accessor');

my %values = $newitem->get_columns;

is($values{vcol3},'VTest3.3');
is($values{vcol2},'VTest2.2');
is($values{name},'Test.1');

my $brandnewitem = $schema->resultset('Test1')->create({
    name    => 'Test.4',
    vcol2   => 'VTest2.4',
    vcol3   => 'VTest3.4',
});
is($brandnewitem->name,'Test.4');
is($brandnewitem->vcol2,'VTest2.4');

ok($brandnewitem->set_column('description','Test.5'));
ok($brandnewitem->set_column('vcol1','VTest2.5'));

is($brandnewitem->get_column('description'),'Test.5');
is($brandnewitem->get_column('vcol1'),'VTest2.5');
is($brandnewitem->get_column('vcol2'),'VTest2.4');