minor optimization for Pg FK attrs, better test
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 10_03pg_common.t
index 8d17f1d..ed1ed93 100644 (file)
@@ -31,6 +31,8 @@ my $tester = dbixcsl_common_tests->new(
         on_connect_do  => [ 'SET client_min_messages=WARNING' ],
     },
     quote_char  => '"',
+    default_is_deferrable => 0,
+    default_on_clause => 'NO ACTION',
     data_types  => {
         # http://www.postgresql.org/docs/7.4/interactive/datatype.html
         #
@@ -226,6 +228,21 @@ my $tester = dbixcsl_common_tests->new(
                     pg_loader_test7_id INTEGER REFERENCES "dbicsl.test".pg_loader_test7 (id)
                 )
             },
+            # 4 through 8 are used for the multi-schema tests
+            q{
+                create table pg_loader_test9 (
+                    id bigserial primary key
+                )
+            },
+            q{
+                create table pg_loader_test10 (
+                    id bigserial primary key,
+                    eleven_id int,
+                    foreign key (eleven_id) references pg_loader_test9(id)
+                        on delete restrict on update set null deferrable
+                )
+            },
+
         ],
         pre_drop_ddl => [
             'DROP SCHEMA dbicsl_test CASCADE',
@@ -233,8 +250,8 @@ my $tester = dbixcsl_common_tests->new(
             'DROP SCHEMA "dbicsl.test" CASCADE',
             'DROP TYPE pg_loader_test_enum',
         ],
-        drop  => [ qw/ pg_loader_test1 pg_loader_test2 / ],
-        count => 4 + 30 * 2,
+        drop  => [ qw/pg_loader_test1 pg_loader_test2 pg_loader_test9 pg_loader_test10/ ],
+        count => 8 + 30 * 2,
         run   => sub {
             my ($schema, $monikers, $classes) = @_;
 
@@ -261,6 +278,19 @@ my $tester = dbixcsl_common_tests->new(
             like $code, qr/^=head1 NAME\n\n^$class\n\n=head1 DESCRIPTION\n\n^very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long comment\n\n^=cut\n/m,
                 'long table comment is in DESCRIPTION';
 
+            # test on delete/update fk clause introspection
+            ok ((my $rel_info = $schema->source('PgLoaderTest10')->relationship_info('eleven')),
+                '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';
+
             foreach my $db_schema (['dbicsl-test', 'dbicsl.test'], '%') {
                 lives_and {
                     rmtree EXTRA_DUMP_DIR;
@@ -275,7 +305,6 @@ my $tester = dbixcsl_common_tests->new(
                         {
                             naming => 'current',
                             db_schema => $db_schema,
-                            moniker_parts => [qw/schema name/],
                             preserve_case => 1,
                             dump_directory => EXTRA_DUMP_DIR,
                             quiet => 1,
@@ -299,7 +328,7 @@ my $tester = dbixcsl_common_tests->new(
                 } 'connected test schema';
 
                 lives_and {
-                    ok $rsrc = $test_schema->source('DbicslDashTestPgLoaderTest4');
+                    ok $rsrc = $test_schema->source('PgLoaderTest4');
                 } 'got source for table in schema name with dash';
 
                 is try { $rsrc->column_info('id')->{is_auto_increment} }, 1,
@@ -312,7 +341,7 @@ my $tester = dbixcsl_common_tests->new(
                     'column in schema name with dash';
 
                 lives_and {
-                    ok $rs = $test_schema->resultset('DbicslDashTestPgLoaderTest4');
+                    ok $rs = $test_schema->resultset('PgLoaderTest4');
                 } 'got resultset for table in schema name with dash';
 
                 lives_and {
@@ -346,7 +375,7 @@ my $tester = dbixcsl_common_tests->new(
                     'unique constraint is correct in schema name with dash');
 
                 lives_and {
-                    ok $rsrc = $test_schema->source('DbicslDotTestPgLoaderTest6');
+                    ok $rsrc = $test_schema->source('PgLoaderTest6');
                 } 'got source for table in schema name with dot';
 
                 is try { $rsrc->column_info('id')->{is_auto_increment} }, 1,
@@ -359,7 +388,7 @@ my $tester = dbixcsl_common_tests->new(
                     'column in schema name with dot introspected correctly';
 
                 lives_and {
-                    ok $rs = $test_schema->resultset('DbicslDotTestPgLoaderTest6');
+                    ok $rs = $test_schema->resultset('PgLoaderTest6');
                 } 'got resultset for table in schema name with dot';
 
                 lives_and {
@@ -379,7 +408,7 @@ my $tester = dbixcsl_common_tests->new(
                     'relationship in schema name with dot';
 
                 lives_and {
-                    ok $rsrc = $test_schema->source('DbicslDotTestPgLoaderTest7');
+                    ok $rsrc = $test_schema->source('PgLoaderTest7');
                 } 'got source for table in schema name with dot';
 
                 %uniqs = try { $rsrc->unique_constraints };
@@ -393,22 +422,22 @@ my $tester = dbixcsl_common_tests->new(
                     'unique constraint is correct in schema name with dot');
 
                 lives_and {
-                    ok $test_schema->source('DbicslDotTestPgLoaderTest6')
+                    ok $test_schema->source('PgLoaderTest6')
                         ->has_relationship('pg_loader_test4');
                 } 'cross-schema relationship in multi-db_schema';
 
                 lives_and {
-                    ok $test_schema->source('DbicslDashTestPgLoaderTest4')
+                    ok $test_schema->source('PgLoaderTest4')
                         ->has_relationship('pg_loader_test6s');
                 } 'cross-schema relationship in multi-db_schema';
 
                 lives_and {
-                    ok $test_schema->source('DbicslDashTestPgLoaderTest8')
+                    ok $test_schema->source('PgLoaderTest8')
                         ->has_relationship('pg_loader_test7');
                 } 'cross-schema relationship in multi-db_schema';
 
                 lives_and {
-                    ok $test_schema->source('DbicslDotTestPgLoaderTest7')
+                    ok $test_schema->source('PgLoaderTest7')
                         ->has_relationship('pg_loader_test8s');
                 } 'cross-schema relationship in multi-db_schema';
             }