Commit | Line | Data |
579ca3f7 |
1 | use strict; |
2 | use warnings; |
3 | |
00f57441 |
4 | use Test::More tests => 12; |
579ca3f7 |
5 | |
6 | use lib qw(t/lib); |
7 | use base 'DBICTest'; |
7c9aa29f |
8 | require DBI; |
579ca3f7 |
9 | |
10 | |
11 | my $schema = DBICTest->init_schema( |
12 | no_connect => 1, |
13 | no_deploy => 1, |
14 | ); |
00f57441 |
15 | |
16 | ok $schema->connection( |
17 | DBICTest->_database, |
18 | { |
19 | on_connect_do => 'CREATE TABLE TEST_empty (id INTEGER)', |
20 | }, |
21 | ), 'connection()'; |
22 | |
23 | is_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 |
31 | ok $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 |
44 | is_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 |
49 | eval { $schema->storage->dbh->do('SELECT 1 FROM TEST_nonexistent'); }; |
50 | ok $@, 'Searching for nonexistent table dies'; |
51 | |
52 | $schema->storage->disconnect(); |
53 | |
abe38018 |
54 | my($connected, $disconnected, @cb_args); |
6d2e7a96 |
55 | ok $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'); |
63 | ok $connected, 'on_connect_do() called after connect()'; |
64 | ok ! $disconnected, 'on_disconnect_do() not called after connect()'; |
65 | $schema->storage->disconnect(); |
66 | ok $disconnected, 'on_disconnect_do() called after disconnect()'; |
67 | |
abe38018 |
68 | isa_ok($cb_args[0], 'DBIx::Class::Storage', 'first arg to on_connect_do hook'); |
6d2e7a96 |
69 | |
579ca3f7 |
70 | sub 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 | |
76 | sub 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 | |
83 | sub 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 | } |