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)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 24 Jul 2017 16:14:55 +0000 (13:14 -0300)
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>
t/db_dependent/api/v1/holds.t
t/db_dependent/api/v1/patrons.t

index 0812464..d1f7978 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;
 
@@ -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) = @_;
index 6b3f51f..705a2f8 100644 (file)
@@ -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;