tests are a mess, but Versioned.pm should work now
[dbsrgits/DBIx-Class.git] / t / 94versioning.t
index 81245e2..b53fb59 100644 (file)
@@ -2,11 +2,13 @@
 use strict;
 use warnings;
 use Test::More;
+use File::Spec;
+use File::Copy;
 
 BEGIN {
-    eval "use DBD::SQLite; use SQL::Translator;";
+    eval "use DBD::SQLite; use SQL::Translator 0.08;";
     plan $@
-        ? ( skip_all => 'needs DBD::SQLite and SQL::Translator for testing' )
+        ? ( skip_all => 'needs DBD::SQLite and SQL::Translator 0.08 for testing' )
         : ( tests => 6 );
 }
 
@@ -20,28 +22,96 @@ unlink($db_file . "-journal") if -e $db_file . "-journal";
 mkdir("t/var") unless -d "t/var";
 unlink('t/var/DBICVersion-Schema-1.0-SQLite.sql');
 
-my $schema = DBICVersion::Schema->connect("dbi:SQLite:$db_file");
+my $schema_orig = DBICVersion::Schema->connect(
+  "dbi:SQLite:$db_file",
+  undef,
+  undef,
+  { AutoCommit => 1 },
+);
 # $schema->storage->ensure_connected();
 
-is($schema->ddl_filename('SQLite', 't/var', '1.0'), 't/var/DBICVersion-Schema-1.0-SQLite.sql', 'Filename creation working');
-$schema->create_ddl_dir('SQLite', undef, 't/var');
+is($schema_orig->ddl_filename('SQLite', 't/var', '1.0'), File::Spec->catfile('t', 'var', 'DBICVersion-Schema-1.0-SQLite.sql'), 'Filename creation working');
+$schema_orig->create_ddl_dir('SQLite', undef, 't/var');
 
 ok(-f 't/var/DBICVersion-Schema-1.0-SQLite.sql', 'Created DDL file');
 ## do this here or let Versioned.pm do it?
 # $schema->deploy();
 
-my $tvrs = $schema->resultset('Table');
-is($schema->exists($tvrs), 1, 'Created schema from DDL file');
+my $tvrs = $schema_orig->resultset('Table');
+is($schema_orig->_source_exists($tvrs), 1, 'Created schema from DDL file');
 
 eval "use DBICVersionNew";
-my $schema2 = DBICVersion::Schema->connect("dbi:SQLite:$db_file");
+my $schema_new = DBICVersion::Schema->connect(
+  "dbi:SQLite:$db_file",
+  undef,
+  undef,
+  { AutoCommit => 1 },
+);
 
+## create new to pick up filedata for upgrade files we just made (on_connect)
+
+# {
+#   unlink('t/var/DBICVersion-Schema-1.0-2.0-SQLite.sql');
+#   copy('t/var/DBICVersion-Schema-1.0-2.0-SQLite-erroneous.sql', 't/var/DBICVersion-Schema-1.0-2.0-SQLite.sql');
+
+#   my $schema_upgrade = DBICVersion::Schema->connect(
+#                                                     "dbi:SQLite:$db_file",
+#                                                     undef,
+#                                                     undef,
+#                                                     { AutoCommit => 1 },
+#                                                     );
+  
+    
+#   is($schema_upgrade->get_db_version(), '1.0', 'get_db_version ok');
+
+#   eval {
+#     # this will die with errors
+#     $schema_upgrade->upgrade();
+#   };
+#   isnt($@, '', 'dodgy upgrade dies');
+  
+#   eval {
+#     my @results = $schema_upgrade->storage->dbh->do('select VersionName from TestVersion');
+#   };
+#   is($@, '', 'partial upgrade properly rolledback');
+#   is($schema_upgrade->get_db_version(), '1.0', 'db version number not upgraded');
+# }
+
+{
+  unlink('t/var/DBICVersion-Schema-2.0-SQLite.sql');
+  unlink('t/var/DBICVersion-Schema-1.0-2.0-SQLite.sql');
+
+#   $schema_new->create_ddl_dir('SQLite', undef, 't/var', '1.0');
+#   ok(-f 't/var/DBICVersion-Schema-1.0-2.0-SQLite.sql', 'Created DDL upgrade file');
+
+  copy('t/var/DBICVersion-Schema-1.0-2.0-SQLite-proper.sql', 't/var/DBICVersion-Schema-1.0-2.0-SQLite.sql');
+
+  my $schema_upgrade = DBICVersion::Schema->connect(
+                                                    "dbi:SQLite:$db_file",
+                                                    undef,
+                                                    undef,
+                                                    { AutoCommit => 1 },
+                                                    );
+  
+    
+  is($schema_upgrade->get_db_version(), '1.0', 'get_db_version ok');
+
+  eval {
+    # this should be okay
+    $schema_upgrade->upgrade();
+  };
+  is($@, '', 'proper upgrade okay');
+  eval {
+    $schema_upgrade->storage->dbh->do('select NewVersionName from TestVersion');
+  };
+  is($@, '', 'new column created');
+  is($schema_upgrade->get_db_version(), '2.0', 'db version number successfully upgraded');
+}
+
+exit;
+unlink($db_file) if -e $db_file;
+unlink($db_file . "-journal") if -e $db_file . "-journal";
+unlink('t/var/DBICVersion-Schema-1.0-SQLite.sql');
 unlink('t/var/DBICVersion-Schema-2.0-SQLite.sql');
 unlink('t/var/DBICVersion-Schema-1.0-2.0-SQLite.sql');
-$schema2->create_ddl_dir('SQLite', undef, 't/var', '1.0');
-ok(-f 't/var/DBICVersion-Schema-1.0-2.0-SQLite.sql', 'Created DDL upgrade file');
-
-## do this here or let Versioned.pm do it?
-$schema2->upgrade();
-$tvrs = $schema2->resultset('Table');
-is($schema2->exists($tvrs), 1, 'Upgraded schema from DDL file');
+unlink(<t/var/backup/*>);