more work on pg tests
[dbsrgits/DBIx-Class.git] / t / 72pg.t
index 248d5e8..5e6c467 100644 (file)
--- a/t/72pg.t
+++ b/t/72pg.t
@@ -51,7 +51,6 @@ DBICTest::Schema->load_classes( map {s/.+:://;$_} @test_classes ) if @test_class
 ### connect, create postgres-specific test schema
 
 my $schema = DBICTest::Schema->connect($dsn, $user, $pass);
-my $dbh = $schema->storage->dbh;
 
 drop_test_schema($schema, 'no warn');
 create_test_schema($schema);
@@ -289,7 +288,11 @@ is($st->pkid1, 55, "Oracle Auto-PK without trigger: First primary key set manual
 done_testing;
 
 exit;
-END { drop_test_schema($schema) }
+
+END {
+    drop_test_schema($schema);
+    eapk_drop_all( $schema)
+};
 
 
 ######### SUBROUTINES
@@ -452,11 +455,8 @@ sub run_apk_tests {
         $new = $schema->resultset('Artist')->create({ name => 'bar' });
         is($new->artistid, 5, "Auto-PK worked");
     } 'old auto-pk tests did not die either';
-
-
 }
 
-
 # sets the artist table name and clears sequence name cache
 sub apk_t_set {
     my ( $s, $n ) = @_;
@@ -465,29 +465,83 @@ sub apk_t_set {
 }
 
 
+######## EXTENDED AUTO-PK TESTS
+
+BEGIN {
+  package DBICTest::Schema::ExtAPK;
+  push @main::test_classes, __PACKAGE__;
+
+  use strict;
+  use warnings;
+  use base 'DBIx::Class';
+
+  __PACKAGE__->load_components(qw/Core/);
+  __PACKAGE__->table('apk_t');
+
+  __PACKAGE__->add_columns(
+    map { $_ => { data_type => 'integer', is_auto_increment => 1 } }
+        qw( id1 id2 id3 id4 )
+  );
+
+  __PACKAGE__->set_primary_key('id1');
+}
+
+my @apk_schemas;
+BEGIN{ @apk_schemas = map "dbic_apk_$_", 0..5 }
+
 sub run_extended_apk_tests {
-    my $schema = shift;
+  my $schema = shift;
 
-    drop_ext_apk_test_schema($schema);
-    create_ext_apk_test_schema($schema);
+  eapk_drop_all($schema,'no warn');
 
+  # make the test schemas
+  $schema->storage->dbh_do(sub {
+    $_[1]->do("CREATE SCHEMA $_")
+        for @apk_schemas;
+  });
 
+  eapk_create($schema, with_search_path => [0,1]);
+
+  #unqualified table, unqualified 
+  lives_ok {
+    $schema->resultset('ExtAPK')->create({});
+  } 'create in first schema does not die';
 
-    # drop our auto-pk test schema
-    drop_ext_apk_test_schema($schema);
 }
 
-sub create_ext_apk_test_schema {
-    my $schema = shift;
+sub eapk_create {
+    my ($schema, %a) = @_;
+
     $schema->storage->dbh_do(sub {
-      my (undef,$dbh) = @_;
+        my (undef,$dbh) = @_;
 
-      local $dbh->{Warn} = 0;
+        my $searchpath_save;
+        if ( $a{with_search_path} ) {
+            ($searchpath_save) = $dbh->selectrow_array('SHOW search_path');
+
+            my $search_path = join ',',@apk_schemas[@{$a{with_search_path}}];
+
+            $dbh->do("SET search_path = $search_path");
+        }
 
+        my $schema = $a{qualify} ? "$a{qualify}." : '';
+        $dbh->do(<<EOS);
+CREATE TABLE apk_t (
+  id1 serial primary key
+  , id2 serial
+  , id3 serial
+  , id4 serial
+)
+EOS
+
+        if( $searchpath_save ) {
+            $dbh->do("SET search_path = $searchpath_save");
+        }
     });
 }
 
-sub drop_ext_apk_test_schema {
+
+sub eapk_drop_all {
     my ( $schema, $no_warn ) = @_;
 
     $schema->storage->dbh_do(sub {
@@ -495,11 +549,12 @@ sub drop_ext_apk_test_schema {
 
         local $dbh->{Warn} = 0;
 
-        for my $stat (
-                      ()
-                     ) {
-            eval { $dbh->do ($stat) };
+        # drop the test schemas
+        for (@apk_schemas ) {
+            eval{ $dbh->do("DROP SCHEMA $_ CASCADE") };
             diag $@ if $@ && !$no_warn;
         }
+
+
     });
 }