X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F10_08sqlanywhere_common.t;h=6f1f58e8f37ae3c6f5075d5961de882b601ce363;hb=3a7a1d7726d84d0970d8ff8e8107fc52e3af0f53;hp=a626b8646c2d245428f7df32a725f37a94e1ebd7;hpb=4c2e2ce9f827fbe28aa59e242050167d50ffc705;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/10_08sqlanywhere_common.t b/t/10_08sqlanywhere_common.t index a626b86..6f1f58e 100644 --- a/t/10_08sqlanywhere_common.t +++ b/t/10_08sqlanywhere_common.t @@ -4,6 +4,7 @@ use Test::More; use Test::Exception; use Try::Tiny; use File::Path 'rmtree'; +use DBIx::Class::Optional::Dependencies; use DBIx::Class::Schema::Loader 'make_schema_at'; use Scope::Guard (); @@ -19,31 +20,34 @@ use constant EXTRA_DUMP_DIR => "$tdir/sqlanywhere_extra_dump"; # # Setting them to zero is preferred. -my $dbd_sqlanywhere_dsn = $ENV{DBICTEST_SQLANYWHERE_DSN} || ''; -my $dbd_sqlanywhere_user = $ENV{DBICTEST_SQLANYWHERE_USER} || ''; -my $dbd_sqlanywhere_password = $ENV{DBICTEST_SQLANYWHERE_PASS} || ''; +my %dsns; +for (qw(SQLANYWHERE SQLANYWHERE_ODBC)) { + next unless $ENV{"DBICTEST_${_}_DSN"}; -my $odbc_dsn = $ENV{DBICTEST_SQLANYWHERE_ODBC_DSN} || ''; -my $odbc_user = $ENV{DBICTEST_SQLANYWHERE_ODBC_USER} || ''; -my $odbc_password = $ENV{DBICTEST_SQLANYWHERE_ODBC_PASS} || ''; + my $dep_group = lc "rdbms_$_"; + if (!DBIx::Class::Optional::Dependencies->req_ok_for($dep_group)) { + diag 'You need to install ' . DBIx::Class::Optional::Dependencies->req_missing_for($dep_group) + . " to test with $_"; + next; + } + + $dsns{$_}{dsn} = $ENV{"DBICTEST_${_}_DSN"}; + $dsns{$_}{user} = $ENV{"DBICTEST_${_}_USER"}; + $dsns{$_}{password} = $ENV{"DBICTEST_${_}_PASS"}; +}; + +plan skip_all => 'You need to set the DBICTEST_SQLANYWHERE_DSN, _USER and _PASS and/or the DBICTEST_SQLANYWHERE_ODBC_DSN, _USER and _PASS environment variables' + unless %dsns; my ($schema, $schemas_created); # for cleanup in END for extra tests my $tester = dbixcsl_common_tests->new( vendor => 'SQLAnywhere', auto_inc_pk => 'INTEGER IDENTITY NOT NULL PRIMARY KEY', - connect_info => [ ($dbd_sqlanywhere_dsn ? { - dsn => $dbd_sqlanywhere_dsn, - user => $dbd_sqlanywhere_user, - password => $dbd_sqlanywhere_password, - } : ()), - ($odbc_dsn ? { - dsn => $odbc_dsn, - user => $odbc_user, - password => $odbc_password, - } : ()), - ], + connect_info => [ map { $dsns{$_} } sort keys %dsns ], loader_options => { preserve_case => 1 }, + default_is_deferrable => 1, + default_on_clause => 'RESTRICT', data_types => { # http://infocenter.sybase.com/help/topic/com.sybase.help.sqlanywhere.11.0.1/dbreference_en11/rf-datatypes.html # @@ -144,12 +148,42 @@ my $tester = dbixcsl_common_tests->new( 'ntext' => { data_type => 'ntext' }, }, extra => { - count => 30 * 2, + create => [ + # 4 through 8 are used for the multi-schema tests + q{ + create table sqlanywhere_loader_test9 ( + id int identity not null primary key + ) + }, + q{ + create table sqlanywhere_loader_test10 ( + id int identity not null primary key, + nine_id int, + foreign key (nine_id) references sqlanywhere_loader_test9(id) + on delete cascade on update set null + ) + }, + ], + drop => [ qw/sqlanywhere_loader_test9 sqlanywhere_loader_test10/ ], + count => 4 + 30 * 2, run => sub { SKIP: { $schema = $_[0]; my $self = $_[3]; + # test on delete/update fk clause introspection + ok ((my $rel_info = $schema->source('SqlanywhereLoaderTest10')->relationship_info('nine')), + 'got rel info'); + + is $rel_info->{attrs}{on_delete}, 'CASCADE', + 'ON DELETE clause introspected correctly'; + + is $rel_info->{attrs}{on_update}, 'SET NULL', + 'ON UPDATE clause introspected correctly'; + + is $rel_info->{attrs}{is_deferrable}, 1, + 'is_deferrable defaults to 1'; + my $connect_info = [@$self{qw/dsn user password/}]; my $dbh = $schema->storage->dbh; @@ -366,12 +400,7 @@ EOF }, ); -if (not ($dbd_sqlanywhere_dsn || $odbc_dsn)) { - $tester->skip_tests('You need to set the DBICTEST_SQLANYWHERE_DSN, _USER and _PASS and/or the DBICTEST_SQLANYWHERE_ODBC_DSN, _USER and _PASS environment variables'); -} -else { - $tester->run_tests(); -} +$tester->run_tests(); sub extra_cleanup { if (not $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}) {