added test for rescan, fixed a few issues
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / lib / dbixcsl_common_tests.pm
index 8e9800c..2e4143c 100644 (file)
@@ -43,7 +43,7 @@ sub _monikerize {
 sub run_tests {
     my $self = shift;
 
-    plan tests => 73;
+    plan tests => 80;
 
     $self->create();
 
@@ -100,8 +100,13 @@ sub run_tests {
     }
 
     my $conn = $schema_class->clone;
-    my $monikers = $schema_class->loader->monikers;
-    my $classes = $schema_class->loader->classes;
+    my $monikers = {};
+    my $classes = {};
+    foreach my $source_name ($schema_class->sources) {
+        my $table_name = $schema_class->source($source_name)->from;
+        $monikers->{$table_name} = $source_name;
+        $classes->{$table_name} = $schema_class . q{::} . $source_name;
+    }
 
     my $moniker1 = $monikers->{loader_test1};
     my $class1   = $classes->{loader_test1};
@@ -124,6 +129,11 @@ sub run_tests {
     isa_ok( $rsobj23, "DBIx::Class::ResultSet" );
     isa_ok( $rsobj24, "DBIx::Class::ResultSet" );
 
+    my @columns_lt2 = $class2->columns;
+    is($columns_lt2[0], 'id', "Column Ordering 0");
+    is($columns_lt2[1], 'dat', "Column Ordering 1");
+    is($columns_lt2[2], 'dat2', "Column Ordering 2");
+
     my %uniq1 = $class1->unique_constraints;
     my $uniq1_test = 0;
     foreach my $ucname (keys %uniq1) {
@@ -230,7 +240,7 @@ sub run_tests {
     ok($new_obj1) or diag "Cannot find newly inserted PK::Auto record";
     is($new_obj1->id, $saved_id);
 
-    my ($obj2) = $rsobj2->find( dat => 'bbb' );
+    my ($obj2) = $rsobj2->search({ dat => 'bbb' })->first;
     is( $obj2->id, 2 );
 
     SKIP: {
@@ -316,7 +326,7 @@ sub run_tests {
         isa_ok( $rs_rel4->first, $class4);
 
         # find on multi-col pk
-        my $obj5 = $rsobj5->find( id1 => 1, id2 => 1 );
+        my $obj5 = $rsobj5->find({id1 => 1, id2 => 1});
         is( $obj5->id2, 1 );
 
         # mulit-col fk def
@@ -434,6 +444,38 @@ sub run_tests {
             my $obj15 = $rsobj15->find(1);
             isa_ok( $obj15->loader_test14, $class14 );
         }
+
+        # rescan test
+        SKIP: {
+            skip 'SQLite does not like schema changes while connected', 4
+                if $self->{vendor} =~ /sqlite/i;
+
+            my @statements_rescan = (
+                qq{
+                    CREATE TABLE loader_test25 (
+                        id INTEGER NOT NULL PRIMARY KEY,
+                        loader_test2 INTEGER NOT NULL,
+                        FOREIGN KEY (loader_test2) REFERENCES loader_test2 (id)
+                    ) $self->{innodb}
+                },
+                q{ INSERT INTO loader_test25 (id,loader_test2) VALUES(123, 1) },
+                q{ INSERT INTO loader_test25 (id,loader_test2) VALUES(321, 2) },
+            );
+
+            my $dbh = $self->dbconnect(1);
+            $dbh->do($_) for @statements_rescan;
+            $dbh->disconnect;
+
+            my @new = $conn->rescan;
+            is(scalar(@new), 1);
+            is($new[0], 'LoaderTest25');
+
+            my $rsobj25   = $conn->resultset('LoaderTest25');
+            isa_ok($rsobj25, 'DBIx::Class::ResultSet');
+            my $obj25 = $rsobj25->find(123);
+            isa_ok( $obj25->loader_test2, $class2);
+        }
+
     }
 }
 
@@ -519,7 +561,7 @@ sub create {
                 id INTEGER NOT NULL PRIMARY KEY,
                 fkid INTEGER NOT NULL,
                 dat VARCHAR(32),
-                FOREIGN KEY (fkid) REFERENCES loader_test3 (id)
+                FOREIGN KEY( fkid ) REFERENCES loader_test3 (id)
             ) $self->{innodb}
         },
 
@@ -545,8 +587,8 @@ sub create {
                 Id2 INTEGER,
                 loader_test2 INTEGER,
                 dat VARCHAR(8),
-                FOREIGN KEY (loader_test2) REFERENCES loader_test2 (id),
-                FOREIGN KEY (id, Id2 ) REFERENCES loader_test5 (id1,iD2)
+                FOREIGN KEY (loader_test2)  REFERENCES loader_test2 (id),
+                FOREIGN KEY(id,Id2) REFERENCES loader_test5 (id1,iD2)
             ) $self->{innodb}
         },
 
@@ -734,7 +776,7 @@ sub create {
         },
 
         q{ INSERT INTO loader_test15 (id,loader_test14) VALUES (1,123) },
-   );
+    );
 
     $self->drop_tables;
 
@@ -807,6 +849,8 @@ sub drop_tables {
         loader_test14
     /;
 
+    my @tables_rescan = qw/ loader_test25 /;
+
     my $drop_fk_mysql =
         q{ALTER TABLE loader_test10 DROP FOREIGN KEY loader_test11_fk;};
 
@@ -833,6 +877,9 @@ sub drop_tables {
             $dbh->do("DROP TABLE $_") for (@tables_implicit_rels);
         }
     }
+    unless($self->{vendor} =~ /sqlite/i) {
+        $dbh->do("DROP TABLE $_") for (@tables_rescan);
+    }
     $dbh->do("DROP TABLE $_") for (@tables);
     $dbh->disconnect;
 }