use strict;
use warnings;

use lib 't/lib';

use Test::More tests => 15;

use Fey::Table;
use Fey::Column::Alias;


my $t = Fey::Table->new( name => 'Test' );
my $c = Fey::Column->new( name => 'test_id',
                        type => 'text',
                      );
$t->add_column($c);

{
    my $alias = $c->alias();
    isa_ok( $alias, 'Fey::Column::Alias' );

    ok( $alias->is_alias(), 'is_alias is true' );
    is( $alias->alias_name(), 'test_id1',
        'alias_name is test_id1' );
    is( $alias->id(), 'Test.test_id1',
        'id is Test.test_id1' );

    is( $alias->table(), $t,
        'table for column alias is same as original column' );

    is( $alias->name(), 'test_id', 'column alias name is test_id' );
    is( $alias->type(), 'text', 'column alias type is text' );
    is( $alias->generic_type(), 'text', 'column alias generic type is text' );
    ok( ! defined $alias->length(), 'column alias has no length' );
    ok( ! defined $alias->precision(), 'column alias has no precision' );
    ok( ! $alias->is_auto_increment(), 'column alias is not auto increment' );
    ok( ! $alias->is_nullable(), 'column alias defaults to not nullable' );
}

{
    my $alias = $c->alias();
    is( $alias->alias_name(), 'test_id2',
        'alias_name is test_id2' );
}

{
    my $alias = $c->alias( alias_name => 'foobar' );
    is( $alias->alias_name(), 'foobar',
        'explicitly set alias_name to foobar' );
}

{
    my $c = Fey::Column->new( name => 'testy',
                            type => 'text',
                          );
    my $alias = $c->alias();
    eval { $alias->id() };
    isa_ok( $@, 'Fey::Exception::ObjectState' );
}

