X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F10_01sqlite_common.t;h=a23c3f4c8105c151915a310f1011ea8c694129f3;hb=f8c2ca5eac1d4782c1d5be369c9bd0dcf680cb9d;hp=e588dedd3d9e8aa3a48f8e55482862184be1c95e;hpb=567aa05681cd48788d132c016b357dc485d54f35;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/t/10_01sqlite_common.t b/t/10_01sqlite_common.t index e588ded..a23c3f4 100644 --- a/t/10_01sqlite_common.t +++ b/t/10_01sqlite_common.t @@ -1,4 +1,5 @@ use strict; +use warnings; use Test::More; use lib qw(t/lib); use dbixcsl_common_tests; @@ -17,6 +18,8 @@ my $tester = dbixcsl_common_tests->new( on_connect_do => [ 'PRAGMA foreign_keys = ON', 'PRAGMA synchronous = OFF', ] }, loader_options => { preserve_case => 1 }, + default_is_deferrable => 0, + default_on_clause => 'NO ACTION', data_types => { # SQLite ignores data types aside from INTEGER pks. # We just test that they roundtrip sanely. @@ -112,11 +115,32 @@ my $tester = dbixcsl_common_tests->new( PRIMARY KEY (id1, id2) ) }, + q{ + create table extra_loader_test8 ( + id integer primary key + ) + }, + q{ + create table extra_loader_test9 ( + id integer primary key, + eight_id int, + foreign key (eight_id) references extra_loader_test8(id) + on delete restrict on update set null deferrable + ) + }, + # test inline constraint + q{ + create table extra_loader_test10 ( + id integer primary key, + eight_id int references extra_loader_test8(id) on delete restrict on update set null deferrable + ) + }, ], pre_drop_ddl => [ 'DROP VIEW extra_loader_test5' ], - drop => [ qw/extra_loader_test1 extra_loader_test2 extra_loader_test3 - extra_loader_test4 extra_loader_test6 extra_loader_test7/ ], - count => 11, + drop => [ qw/extra_loader_test1 extra_loader_test2 extra_loader_test3 + extra_loader_test4 extra_loader_test6 extra_loader_test7 + extra_loader_test8 extra_loader_test9 extra_loader_test10 / ], + count => 20, run => sub { my ($schema, $monikers, $classes) = @_; @@ -147,11 +171,40 @@ my $tester = dbixcsl_common_tests->new( is $schema->resultset($monikers->{extra_loader_test5})->result_source->column_info('person_id')->{data_type}, 'integer', 'columns for views are introspected'; + # test that views are marked as such + isa_ok $schema->resultset($monikers->{extra_loader_test5})->result_source, 'DBIx::Class::ResultSource::View', + 'views have table_class set correctly'; + isnt $schema->resultset($monikers->{extra_loader_test6})->result_source->column_info('id1')->{is_auto_increment}, 1, q{two integer PKs don't get marked autoinc}; isnt $schema->resultset($monikers->{extra_loader_test7})->result_source->column_info('id1')->{is_auto_increment}, 1, q{composite integer PK with non-integer PK doesn't get marked autoinc}; + + # test on delete/update fk clause introspection + ok ((my $rel_info = $schema->source('ExtraLoaderTest9')->relationship_info('eight')), + 'got rel info'); + + is $rel_info->{attrs}{on_delete}, 'RESTRICT', + '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, + 'DEFERRABLE clause introspected correctly'; + + ok (($rel_info = $schema->source('ExtraLoaderTest10')->relationship_info('eight')), + 'got rel info'); + + is $rel_info->{attrs}{on_delete}, 'RESTRICT', + 'ON DELETE clause introspected correctly for inline FK'; + + is $rel_info->{attrs}{on_update}, 'SET NULL', + 'ON UPDATE clause introspected correctly for inline FK'; + + is $rel_info->{attrs}{is_deferrable}, 1, + 'DEFERRABLE clause introspected correctly for inline FK'; }, }, ); @@ -159,5 +212,5 @@ my $tester = dbixcsl_common_tests->new( $tester->run_tests(); END { - unlink "$tdir/sqlite_test"; + unlink "$tdir/sqlite_test" unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}; }