diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 316729373..9be0fd729 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -18,6 +18,7 @@ - fixed #10988: EMS Schedule -- Data Error - fixed: DataForm allows edits when locked by another version tag - fixed #11001: Shipping plugin returning nothing, causing price formatter to puke + - fixed #11059: WebGUI upgrade packages do not overwrite versions in the db 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/docs/upgrades/_upgrade.skeleton b/docs/upgrades/_upgrade.skeleton index 60222c641..ce2ab4743 100644 --- a/docs/upgrades/_upgrade.skeleton +++ b/docs/upgrades/_upgrade.skeleton @@ -58,7 +58,7 @@ sub addPackage { $storage->addFileFromFilesystem( $file ); # Import the package into the import node - my $package = eval { WebGUI::Asset->getImportNode($session)->importPackage( $storage ); }; + my $package = eval { WebGUI::Asset->getImportNode($session)->importPackage( $storage, { overwriteLatest => 1 } ); }; if ($package eq 'corrupt') { die "Corrupt package found in $file. Stopping upgrade.\n"; diff --git a/lib/WebGUI/AssetPackage.pm b/lib/WebGUI/AssetPackage.pm index f73b9f922..c0c5ab51b 100644 --- a/lib/WebGUI/AssetPackage.pm +++ b/lib/WebGUI/AssetPackage.pm @@ -123,6 +123,11 @@ A hash reference of options to change how the import works Forces the all assets in the package to inherit ownerUserId, groupIdView and groupIdEdit from the asset where it is deployed. +=head4 overwriteLatest + +Forces the package to ignore the revisionDate inside it. This makes the imported package the +latest revision of an asset. + =cut sub importAssetData { @@ -132,7 +137,7 @@ sub importAssetData { my $error = $self->session->errorHandler; my $id = $data->{properties}{assetId}; my $class = $data->{properties}{className}; - my $version = $data->{properties}{revisionDate}; + my $version = $options->{overwriteLatest} ? 0 : $data->{properties}{revisionDate}; # Load the class WebGUI::Asset->loadModule( $self->session, $class ); diff --git a/t/Asset/AssetPackage.t b/t/Asset/AssetPackage.t index 28cb55f7d..840d0a34e 100644 --- a/t/Asset/AssetPackage.t +++ b/t/Asset/AssetPackage.t @@ -23,7 +23,7 @@ use WebGUI::VersionTag; use Test::More; # increment this value for each test you create use Test::MockObject; -plan tests => 10; +plan tests => 14; my $session = WebGUI::Test->session; $session->user({userId => 3}); @@ -50,7 +50,7 @@ my $targetFolder = $root->addChild({ className => 'WebGUI::Asset::Wobject::Folder', }); -my $snippet = $folder->addChild({ +my $subSnippet = $folder->addChild({ url => 'testSnippet', title => 'snippet', menuTitle => 'snippetMenuTitle', @@ -58,6 +58,14 @@ my $snippet = $folder->addChild({ snippet => 'A snippet of text', }); +my $snippet = $root->addChild({ + url => 'snip_snip', + title => 'snip snip', + className => 'WebGUI::Asset::Snippet', + snippet => 'Always upgrade to the latest version', + isPackage => 1, +}); + my $packageAssetId = $folder->getId; $session->request->setup_body({ assetId => $packageAssetId }); @@ -69,6 +77,17 @@ $versionTag->commit; sleep 2; +my $storage = $snippet->exportPackage(); +isa_ok($storage, 'WebGUI::Storage', 'exportPackage returns a WebGUI::Storage object'); + +my $snippetRev = $snippet->addRevision({ snippet => 'Only upgrade existing data if revisionDate is newer' }); +is($snippetRev->get('snippet'), 'Only upgrade existing data if revisionDate is newer', 'importPackage, overwriteLatest: precondition check, content'); +cmp_ok( $snippetRev->get('revisionDate'), '>', $snippet->get('revisionDate'), '... precondition check, revisionDate'); + +my $vt2 = WebGUI::VersionTag->getWorking($session); +$vt2->commit; +WebGUI::Test->tagsToRollback($vt2); + $targetFolder->www_deployPackage(); $targetFolderChildren = $targetFolder->getLineage(["children"], {returnObjects => 1,}); @@ -93,7 +112,18 @@ $newVersionTag->commit; my $newFolder = WebGUI::Asset->new($session, $folder->getId); ok(! $newFolder->get('isPackage'), 'Disabled isPackage in original folder asset'); -is(scalar @{ $root->getPackageList }, 0, 'getPackageList does not pick up old versions of assets that used to be packages'); + +sleep 1; + +my $updatedSnippet = WebGUI::Asset->new($session, $snippet->getId); + +$root->importPackage($storage, { overwriteLatest => 1 }); +$updatedSnippet = WebGUI::Asset->new($session, $snippet->getId); +is($updatedSnippet->get('snippet'), 'Always upgrade to the latest version', 'importPackage: overwriteLatest causes revision dates to be ignored'); +cmp_ok( $updatedSnippet->get('revisionDate'), '>', $snippetRev->get('revisionDate'), '... revisionDate check on imported package with overwriteLatest'); + +my $lastTag = WebGUI::VersionTag->getWorking($session); +WebGUI::Test->tagsToRollback($lastTag); TODO: { local $TODO = "Tests to make later";