Merge 'trunk' into 'replication_dedux'
[dbsrgits/DBIx-Class.git] / t / 92storage_on_connect_do.t
CommitLineData
579ca3f7 1use strict;
2use warnings;
3
6d2e7a96 4use Test::More tests => 9;
579ca3f7 5
6use lib qw(t/lib);
7use base 'DBICTest';
8
9
10my $schema = DBICTest->init_schema(
11 no_connect => 1,
12 no_deploy => 1,
13);
14ok $schema->connection(
15 DBICTest->_database,
16 {
1bd1640b 17 on_connect_do => [
18 'CREATE TABLE TEST_empty (id INTEGER)',
19 [ 'INSERT INTO TEST_empty VALUES (?)', {}, 2 ],
1dafdb2a 20 \&insert_from_subref,
1bd1640b 21 ],
579ca3f7 22 on_disconnect_do =>
23 [\&check_exists, 'DROP TABLE TEST_empty', \&check_dropped],
24 },
25), 'connection()';
26
1bd1640b 27is_deeply
28 $schema->storage->dbh->selectall_arrayref('SELECT * FROM TEST_empty'),
1dafdb2a 29 [ [ 2 ], [ 3 ], [ 7 ] ],
1bd1640b 30 'on_connect_do() worked';
579ca3f7 31eval { $schema->storage->dbh->do('SELECT 1 FROM TEST_nonexistent'); };
32ok $@, 'Searching for nonexistent table dies';
33
34$schema->storage->disconnect();
35
6d2e7a96 36my($connected, $disconnected);
37ok $schema->connection(
38 DBICTest->_database,
39 {
40 on_connect_do => sub { $connected = 1 },
41 on_disconnect_do => sub { $disconnected = 1 },
42 },
43), 'second connection()';
44$schema->storage->dbh->do('SELECT 1');
45ok $connected, 'on_connect_do() called after connect()';
46ok ! $disconnected, 'on_disconnect_do() not called after connect()';
47$schema->storage->disconnect();
48ok $disconnected, 'on_disconnect_do() called after disconnect()';
49
50
579ca3f7 51sub check_exists {
52 my $storage = shift;
53 ok $storage->dbh->do('SELECT 1 FROM TEST_empty'), 'Table still exists';
1dafdb2a 54 return;
579ca3f7 55}
56
57sub check_dropped {
58 my $storage = shift;
59 eval { $storage->dbh->do('SELECT 1 FROM TEST_empty'); };
60 ok $@, 'Reading from dropped table fails';
1dafdb2a 61 return;
62}
63
64sub insert_from_subref {
65 my $storage = shift;
66 return [
67 [ 'INSERT INTO TEST_empty VALUES (?)', {}, 3 ],
68 'INSERT INTO TEST_empty VALUES (7)',
69 ];
579ca3f7 70}