Bug 19821: Run tests on a separate database
Running the tests on the same database as the one used for dev has some
drawbacks:
- Everybody has different data, so we cannot make any assumptions about
data in tests and it can make tests fail for non-obvious reasons.
- Tests have to clean up every change to the database using SQL
transactions, so we cannot write testable code that use transactions
(AFAIK)
- Transactions in tests happen to be committed sometimes, resulting in
garbage data added to the dev database
This patch provides a .proverc file that will load t/lib/Bootstrap.pm
before the tests are run.
t/lib/Bootstrap.pm is responsible for recreating a fresh database and
telling the test scripts to use it.
To use it, just run prove normally from the root directory of Koha.
By default, the database is 'koha_test' and it's created using MARC21
SQL files, it can be changed by running:
prove --norc \
--Mt::lib::Bootstrap=database,koha_test,marcflavour,UNIMARC
Test plan:
1. Apply bug 19185 which will also apply these patches
2. In the DBMS run `select count(*) from koha_kohadev.borrowers;`
(adapt if your usual koha DB isn't koha_kohadev)
3. Run the test plan of bug 19185 and during execution of the
installation test, pay attention to the following:
4. List the databases in the DBMS (show databases;) to ensure that
koha_test is created
5. After the test has run, the koha_test database should not be here anymore.
6. In the DBMS run `select count(*) from koha_kohadev.borrowers;`
7. That was to verify that the database you use usually was untouched.
The counts should be the same.
Signed-off-by: Jon Knight <J.P.Knight@lboro.ac.uk>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Bouzid Fergani <bouzid.fergani@inlibro.com>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
e88ee4c1c0
commit
0308261de6
|
|
@ -0,0 +1,72 @@
|
|||
package t::lib::Bootstrap;
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use DBI;
|
||||
use File::Temp qw( tempfile );
|
||||
use XML::LibXML;
|
||||
|
||||
sub import {
|
||||
my ($self, %args) = @_;
|
||||
|
||||
unless (defined $args{database}) {
|
||||
die "Test database is not defined";
|
||||
}
|
||||
|
||||
$args{marcflavour} //= 'MARC21';
|
||||
|
||||
my $xml = XML::LibXML->load_xml(location => $ENV{KOHA_CONF});
|
||||
my $root = $xml->documentElement();
|
||||
my ($databaseElement) = $root->findnodes('//config/database');
|
||||
my $currentDatabase = $databaseElement->textContent();
|
||||
|
||||
if ($currentDatabase eq $args{database}) {
|
||||
die "Test database is the same as database in KOHA_CONF, abort!";
|
||||
}
|
||||
|
||||
$databaseElement->firstChild()->setData($args{database});
|
||||
|
||||
my ($fh, $filename) = tempfile('koha-conf.XXXXXX', TMPDIR => 1, UNLINK => 1);
|
||||
$xml->toFH($fh);
|
||||
|
||||
$ENV{KOHA_CONF} = $filename;
|
||||
|
||||
require C4::Context;
|
||||
C4::Context->import;
|
||||
|
||||
require C4::Installer;
|
||||
C4::Installer->import;
|
||||
|
||||
require C4::Languages;
|
||||
|
||||
my $host = C4::Context->config('hostname');
|
||||
my $port = C4::Context->config('port');
|
||||
my $database = C4::Context->config('database');
|
||||
my $user = C4::Context->config('user');
|
||||
my $pass = C4::Context->config('pass');
|
||||
|
||||
say "Create test database...";
|
||||
|
||||
my $dbh = DBI->connect("dbi:mysql:;host=$host;port=$port", $user, $pass, {
|
||||
RaiseError => 1,
|
||||
PrintError => 0,
|
||||
});
|
||||
|
||||
$dbh->do("DROP DATABASE IF EXISTS $database");
|
||||
$dbh->do("CREATE DATABASE $database");
|
||||
|
||||
my $installer = C4::Installer->new();
|
||||
$installer->load_db_schema();
|
||||
$installer->set_marcflavour_syspref($args{marcflavour});
|
||||
my (undef, $fwklist) = $installer->marc_framework_sql_list('en', $args{marcflavour});
|
||||
my @frameworks;
|
||||
foreach my $fwk (@$fwklist) {
|
||||
foreach my $framework (@{ $fwk->{frameworks} }) {
|
||||
push @frameworks, $framework->{fwkfile};
|
||||
}
|
||||
}
|
||||
my $all_languages = C4::Languages::getAllLanguages();
|
||||
$installer->load_sql_in_order($all_languages, @frameworks);
|
||||
}
|
||||
|
||||
1;
|
||||
Loading…
Reference in New Issue