use strict; use warnings; use Fey::Test; use Fey::Test::Loader; use Test::More; use Fey::Loader; sub new_loader { local $SIG{__WARN__} = sub { my @w = grep { !/driver-specific/ } @_; warn @w if @w; }; return Fey::Loader->new( dbh => Fey::Test->mock_dbh(), @_ ); } { my $loader = new_loader(); my $schema1 = $loader->make_schema(); my $schema2 = Fey::Test->mock_test_schema_with_fks(); Fey::Test::Loader->compare_schemas( $schema1, $schema2, { 'Group.group_id' => { is_auto_increment => 0 }, 'Message.message_id' => { is_auto_increment => 0 }, 'User.user_id' => { is_auto_increment => 0 }, }, ); } { my $def = Fey::Loader::DBI->_default('NULL'); isa_ok( $def, 'Fey::Literal::Null' ); is( Fey::Loader::DBI->_default(q{'foo'})->string(), 'foo', q{'foo' as default becomes string foo} ); is( Fey::Loader::DBI->_default(q{"foo"})->string(), 'foo', q{"foo" as default becomes string foo} ); is( Fey::Loader::DBI->_default(42)->number(), 42, '42 as default becomes 42' ); is( Fey::Loader::DBI->_default(42.42)->number(), 42.42, '42.42 as default becomes 42.42' ); $def = Fey::Loader::DBI->_default('NOW'); isa_ok( $def, 'Fey::Literal::Term' ); is( $def->sql, 'NOW', 'unquoted NOW as default becomes NOW as term' ); } { { package Test::Schema; use Moose; extends 'Fey::Schema'; } { package Test::Table; use Moose; extends 'Fey::Table'; } { package Test::Column; use Moose; extends 'Fey::Column'; } { package Test::FK; use Moose; extends 'Fey::FK'; } my $loader = new_loader( schema_class => 'Test::Schema', table_class => 'Test::Table', column_class => 'Test::Column', fk_class => 'Test::FK', ); my $schema = $loader->make_schema(); isa_ok( $schema, 'Test::Schema' ); for my $table ( $schema->tables() ) { isa_ok( $table, 'Test::Table' ); for my $column ( $table->columns() ) { isa_ok( $column, 'Test::Column' ); } for my $fk ( $schema->foreign_keys_for_table($table) ) { isa_ok( $fk, 'Test::FK' ); } } } { my $dbh = Fey::Test->mock_dbh(); $dbh->{Name} = 'database=FooBar;port=1234'; my $loader = Fey::Loader::DBI->new( dbh => $dbh ); is( $loader->_dbh_name(), 'FooBar', 'parsed database name from DSN' ); $dbh->{Name} = 'database=FooBar2'; $loader = Fey::Loader::DBI->new( dbh => $dbh ); is( $loader->_dbh_name(), 'FooBar2', 'parsed database name from DSN' ); $dbh->{Name} = 'dbname=FooBar3'; $loader = Fey::Loader::DBI->new( dbh => $dbh ); is( $loader->_dbh_name(), 'FooBar3', 'parsed database name from DSN' ); } done_testing();