From ca58d1936c279fae5c7192b3d01635d08f031f18 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 12 Jul 2017 17:24:24 -0300 Subject: [PATCH] Bug 18826: rollback transaction for api tests The holds.t tests for the REST api do no rollback properly and modify the DB (no cleanup). This comes from a bug caused by SessionStorage = mysql (default) The error is: "rollback ineffective with AutoCommit enabled" Test plan: select count(*) from borrowers; prove t/db_dependent/api/v1/holds.t select count(*) from borrowers; => The number of entry must be the same before and after the tests have been executed Signed-off-by: Josef Moravec Signed-off-by: Nick Clemens --- t/db_dependent/api/v1/holds.t | 14 +++++++++----- t/db_dependent/api/v1/patrons.t | 8 ++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/t/db_dependent/api/v1/holds.t b/t/db_dependent/api/v1/holds.t index 0812464..d1f7978 100644 --- a/t/db_dependent/api/v1/holds.t +++ b/t/db_dependent/api/v1/holds.t @@ -20,6 +20,7 @@ use Modern::Perl; use Test::More tests => 4; use Test::Mojo; use t::lib::TestBuilder; +use t::lib::Mocks; use DateTime; @@ -32,11 +33,14 @@ use Koha::Biblioitems; use Koha::Items; use Koha::Patrons; +my $schema = Koha::Database->new->schema; my $builder = t::lib::TestBuilder->new(); -my $dbh = C4::Context->dbh; -$dbh->{AutoCommit} = 0; -$dbh->{RaiseError} = 1; +$schema->storage->txn_begin; + +# FIXME: sessionStorage defaults to mysql, but it seems to break transaction handling +# this affects the other REST api tests +t::lib::Mocks::mock_preference( 'SessionStorage', 'tmp' ); $ENV{REMOTE_ADDR} = '127.0.0.1'; my $t = Test::Mojo->new('Koha::REST::V1'); @@ -114,6 +118,7 @@ my $itemnumber = create_item($biblionumber, 'TEST000001'); my $biblionumber2 = create_biblio('RESTful Web APIs'); my $itemnumber2 = create_item($biblionumber2, 'TEST000002'); +my $dbh = C4::Context->dbh; $dbh->do('DELETE FROM reserves'); $dbh->do('DELETE FROM issuingrules'); $dbh->do(q{ @@ -304,8 +309,7 @@ subtest "Test endpoints with permission" => sub { ->json_like('/error', qr/tooManyReserves/); }; - -$dbh->rollback; +$schema->storage->txn_rollback; sub create_biblio { my ($title) = @_; diff --git a/t/db_dependent/api/v1/patrons.t b/t/db_dependent/api/v1/patrons.t index 6b3f51f..705a2f8 100644 --- a/t/db_dependent/api/v1/patrons.t +++ b/t/db_dependent/api/v1/patrons.t @@ -20,6 +20,7 @@ use Modern::Perl; use Test::More tests => 21; use Test::Mojo; use t::lib::TestBuilder; +use t::lib::Mocks; use C4::Auth; use C4::Context; @@ -27,11 +28,10 @@ use C4::Context; use Koha::Database; use Koha::Patron; +my $schema = Koha::Database->new->schema; my $builder = t::lib::TestBuilder->new(); -my $dbh = C4::Context->dbh; -$dbh->{AutoCommit} = 0; -$dbh->{RaiseError} = 1; +$schema->storage->txn_begin; $ENV{REMOTE_ADDR} = '127.0.0.1'; my $t = Test::Mojo->new('Koha::REST::V1'); @@ -131,4 +131,4 @@ $t->request_ok($tx) ->json_is('/surname' => $borrower->{ surname }) ->json_is('/lost' => 1 ); -$dbh->rollback; +$schema->storage->txn_rollback; -- 2.1.4