diff --git a/t/Upgrade.t b/t/Upgrade.t new file mode 100644 index 000000000..8097ad300 --- /dev/null +++ b/t/Upgrade.t @@ -0,0 +1,94 @@ +use strict; +use warnings; +no warnings 'redefine'; + +use FindBin; +use strict; +use lib "$FindBin::Bin/lib"; + +use WebGUI::Test import => [qw(collateral)]; +use Test::More; + +use Test::MockObject; +use Test::MockObject::Extends; + +BEGIN { + $INC{'WebGUI.pm'} = 1; + $WebGUI::VERSION = '8.4.3'; +} + +use WebGUI::Paths; +use WebGUI::Upgrade; +use Try::Tiny; +use Capture::Tiny qw(capture); +use mro; + +my $configFile = WebGUI::Test->config->getFilename; +local *WebGUI::Paths::siteConfigs = sub { $configFile }; + +my $upgrade = Test::MockObject::Extends->new('WebGUI::Upgrade'); +$upgrade->set_always('getCurrentVersion', '8.0.0'); + +local *WebGUI::Paths::upgrades = sub { collateral('upgrades', 'impossible') } ; + +ok ! try { $upgrade->calcUpgradePath('8.0.0', '8.4.3'); 1 }, 'calcUpgradePath dies when unable to find a path'; + +*WebGUI::Paths::upgrades = sub { collateral('upgrades', 'backtrack') } ; + +is_deeply [$upgrade->calcUpgradePath('8.0.0', '8.4.3')], [qw(8.0.0-8.1.0 8.1.0-8.2.0 8.2.0-8.3.0 8.3.0-8.4.3)], 'calcUpgradePath finds correct path with backtracking'; + +*WebGUI::Paths::upgrades = sub { collateral('upgrades', 'valid') } ; + +$upgrade->set_true('runUpgradeFile'); + +my $res; +my ($stdout, $stderr) = capture { + $res = $upgrade->upgradeSites; +}; + +ok $res, 'upgradeSites runs'; + +$upgrade->called_pos_ok(1, 'getCurrentVersion'); +$upgrade->called_pos_ok(2, 'runUpgradeFile'); +my $upgradeFile = $upgrade->call_args_pos(2, 4); +ok $upgradeFile =~ /\b00_simple\.pl$/, 'correct upgrade file run'; +$upgrade->clear; + +$upgrade->unmock('runUpgradeFile'); + +($stdout, $stderr) = capture { + $upgrade->runUpgradeFile($configFile, '8.3.0', collateral('upgrades', 'output.pl')); +}; + +ok $stdout =~ 'Simple Output', 'report command functions correctly'; +ok $stdout =~ 'Done', 'done command functions correctly'; + +($stdout, $stderr) = capture { + $upgrade->runUpgradeFile($configFile, '8.3.0', collateral('upgrades', 'output.pl'), 1); +}; + +ok $stdout !~ 'Simple Output', 'quiet flag silences report command'; +ok $stdout !~ 'Done', 'quiet flag silences done command'; + +capture { + try { + $upgrade->runUpgradeFile($configFile, '8.3.0', collateral('upgrades', 'die.pl'), 1); + fail 'Error on failing upgrade'; + } + catch { + pass 'Error on failing upgrade'; + }; +}; + +capture { + try { + $upgrade->runUpgradeFile($configFile, '8.3.0', collateral('upgrades', 'strict-failure.pl'), 1); + fail 'strict enabled in upgrades'; + } + catch { + pass 'strict enabled in upgrades'; + }; +}; + +done_testing; + diff --git a/var/upgrades/7.8.1-7.8.2/.exists b/t/supporting_collateral/upgrades/backtrack/8.0.0-8.1.0/.exists similarity index 100% rename from var/upgrades/7.8.1-7.8.2/.exists rename to t/supporting_collateral/upgrades/backtrack/8.0.0-8.1.0/.exists diff --git a/var/upgrades/7.8.1-7.9.1/.exists b/t/supporting_collateral/upgrades/backtrack/8.1.0-8.2.0/.exists similarity index 100% rename from var/upgrades/7.8.1-7.9.1/.exists rename to t/supporting_collateral/upgrades/backtrack/8.1.0-8.2.0/.exists diff --git a/var/upgrades/7.8.2-7.8.3/.exists b/t/supporting_collateral/upgrades/backtrack/8.1.0-8.3.0/.exists similarity index 100% rename from var/upgrades/7.8.2-7.8.3/.exists rename to t/supporting_collateral/upgrades/backtrack/8.1.0-8.3.0/.exists diff --git a/var/upgrades/7.8.3-7.9.3/.exists b/t/supporting_collateral/upgrades/backtrack/8.2.0-8.2.1/.exists similarity index 100% rename from var/upgrades/7.8.3-7.9.3/.exists rename to t/supporting_collateral/upgrades/backtrack/8.2.0-8.2.1/.exists diff --git a/var/upgrades/7.9.1-7.9.2/.exists b/t/supporting_collateral/upgrades/backtrack/8.2.0-8.3.0/.exists similarity index 100% rename from var/upgrades/7.9.1-7.9.2/.exists rename to t/supporting_collateral/upgrades/backtrack/8.2.0-8.3.0/.exists diff --git a/var/upgrades/7.9.2-7.9.3/.exists b/t/supporting_collateral/upgrades/backtrack/8.3.0-8.4.3/.exists similarity index 100% rename from var/upgrades/7.9.2-7.9.3/.exists rename to t/supporting_collateral/upgrades/backtrack/8.3.0-8.4.3/.exists diff --git a/t/supporting_collateral/upgrades/die.pl b/t/supporting_collateral/upgrades/die.pl new file mode 100644 index 000000000..ce963ef7a --- /dev/null +++ b/t/supporting_collateral/upgrades/die.pl @@ -0,0 +1,2 @@ +die "Upgrade failure\n"; + diff --git a/t/supporting_collateral/upgrades/output.pl b/t/supporting_collateral/upgrades/output.pl new file mode 100644 index 000000000..e995ae381 --- /dev/null +++ b/t/supporting_collateral/upgrades/output.pl @@ -0,0 +1,4 @@ +report 'Simple Output'; + +done; + diff --git a/t/supporting_collateral/upgrades/strict-failure.pl b/t/supporting_collateral/upgrades/strict-failure.pl new file mode 100644 index 000000000..0f945936c --- /dev/null +++ b/t/supporting_collateral/upgrades/strict-failure.pl @@ -0,0 +1,2 @@ +$variable = "value"; + diff --git a/t/supporting_collateral/upgrades/valid/8.0.0-8.4.0/00_simple.pl b/t/supporting_collateral/upgrades/valid/8.0.0-8.4.0/00_simple.pl new file mode 100644 index 000000000..dfdfe65fb --- /dev/null +++ b/t/supporting_collateral/upgrades/valid/8.0.0-8.4.0/00_simple.pl @@ -0,0 +1,3 @@ +report "Simple Upgrade Step"; +done; + diff --git a/var/upgrades/7.8.3-7.9.3/script1.pl b/var/upgrades/7.8.3-7.9.3/script1.pl deleted file mode 100644 index 68f3ed78a..000000000 --- a/var/upgrades/7.8.3-7.9.3/script1.pl +++ /dev/null @@ -1,3 +0,0 @@ -report "stuff\n"; - -done; diff --git a/var/upgrades/7.8.3-7.9.3/script2.pl b/var/upgrades/7.8.3-7.9.3/script2.pl deleted file mode 100644 index 4199d8f67..000000000 --- a/var/upgrades/7.8.3-7.9.3/script2.pl +++ /dev/null @@ -1,6 +0,0 @@ -report "Doing something more interesting\n"; - -report session->db->quickScalar('SELECT count(*) from asset'); - -done; -