51541ac8132489342f0b8de0fd8662e8badd54a9
[dbsrgits/DBIx-Class.git] / t / 752sqlite.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6 use lib qw(t/lib);
7 use DBICTest;
8
9 my $schema = DBICTest->init_schema(auto_savepoint => 1);
10
11 my $ars = $schema->resultset('Artist');
12
13 # test two-phase commit and inner transaction rollback from nested transactions
14 $schema->txn_do(sub {
15   $ars->create({ name => 'in_outer_transaction' });
16   $schema->txn_do(sub {
17     $ars->create({ name => 'in_inner_transaction' });
18   });
19   ok($ars->search({ name => 'in_inner_transaction' })->first,
20     'commit from inner transaction visible in outer transaction');
21   throws_ok {
22     $schema->txn_do(sub {
23       $ars->create({ name => 'in_inner_transaction_rolling_back' });
24       die 'rolling back inner transaction';
25     });
26   } qr/rolling back inner transaction/, 'inner transaction rollback executed';
27   $ars->create({ name => 'in_outer_transaction2' });
28 });
29 ok($ars->search({ name => 'in_outer_transaction' })->first,
30   'commit from outer transaction');
31 ok($ars->search({ name => 'in_outer_transaction2' })->first,
32   'second commit from outer transaction');
33 ok($ars->search({ name => 'in_inner_transaction' })->first,
34   'commit from inner transaction');
35 is $ars->search({ name => 'in_inner_transaction_rolling_back' })->first,
36   undef,
37   'rollback from inner transaction';
38
39 done_testing;
40
41 # vim:sts=2 sw=2: