1use strict;
2use Test::More;
3
4#----------------------------------------------------------------------
5# Test database failures
6#----------------------------------------------------------------------
7
8BEGIN {
9	eval "use DBD::SQLite";
10	plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 7);
11}
12
13use lib 't/testlib';
14use Film;
15
16Film->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/update.*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
47if (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
58