factor out filesystem interactions
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / filesystem.t
diff --git a/t/filesystem.t b/t/filesystem.t
new file mode 100644 (file)
index 0000000..e1d8ac2
--- /dev/null
@@ -0,0 +1,193 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Deep;
+
+use lib 't/lib';
+use aliased 'DBIx::Class::DeploymentHandler::Filesystem';
+
+my $fs = Filesystem->new({ script_directory => 't/filesystem' });
+
+my @t = (
+   (map +{ meth => '_ddl_schema_consume_filenames', %$_ },
+   {
+      args => ['MySQL', 1],
+      expected => ['t/filesystem/MySQL/deploy/1/001-auto.sql'],
+   },
+   {
+      args => ['MySQL', 2],
+      expected => ['t/filesystem/MySQL/deploy/2/001-auto.sql'],
+   },
+   {
+      args => ['MySQL', 3],
+      expected => ['t/filesystem/MySQL/deploy/3/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', 1],
+      expected => ['t/filesystem/SQLite/deploy/1/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', 2],
+      expected => ['t/filesystem/SQLite/deploy/2/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', 3],
+      expected => ['t/filesystem/SQLite/deploy/3/001-auto.sql'],
+   }),
+
+   (map +{ meth => '_ddl_schema_produce_filename', %$_ },
+   {
+      args => ['MySQL', 1],
+      expected => 't/filesystem/MySQL/deploy/1/001-auto.sql',
+   },
+   {
+      args => ['MySQL', 2],
+      expected => 't/filesystem/MySQL/deploy/2/001-auto.sql',
+   },
+   {
+      args => ['MySQL', 3],
+      expected => 't/filesystem/MySQL/deploy/3/001-auto.sql',
+   },
+   {
+      args => ['SQLite', 1],
+      expected => 't/filesystem/SQLite/deploy/1/001-auto.sql',
+   },
+   {
+      args => ['SQLite', 2],
+      expected => 't/filesystem/SQLite/deploy/2/001-auto.sql',
+   },
+   {
+      args => ['SQLite', 3],
+      expected => 't/filesystem/SQLite/deploy/3/001-auto.sql',
+   }),
+
+   ( map +{ meth => '_ddl_initialize_consume_filenames', %$_ },
+   {
+      args => ['MySQL', 1],
+      expected => [
+         't/filesystem/MySQL/initialize/1/001-create-database.pl',
+         't/filesystem/MySQL/initialize/1/002-create-users.pl'
+      ],
+   }, {
+      args => ['MySQL', 2],
+      expected => [
+         't/filesystem/MySQL/initialize/2/001-create-database.pl',
+         't/filesystem/MySQL/initialize/2/002-create-users.pl'
+      ],
+   }, {
+      args => ['MySQL', 3],
+      expected => [
+         't/filesystem/MySQL/initialize/3/001-create-database.pl',
+         't/filesystem/MySQL/initialize/3/002-create-users.pl'
+      ],
+   }, {
+      args => ['SQLite', 1],
+      expected => [
+         't/filesystem/SQLite/initialize/1/001-create-database.pl',
+         't/filesystem/SQLite/initialize/1/002-create-users.pl'
+      ],
+   }, {
+      args => ['SQLite', 2],
+      expected => [
+         't/filesystem/SQLite/initialize/2/001-create-database.pl',
+         't/filesystem/SQLite/initialize/2/002-create-users.pl'
+      ],
+   }, {
+      args => ['SQLite', 3],
+      expected => [
+         't/filesystem/SQLite/initialize/3/001-create-database.pl',
+         't/filesystem/SQLite/initialize/3/002-create-users.pl'
+      ],
+   }),
+
+   ( map +{ meth => '_ddl_protoschema_deploy_consume_filenames', %$_ },
+   {
+      args => [1],
+      expected => ['t/filesystem/_source/deploy/1/001-auto.yml'],
+   }, {
+      args => [2],
+      expected => ['t/filesystem/_source/deploy/2/001-auto.yml'],
+   }, {
+      args => [3],
+      expected => ['t/filesystem/_source/deploy/3/001-auto.yml'],
+   }),
+
+   ( map +{ meth => '_ddl_protoschema_upgrade_consume_filenames', %$_ },
+   {
+      args => [[1,2]],
+      expected => ['t/filesystem/_preprocess_schema/upgrade/1-2/001-rename-columns.pl'],
+   }, {
+      args => [[2,3]],
+      expected => ['t/filesystem/_preprocess_schema/upgrade/2-3/001-rename-columns.pl'],
+   }),
+
+   ( map +{ meth => '_ddl_protoschema_downgrade_consume_filenames', %$_ },
+   {
+      args => [[2,1]],
+      expected => ['t/filesystem/_preprocess_schema/downgrade/2-1/001-rename-columns.pl'],
+   }, {
+      args => [[3,2]],
+      expected => ['t/filesystem/_preprocess_schema/downgrade/3-2/001-rename-columns.pl'],
+   }),
+
+   ( map +{ meth => '_ddl_protoschema_produce_filename', %$_ },
+   {
+      args => [1],
+      expected => 't/filesystem/_source/deploy/1/001-auto.yml',
+   }, {
+      args => [2],
+      expected => 't/filesystem/_source/deploy/2/001-auto.yml',
+   }, {
+      args => [3],
+      expected => 't/filesystem/_source/deploy/3/001-auto.yml',
+   }),
+
+   ( map +{ meth => '_ddl_schema_upgrade_consume_filenames', %$_ },
+   {
+      args => ['MySQL', [1,2]],
+      expected => ['t/filesystem/MySQL/upgrade/1-2/001-auto.sql'],
+   },
+   {
+      args => ['MySQL', [2,3]],
+      expected => ['t/filesystem/MySQL/upgrade/2-3/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', [1,2]],
+      expected => ['t/filesystem/SQLite/upgrade/1-2/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', [2,3]],
+      expected => ['t/filesystem/SQLite/upgrade/2-3/001-auto.sql'],
+   }),
+
+   ( map +{ meth => '_ddl_schema_downgrade_consume_filenames', %$_ },
+   {
+      args => ['MySQL', [2,1]],
+      expected => ['t/filesystem/MySQL/downgrade/2-1/001-auto.sql'],
+   },
+   {
+      args => ['MySQL', [3,2]],
+      expected => ['t/filesystem/MySQL/downgrade/3-2/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', [2,1]],
+      expected => ['t/filesystem/SQLite/downgrade/2-1/001-auto.sql'],
+   },
+   {
+      args => ['SQLite', [3,2]],
+      expected => ['t/filesystem/SQLite/downgrade/3-2/001-auto.sql'],
+   }),
+);
+
+for (@t) {
+   my $m = $_->{meth};
+   cmp_deeply
+      $fs->$m(@{$_->{args}}),
+      $_->{expected},
+      "$m(" . join (', ', map { ref $_ ? '[' . join(', ', @$_) . ']' : $_ } @{$_->{args}}) . ')';
+}
+
+done_testing;