fe41b055e4e1d22cc7cd2c2c4499a2dd9255c143
[dbsrgits/DBIx-Class.git] / t / cdbi-t / 98-failure.t
1 use strict;
2 use Test::More;
3
4 #----------------------------------------------------------------------
5 # Test database failures
6 #----------------------------------------------------------------------
7
8 BEGIN {
9         eval "use DBD::SQLite";
10         plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 7);
11 }
12
13 use lib 't/testlib';
14 use Film;
15
16 Film->create_test_film;
17
18 {
19         my $btaste = Film->retrieve('Bad Taste');
20         isa_ok $btaste, 'Film', "We have Bad Taste";
21         {
22                 no warnings 'redefine';
23                 local *DBIx::ContextualFetch::st::execute = sub { die "Database died" };
24                 eval { $btaste->delete };
25                 ::like $@, qr/Database died/s, "We failed";
26         }
27         my $still = Film->retrieve('Bad Taste');
28         isa_ok $btaste, 'Film', "We still have Bad Taste";
29 }
30
31 {
32         my $btaste = Film->retrieve('Bad Taste');
33         isa_ok $btaste, 'Film', "We have Bad Taste";
34         $btaste->numexplodingsheep(10);
35         {
36                 no warnings 'redefine';
37                 local *DBIx::ContextualFetch::st::execute = sub { die "Database died" };
38                 eval { $btaste->update };
39                 ::like $@, qr/Database died/s, "We failed";
40         }
41         $btaste->discard_changes;
42         my $still = Film->retrieve('Bad Taste');
43         isa_ok $btaste, 'Film', "We still have Bad Taste";
44         is $btaste->numexplodingsheep, 1, "with 1 sheep";
45 }
46
47 if (0) {
48         my $sheep = Film->maximum_value_of('numexplodingsheep');
49         is $sheep, 1, "1 exploding sheep";
50         {
51                 local *DBIx::ContextualFetch::st::execute = sub { die "Database died" };
52                 my $sheep = eval { Film->maximum_value_of('numexplodingsheep') };
53                 ::like $@, qr/select.*Database died/s,
54                         "Handle database death in single value select";
55         }
56 }
57