Add author test for use strict/warnings
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 10_01sqlite_common.t
index e588ded..a23c3f4 100644 (file)
@@ -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};
 }