diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 5693f4390..ad57aaec5 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.7.19 + - fixed #10872: Purging an asset leaves old version tags - fixed #10867: EMS: can't set Ticket time - fixed #10855: Bug in submitting data to ITransact - fixed #10868: EMS Schedule screen won't display diff --git a/lib/WebGUI/AssetTrash.pm b/lib/WebGUI/AssetTrash.pm index 7dc458b1c..75f6c4421 100644 --- a/lib/WebGUI/AssetTrash.pm +++ b/lib/WebGUI/AssetTrash.pm @@ -178,6 +178,7 @@ sub purge { } # gonna need this at the end + my $tags = $session->db->buildArrayRef('select tagId from assetData where assetId=?',[$self->getId]); my $tagId = $self->get("tagId"); # clean up keywords @@ -208,10 +209,13 @@ sub purge { $self = undef; # clean up version tag if empty - my $versionTag = WebGUI::VersionTag->new($session, $tagId); - if ($versionTag && $versionTag->getAssetCount == 0) { - $versionTag->rollback; + foreach my $tagId (@{ $tags }) { + my $versionTag = WebGUI::VersionTag->new($session, $tagId); + if ($versionTag && $versionTag->getAssetCount == 0) { + $versionTag->rollback; + } } + return 1; } diff --git a/t/Asset/AssetVersion.t b/t/Asset/AssetVersion.t index 59632fa01..bb1193bb7 100644 --- a/t/Asset/AssetVersion.t +++ b/t/Asset/AssetVersion.t @@ -20,25 +20,35 @@ use WebGUI::Session; use WebGUI::Utility; use WebGUI::Asset::Template; use Test::More; # increment this value for each test you create -plan tests => 17; +plan tests => 26; my $session = WebGUI::Test->session; my $propertyHash = { - template => q!Hi, I'm a template!, - url => '/template/versionTest', - title => 'Version Test Template', + template => "Hi, I'm a template", + url => '/template/versionTest', + title => 'Version Test Template', menuTitle => 'Version Test Template', namespace => 'Article', className => 'WebGUI::Asset::Template', }; my $root = WebGUI::Asset->getRoot($session); + +my $originalVersionTags = $session->db->quickScalar(q{select count(*) from assetVersionTag}); + +################################################################ +# +# purgeRevision +# +################################################################ + +diag "purgeRevision tests"; my $template = $root->addChild($propertyHash); $template->commit; is (ref $template, "WebGUI::Asset::Template", "Template Asset created"); -checkTableEntries($template->getId, 1,1,1); +checkTableEntries($template->getId, 1,1,1,1); sleep 1; @@ -46,11 +56,11 @@ my $templatev2 = $template->addRevision({template => 'Hello, I am a template wit $templatev2->commit; is ($templatev2->getId, $template->getId, 'Both versions of the asset have the same assetId'); -checkTableEntries($templatev2->getId, 1,2,2); +checkTableEntries($templatev2->getId, 1,2,2,1); $templatev2->purgeRevision; -checkTableEntries($templatev2->getId, 1,1,1); +checkTableEntries($templatev2->getId, 1,1,1,1); undef $templatev2; @@ -59,22 +69,57 @@ $templatev2a->commit; $template->purgeRevision; -checkTableEntries($template->getId, 1,1,1); +checkTableEntries($template->getId, 1,1,1,1); $template->purgeRevision; -checkTableEntries($template->getId, 0,0,0); +checkTableEntries($template->getId, 0,0,0,0); + +my $versionTagCheck; +$versionTagCheck = $session->db->quickScalar(q{select count(*) from assetVersionTag}); +is($versionTagCheck, $originalVersionTags, 'version tag cleaned up by deleting last version'); + +################################################################ +# +# purge +# +################################################################ + +$template = $root->addChild($propertyHash); +my $tag1 = WebGUI::VersionTag->getWorking($session); +$tag1->commit; +WebGUI::Test->tagsToRollback($tag1); +sleep 1; +$templatev2 = $template->addRevision({template => 'Vie gates. Ich bin ein templater.'}); +my $tag2 = WebGUI::VersionTag->getWorking($session); +$tag2->commit; +WebGUI::Test->tagsToRollback($tag2); +diag "purge"; +checkTableEntries($templatev2->getId, 1,2,2); +$versionTagCheck = $session->db->quickScalar(q{select count(*) from assetVersionTag}); +is($versionTagCheck, $originalVersionTags+2, 'created two version tags'); + +$template->purge; +checkTableEntries($templatev2->getId, 0,0,0); +$versionTagCheck = $session->db->quickScalar(q{select count(*) from assetVersionTag}); +is($versionTagCheck, $originalVersionTags, 'purge deleted both tags'); + +################################################################ +# +# Utility routines +# +################################################################ sub checkTableEntries { my ($assetId, $assetNum, $assetDataNum, $templateNum) = @_; - my ($count) = $session->db->quickArray('select COUNT(assetId) from asset where assetId=?', [$assetId]); + my ($count) = $session->db->quickArray('select COUNT(*) from asset where assetId=?', [$assetId]); is ($count, $assetNum, sprintf 'Expecting %d Assets with that id in asset', $assetNum); - ($count) = $session->db->quickArray('select COUNT(assetId) from assetData where assetId=?', [$assetId]); + ($count) = $session->db->quickArray('select COUNT(*) from assetData where assetId=?', [$assetId]); is ($count, $assetDataNum, sprintf 'Expecting %d Assets with that id in assetData', $assetDataNum); - ($count) = $session->db->quickArray('select COUNT(assetId) from template where assetId=?', [$assetId]); + ($count) = $session->db->quickArray('select COUNT(*) from template where assetId=?', [$assetId]); is ($count, $templateNum, sprintf 'Expecting %d Assets with that id in template', $templateNum); }