Bug 18826: rollback transaction for api tests
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 12 Jul 2017 20:24:24 +0000 (17:24 -0300)
committerKatrin Fischer <katrin.fischer.83@web.de>
Thu, 27 Jul 2017 23:18:15 +0000 (01:18 +0200)
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 <josef.moravec@gmail.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
(cherry picked from commit d5dc473382ccfa118e78e91507384245ce0dcfcb)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit da0ed1cba584a7eb182876d75ccd535bbd5d5b35)
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

t/db_dependent/api/v1/holds.t
t/db_dependent/api/v1/patrons.t

index c7ec7f8..4e39473 100644 (file)
@@ -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;
 
@@ -31,11 +32,14 @@ use Koha::Biblios;
 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');
@@ -113,6 +117,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{
@@ -303,8 +308,7 @@ subtest "Test endpoints with permission" => sub {
       ->json_like('/error', qr/tooManyReserves/);
 };
 
-
-$dbh->rollback;
+$schema->storage->txn_rollback;
 
 sub create_biblio {
     my ($title) = @_;
index f4b9410..a5d03e3 100644 (file)
@@ -20,6 +20,7 @@ use Modern::Perl;
 use Test::More tests => 20;
 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');
@@ -129,4 +129,4 @@ $t->request_ok($tx)
   ->json_is('/borrowernumber' => $borrower->{ borrowernumber })
   ->json_is('/surname' => $borrower->{ surname });
 
-$dbh->rollback;
+$schema->storage->txn_rollback;