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