Commit | Line | Data |
86a51471 |
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: |