test cases for recent changes and test DBs other than mysql
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / mysql / basic.t
diff --git a/t/mysql/basic.t b/t/mysql/basic.t
new file mode 100644 (file)
index 0000000..7ace92a
--- /dev/null
@@ -0,0 +1,119 @@
+#!/usr/bin/env perl
+
+use warnings;
+use strict;
+use lib 't/lib';
+
+use Test::More;
+use Test::Requires qw(Test::postgresql);
+use Test::Requires qw(Test::mysqld);
+use File::Spec::Functions 'catdir', 'catfile';
+use File::Path 'remove_tree';
+use DBIx::Class::DeploymentHandler;
+use DBICDHTest;
+
+
+VERSION1: {
+  ok my $testdb = build_test_mysql(),
+    'good test db';
+
+  my $dbh = DBI->connect("DBI:mysql:test;mysql_socket=${\$testdb->base_dir}/tmp/mysql.sock",'root','');
+
+  use_ok 'DBICVersion_v1';
+  $DBICVersion::Schema::VERSION = 1;
+  ok my $schema = DBICVersion::Schema->connect(sub { $dbh }),
+    'got schema';
+
+  ok my $dbic_dh = build_dh($schema),
+    'got dbicdh';
+
+  $dbic_dh->prepare_install;
+  $dbic_dh->install;
+
+  is $dbic_dh->database_version, 1, 'correct db version';
+}
+
+VERSION2: {
+  ok my $testdb = build_test_mysql(),
+    'good test db';
+
+  my $dbh = DBI->connect("DBI:mysql:test;mysql_socket=${\$testdb->base_dir}/tmp/mysql.sock",'root','');
+
+  use_ok 'DBICVersion_v2';
+  $DBICVersion::Schema::VERSION = 2;
+  ok my $schema = DBICVersion::Schema->connect(sub { $dbh }),
+    'got schema';
+
+  ok my $dbic_dh = build_dh($schema,1),
+    'got dbicdh';
+
+  $dbic_dh->prepare_install();
+  $dbic_dh->prepare_upgrade();
+  $dbic_dh->prepare_downgrade();
+  $dbic_dh->upgrade;
+
+  is $dbic_dh->database_version, 2, 'correct db version';
+
+}
+
+ok -d catdir('t','share','var','mysql-deploy','MySQL','downgrade','2-1'),
+  'reasonable defaults properly creates a downgrade';
+
+VERSION1FORCE: {
+
+  remove_tree catdir('t','share','var','mysql');
+
+  ok my $testdb = build_test_mysql(),
+    'good test db';
+
+  my $dbh = DBI->connect("DBI:mysql:test;mysql_socket=${\$testdb->base_dir}/tmp/mysql.sock",'root','');
+
+  use_ok 'DBICVersion_v2';
+  $DBICVersion::Schema::VERSION = 2;
+  ok my $schema = DBICVersion::Schema->connect(sub { $dbh }),
+    'got schema';
+
+  my $dbic_dh = DBIx::Class::DeploymentHandler->new({
+    script_directory => catdir('t','share','var','mysql-deploy'),
+    to_version => 1,
+    schema => $schema,
+    databases => ['MySQL']});
+
+  $dbic_dh->install;
+
+  is $dbic_dh->database_version, 1, 'correct db version';
+}
+
+done_testing();
+
+sub build_dh {
+  DBIx::Class::DeploymentHandler->new({
+    script_directory => catdir('t','share','var','mysql-deploy'),
+    schema => shift,
+    databases => ['MySQL']});
+}
+
+sub build_test_mysql {
+  my $base_dir = catdir('t','share','var','mysql');
+  my $auto_start = -d $base_dir ? 1:2;
+  my %config = (
+    base_dir => $base_dir,
+    auto_start => $auto_start);
+
+  return Test::mysqld->new(
+    auto_start => $auto_start,
+    base_dir => $base_dir);
+
+
+  if(my $testdb = Test::mysqld->new(%config)) {
+    return $testdb;
+  } else {
+    die $Test::mysqld::errstr;
+  }
+}
+
+END {
+  remove_tree catdir('t','share','var','mysql');
+  remove_tree catdir('t','share','var','mysql-deploy');
+}
+