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