61610ba9e35f5f0790897b1aec49d9a2cf09e279
[dbsrgits/DBIx-Class.git] / t / storage / deploy.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6 use Path::Class qw/dir/;
7
8 use lib qw(t/lib);
9 use DBICTest;
10
11 BEGIN {
12   require DBIx::Class;
13   plan skip_all =>
14       'Test needs ' . DBIx::Class::Optional::Dependencies->req_missing_for ('deploy')
15     unless DBIx::Class::Optional::Dependencies->req_ok_for ('deploy')
16 }
17
18 local $ENV{DBI_DSN};
19
20 # this is how maint/gen_schema did it (connect() to force a storage
21 # instance, but no conninfo)
22 # there ought to be more code like this in the wild
23 like(
24   DBICTest::Schema->connect->deployment_statements('SQLite'),
25   qr/\bCREATE TABLE artist\b/i  # ensure quoting *is* disabled
26 );
27
28 lives_ok( sub {
29     my $parse_schema = DBICTest->init_schema(no_deploy => 1);
30     $parse_schema->deploy({},'t/lib/test_deploy');
31     $parse_schema->resultset("Artist")->all();
32 }, 'artist table deployed correctly' );
33
34 my $schema = DBICTest->init_schema( quote_names => 1 );
35
36 my $var = dir ("t/var/ddl_dir-$$");
37 $var->mkpath unless -d $var;
38
39 my $test_dir_1 = $var->subdir ('test1', 'foo', 'bar' );
40 $test_dir_1->rmtree if -d $test_dir_1;
41 $schema->create_ddl_dir( [qw(SQLite MySQL)], 1, $test_dir_1 );
42
43 ok( -d $test_dir_1, 'create_ddl_dir did a make_path on its target dir' );
44 ok( scalar( glob $test_dir_1.'/*.sql' ), 'there are sql files in there' );
45
46 my $less = $schema->clone;
47 $less->unregister_source('BindType');
48 $less->create_ddl_dir( [qw(SQLite MySQL)], 2, $test_dir_1, 1 );
49
50 for (
51   [ SQLite => '"' ],
52   [ MySQL => '`' ],
53 ) {
54   my $type = $_->[0];
55   my $q = quotemeta($_->[1]);
56
57   for my $f (map { $test_dir_1->file("DBICTest-Schema-${_}-$type.sql") } qw(1 2) ) {
58     like scalar $f->slurp, qr/CREATE TABLE ${q}track${q}/, "Proper quoting in $f";
59   }
60
61   {
62     local $TODO = 'SQLT::Producer::MySQL has no knowledge of the mythical beast of quoting...'
63       if $type eq 'MySQL';
64
65     my $f = $test_dir_1->file("DBICTest-Schema-1-2-$type.sql");
66     like scalar $f->slurp, qr/DROP TABLE ${q}bindtype_test${q}/, "Proper quoting in diff $f";
67   }
68 }
69
70 {
71   local $TODO = 'we should probably add some tests here for actual deployability of the DDL?';
72   ok( 0 );
73 }
74
75 END {
76   $var->rmtree;
77 }
78
79 done_testing;