fix and regression test for RT #62642
[dbsrgits/DBIx-Class.git] / t / storage / on_connect_do.t
CommitLineData
579ca3f7 1use strict;
2use warnings;
3
00f57441 4use Test::More tests => 12;
579ca3f7 5
6use lib qw(t/lib);
7use base 'DBICTest';
7c9aa29f 8require DBI;
579ca3f7 9
10
11my $schema = DBICTest->init_schema(
12 no_connect => 1,
13 no_deploy => 1,
14);
00f57441 15
16ok $schema->connection(
17 DBICTest->_database,
18 {
19 on_connect_do => 'CREATE TABLE TEST_empty (id INTEGER)',
20 },
21), 'connection()';
22
23is_deeply (
24 $schema->storage->dbh->selectall_arrayref('SELECT * FROM TEST_empty'),
25 [],
26 'string version on_connect_do() worked'
27);
28
29$schema->storage->disconnect;
30
579ca3f7 31ok $schema->connection(
7c9aa29f 32 sub { DBI->connect(DBICTest->_database) },
579ca3f7 33 {
1bd1640b 34 on_connect_do => [
35 'CREATE TABLE TEST_empty (id INTEGER)',
36 [ 'INSERT INTO TEST_empty VALUES (?)', {}, 2 ],
1dafdb2a 37 \&insert_from_subref,
1bd1640b 38 ],
579ca3f7 39 on_disconnect_do =>
40 [\&check_exists, 'DROP TABLE TEST_empty', \&check_dropped],
41 },
42), 'connection()';
43
00f57441 44is_deeply (
1bd1640b 45 $schema->storage->dbh->selectall_arrayref('SELECT * FROM TEST_empty'),
1dafdb2a 46 [ [ 2 ], [ 3 ], [ 7 ] ],
00f57441 47 'on_connect_do() worked'
48);
579ca3f7 49eval { $schema->storage->dbh->do('SELECT 1 FROM TEST_nonexistent'); };
50ok $@, 'Searching for nonexistent table dies';
51
52$schema->storage->disconnect();
53
abe38018 54my($connected, $disconnected, @cb_args);
6d2e7a96 55ok $schema->connection(
56 DBICTest->_database,
57 {
abe38018 58 on_connect_do => sub { $connected = 1; @cb_args = @_; },
6d2e7a96 59 on_disconnect_do => sub { $disconnected = 1 },
60 },
61), 'second connection()';
62$schema->storage->dbh->do('SELECT 1');
63ok $connected, 'on_connect_do() called after connect()';
64ok ! $disconnected, 'on_disconnect_do() not called after connect()';
65$schema->storage->disconnect();
66ok $disconnected, 'on_disconnect_do() called after disconnect()';
67
abe38018 68isa_ok($cb_args[0], 'DBIx::Class::Storage', 'first arg to on_connect_do hook');
6d2e7a96 69
579ca3f7 70sub check_exists {
71 my $storage = shift;
72 ok $storage->dbh->do('SELECT 1 FROM TEST_empty'), 'Table still exists';
1dafdb2a 73 return;
579ca3f7 74}
75
76sub check_dropped {
77 my $storage = shift;
78 eval { $storage->dbh->do('SELECT 1 FROM TEST_empty'); };
79 ok $@, 'Reading from dropped table fails';
1dafdb2a 80 return;
81}
82
83sub insert_from_subref {
84 my $storage = shift;
85 return [
86 [ 'INSERT INTO TEST_empty VALUES (?)', {}, 3 ],
87 'INSERT INTO TEST_empty VALUES (7)',
88 ];
579ca3f7 89}