helpful error wrapping for invalid source usage
[dbsrgits/DBIx-Class-DeploymentHandler.git] / t / deploy_methods / script-helpers.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::ScriptHelpers ':all';;
8 use Test::Fatal;
9
10 use lib 't/lib';
11
12 use DBICVersion_v1;
13 use DBICDHTest;
14
15 my $dbh = DBICDHTest->dbh;
16 my @connection = (sub { $dbh }, { ignore_version => 1 });
17 my $schema = DBICVersion::Schema->connect(@connection);
18 $schema->deploy;
19
20 subtest dbh => sub {
21    my $ran;
22    dbh(sub {
23       my ($dbh, $versions) = @_;
24
25       $ran = 1;
26
27       is($dbh, $schema->storage->dbh, 'dbh is correctly reused');
28       is_deeply $versions, [1,2], 'version correctly passed';
29       isa_ok($dbh, 'DBI::db');
30    })->($schema, [1,2]);
31
32    ok $ran, 'coderef ran';
33 };
34
35 subtest schema_from_schema_loader => sub {
36    use Test::Requires;
37    test_requires('DBIx::Class::Schema::Loader');
38    my $build_sl_test = sub {
39       my @connection = @_;
40
41       return sub {
42          my $ran;
43          my $outer_schema = DBICVersion::Schema->connect(@connection);
44          $outer_schema->deploy;
45          schema_from_schema_loader({ naming => 'v4' }, sub {
46             my ($schema, $versions) = @_;
47
48             $ran = 1;
49
50             is(
51                $outer_schema->storage->dbh,
52                $schema->storage->dbh,
53                'dbh is correctly reused',
54             );
55             is_deeply $versions, [2,3], 'version correctly passed';
56             like(ref $schema, qr/SHSchema::\d+/, 'schema has expected type');
57             isa_ok($schema, 'DBIx::Class::Schema', 'and schema is not totally worthless -');
58          })->($outer_schema, [2,3]);
59
60          ok $ran, 'coderef ran';
61       }
62    };
63
64    subtest 'sub { $dbh }, ...' => $build_sl_test->(
65       sub { DBICDHTest->dbh },
66       { ignore_version => 1 },
67    );
68    subtest '$dsn, $user, $pass, ...' => $build_sl_test->(
69       'dbi:SQLite::memory:', undef, undef,
70       { RaiseError => 1 },
71       { ignore_version => 1 }
72    );
73
74    subtest '({ dsn => ..., ... })' => $build_sl_test->({
75       dsn => 'dbi:SQLite::memory:',
76       user => undef,
77       password => undef,
78       RaiseError => 1,
79       ignore_version => 1,
80    });
81
82    subtest '({ dbh_maker => ..., ... })' => $build_sl_test->({
83       dbh_maker => sub { DBICDHTest->dbh },
84       RaiseError => 1,
85       ignore_version => 1,
86    });
87
88    subtest '({ dbh_maker => ..., ... })' => $build_sl_test->({
89       dbh_maker => sub { DBICDHTest->dbh },
90       RaiseError => 1,
91       ignore_version => 1,
92    });
93
94    subtest 'error handling' => sub {
95       my $outer_schema = DBICVersion::Schema->connect(
96          'dbi:SQLite::memory:', undef, undef,
97          { RaiseError => 1 },
98          { ignore_version => 1 },
99       );
100       $outer_schema->deploy;
101       like(exception {
102          schema_from_schema_loader({ naming => 'v4' }, sub {
103             my ($schema, $versions) = @_;
104
105             $schema->resultset('foo')
106          })->($outer_schema, [2,3]);
107       }, qr/Foo <== Possible Match/, 'correct error');
108    };
109 };
110
111 done_testing;
112