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