a6c7ba8519
Check whether a given update should be run when passed the proposed version number. The update will always be run if the proposed version is greater than the current database version and less than or equal to the version returned by C4::Context->final_linear_version (initially set to be equal to the version in kohaversion.pl). The update is also run if the version contains XXX, though this behavior will be changed following the adoption of non-linear updates as implemented in bug 7167. To test: 1) Make sure that the first example database update added by this patch in installer/data/mysql/updatedatabase.pl has a version number one greater than the version of Koha you have installed. 2) Set the Version syspref back one version behind your current version. 3) Navigate to the main page of the staff client, and log in to the installer. 4) Confirm that the update page claims to have rerun the previous update and has displayed the log message: "Upgrade to 3.11.00.XXX done (Bug 9191: You should see this)" but not the log message: "Upgrade to [version number] done (Bug 9191: You shouldn't see this)" Note: the sample database revisions will be removed by the RM before this patch is pushed to master. Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com> works great Signed-off-by: Elliott Davis <elliott@test.bywatersolutions.com> Works as expected. Test plan is great. Code looks to be adherent to standards. Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
124 lines
4.3 KiB
Perl
Executable file
124 lines
4.3 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
#
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Test::More;
|
|
use Test::MockModule;
|
|
use vars qw($debug $koha $dbh $config $ret);
|
|
|
|
BEGIN {
|
|
$debug = $ENV{DEBUG} || 0;
|
|
diag("Note: The overall number of tests may vary by configuration.");
|
|
diag("First we need to check your environmental variables");
|
|
for (qw(KOHA_CONF PERL5LIB)) {
|
|
ok($ret = $ENV{$_}, "ENV{$_} = $ret");
|
|
}
|
|
use_ok('C4::Context');
|
|
use_ok('C4::Utils', qw/ :all /);
|
|
}
|
|
|
|
ok($koha = C4::Context->new, 'C4::Context->new');
|
|
ok($dbh = C4::Context->dbh(), 'Getting dbh from C4::Context');
|
|
ok($ret = C4::Context->KOHAVERSION, ' (function) KOHAVERSION = ' . ($ret||''));
|
|
ok($ret = $koha->KOHAVERSION, ' $koha->KOHAVERSION = ' . ($ret||''));
|
|
ok(
|
|
TransformVersionToNum( C4::Context->final_linear_version ) <=
|
|
TransformVersionToNum( C4::Context->KOHAVERSION ),
|
|
'Final linear version is less than or equal to kohaversion.pl'
|
|
);
|
|
my @keys = keys %$koha;
|
|
diag("Number of keys in \%\$koha: " . scalar @keys);
|
|
our $width = 0;
|
|
if (ok(@keys)) {
|
|
$width = maxwidth(@keys);
|
|
$debug and diag "widest key is $width";
|
|
}
|
|
foreach (sort @keys) {
|
|
ok(exists $koha->{$_},
|
|
'$koha->{' . sprintf('%' . $width . 's', $_) . '} exists '
|
|
. ((defined $koha->{$_}) ? "and is defined." : "but is not defined.")
|
|
);
|
|
}
|
|
diag "Examining defined key values.";
|
|
foreach (grep {defined $koha->{$_}} sort @keys) {
|
|
print "\n";
|
|
hashdump('$koha->{' . sprintf('%' . $width . 's', $_) . '}', $koha->{$_});
|
|
}
|
|
ok($config = $koha->{config}, 'Getting $koha->{config} ');
|
|
|
|
diag "Testing syspref caching.";
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
$dbh->disconnect;
|
|
|
|
my $module = new Test::MockModule('C4::Context');
|
|
$module->mock(
|
|
'_new_dbh',
|
|
sub {
|
|
my $dbh = DBI->connect( 'DBI:Mock:', '', '' )
|
|
|| die "Cannot create handle: $DBI::errstr\n";
|
|
return $dbh;
|
|
}
|
|
);
|
|
|
|
my $history;
|
|
$dbh = C4::Context->dbh;
|
|
|
|
$dbh->{mock_add_resultset} = [ ['value'], ['thing1'] ];
|
|
$dbh->{mock_add_resultset} = [ ['value'], ['thing2'] ];
|
|
$dbh->{mock_add_resultset} = [ ['value'], ['thing3'] ];
|
|
$dbh->{mock_add_resultset} = [ ['value'], ['thing4'] ];
|
|
|
|
is(C4::Context->preference("SillyPreference"), 'thing1', "Retrieved syspref (value='thing1') successfully with default behavior");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 1, 'Retrieved syspref from database');
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(C4::Context->preference("SillyPreference"), 'thing1', "Retrieved syspref (value='thing1') successfully with default behavior");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 0, 'Did not retrieve syspref from database');
|
|
|
|
C4::Context->disable_syspref_cache();
|
|
is(C4::Context->preference("SillyPreference"), 'thing2', "Retrieved syspref (value='thing2') successfully with disabled cache");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 1, 'Retrieved syspref from database');
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(C4::Context->preference("SillyPreference"), 'thing3', "Retrieved syspref (value='thing3') successfully with disabled cache");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 1, 'Retrieved syspref from database');
|
|
|
|
C4::Context->enable_syspref_cache();
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(C4::Context->preference("SillyPreference"), 'thing3', "Retrieved syspref (value='thing3') successfully from cache");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 0, 'Did not retrieve syspref from database');
|
|
|
|
C4::Context->clear_syspref_cache();
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(C4::Context->preference("SillyPreference"), 'thing4', "Retrieved syspref (value='thing4') successfully after clearing cache");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 1, 'Retrieved syspref from database');
|
|
|
|
$dbh->{mock_clear_history} = 1;
|
|
is(C4::Context->preference("SillyPreference"), 'thing4', "Retrieved syspref (value='thing4') successfully from cache");
|
|
$history = $dbh->{mock_all_history};
|
|
is(scalar(@{$history}), 0, 'Did not retrieve syspref from database');
|
|
|
|
done_testing();
|
|
|
|
sub TransformVersionToNum {
|
|
my $version = shift;
|
|
|
|
# remove the 3 last . to have a Perl number
|
|
$version =~ s/(.*\..*)\.(.*)\.(.*)/$1$2$3/;
|
|
|
|
# three X's at the end indicate that you are testing patch with dbrev
|
|
# change it into 999
|
|
# prevents error on a < comparison between strings (should be: lt)
|
|
$version =~ s/XXX$/999/;
|
|
return $version;
|
|
}
|
|
1;
|