Commit | Line | Data |
---|---|---|
a4b2f17b | 1 | use strict; |
a4b2f17b | 2 | use warnings; |
3 | ||
56166f36 | 4 | use Test::More; |
5 | use Test::Warn; | |
6 | use Test::Exception; | |
a4b2f17b | 7 | |
8 | use lib qw(t/lib); | |
a4b2f17b | 9 | use_ok( 'DBICTest' ); |
a4b2f17b | 10 | use_ok( 'DBICTest::Schema' ); |
56166f36 | 11 | |
e60dc79f | 12 | my $schema = DBICTest->init_schema; |
a4b2f17b | 13 | |
56166f36 | 14 | warnings_are ( sub { |
b720efd1 | 15 | throws_ok ( |
16 | sub { | |
17 | $schema->resultset('CD')->create({ title => 'vacation in antarctica' }) | |
18 | }, | |
0007aedf | 19 | qr/DBI Exception.+constraint failed.+cd\.artist.+NULL/s |
b720efd1 | 20 | ); # as opposed to some other error |
56166f36 | 21 | }, [], 'No warnings besides exception' ); |
a4b2f17b | 22 | |
b720efd1 | 23 | my $dbh = $schema->storage->dbh; |
24 | ||
25 | throws_ok ( | |
26 | sub { | |
27 | $dbh->do ('INSERT INTO nonexistent_table VALUES (1)') | |
28 | }, | |
0007aedf | 29 | qr/DBI Exception.+no such table.+nonexistent_table/s, |
b720efd1 | 30 | 'DBI exceptions properly handled by dbic-installed callback' |
31 | ); | |
32 | ||
68fe9141 | 33 | # This usage is a bit unusual but it was actually seen in the wild |
b720efd1 | 34 | # destruction of everything except the $dbh should use the proper |
35 | # exception fallback: | |
36 | ||
b720efd1 | 37 | { |
b720efd1 | 38 | undef ($schema); |
39 | throws_ok ( | |
40 | sub { | |
41 | $dbh->do ('INSERT INTO nonexistent_table VALUES (1)') | |
42 | }, | |
0007aedf | 43 | qr/DBI Exception.+unhandled by DBIC.+no such table.+nonexistent_table/s, |
b720efd1 | 44 | 'callback works after $schema is gone' |
45 | ); | |
46 | } | |
47 | ||
56166f36 | 48 | done_testing; |