X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F92storage.t;h=127b66c0485508b4bbad3d032497accf50b96c5a;hb=5c1d82d2851b1a019720b111321a3a05ad554fc0;hp=67a594f2a46cb2b7578ca31f6e00ab88d45dfb7f;hpb=efe6365bc168c25205c527e0e088bd7229a3575b;p=dbsrgits%2FDBIx-Class.git diff --git a/t/92storage.t b/t/92storage.t index 67a594f..127b66c04 100644 --- a/t/92storage.t +++ b/t/92storage.t @@ -5,11 +5,69 @@ use Test::More; use lib qw(t/lib); use DBICTest; -plan tests => 1; +{ + package DBICTest::ExplodingStorage::Sth; + use strict; + use warnings; + + sub execute { die "Kablammo!" } + + sub bind_param {} + + package DBICTest::ExplodingStorage; + use strict; + use warnings; + use base 'DBIx::Class::Storage::DBI::SQLite'; + + my $count = 0; + sub sth { + my ($self, $sql) = @_; + return bless {}, "DBICTest::ExplodingStorage::Sth" unless $count++; + return $self->next::method($sql); + } + + sub connected { + return 0 if $count == 1; + return shift->next::method(@_); + } +} + +plan tests => 6; my $schema = DBICTest->init_schema(); is( ref($schema->storage), 'DBIx::Class::Storage::DBI::SQLite', 'Storage reblessed correctly into DBIx::Class::Storage::DBI::SQLite' ); +my $storage = $schema->storage; +$storage->ensure_connected; + +eval { + $schema->storage->throw_exception('test_exception_42'); +}; +like($@, qr/\btest_exception_42\b/, 'basic exception'); + +eval { + $schema->resultset('CD')->search_literal('broken +%$#$1')->all; +}; +like($@, qr/prepare_cached failed/, 'exception via DBI->HandleError, etc'); + +bless $storage, "DBICTest::ExplodingStorage"; +$schema->storage($storage); + +eval { + $schema->resultset('Artist')->create({ name => "Exploding Sheep" }); +}; + +is($@, "", "Exploding \$sth->execute was caught"); + +is(1, $schema->resultset('Artist')->search({name => "Exploding Sheep" })->count, + "And the STH was retired"); + +my $info = { on_connect_do => [] }; + +$storage->connect_info(['foo','bar','baz',$info]); + +ok(exists($info->{on_connect_do}), q{Didn't kill key passed to storage}); + 1;