From 9e4216c4a01e98f4b737ecebcf84832317cac97f Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 13 Apr 2007 20:19:23 +0000 Subject: [PATCH] Add more AssetLineage tests. cascadeLineage will crash because it does not check for duplicate lineages. Removed a duplicate check for $newParent definedness in setParent. --- lib/WebGUI/AssetLineage.pm | 40 ++++++++++++++++----------------- t/Asset/AssetLineage.t | 46 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 23 deletions(-) diff --git a/lib/WebGUI/AssetLineage.pm b/lib/WebGUI/AssetLineage.pm index f47a1b363..a8855b32c 100644 --- a/lib/WebGUI/AssetLineage.pm +++ b/lib/WebGUI/AssetLineage.pm @@ -113,18 +113,17 @@ If not present, asset's existing lineage is used. =cut sub cascadeLineage { - my $self = shift; - my $newLineage = shift; - my $oldLineage = shift || $self->get("lineage"); - my $now =$self->session->datetime->time(); - my $prepared = $self->session->db->prepare("update asset set lineage=? where assetId=?"); + my $self = shift; + my $newLineage = shift; + my $oldLineage = shift || $self->get("lineage"); + my $prepared = $self->session->db->prepare("update asset set lineage=? where assetId=?"); my $descendants = $self->session->db->read("select assetId,lineage from asset where lineage like ".$self->session->db->quote($oldLineage.'%')); my $cache = WebGUI::Cache->new($self->session); while (my ($assetId, $lineage) = $descendants->array) { my $fixedLineage = $newLineage.substr($lineage,length($oldLineage)); $prepared->execute([$fixedLineage,$assetId]); - # we do the purge directly cuz it's a lot faster than instantiating all these assets - $cache->deleteChunk(["asset",$assetId]); + # we do the purge directly cuz it's a lot faster than instantiating all these assets + $cache->deleteChunk(["asset",$assetId]); } $descendants->finish; } @@ -663,20 +662,19 @@ sub setParent { return 0 unless (defined $newParent); # can't move it if a parent object doesn't exist return 0 if ($newParent->getId eq $self->get("parentId")); # don't move it to where it already is return 0 if ($newParent->getId eq $self->getId); # don't move it to itself - if (defined $newParent) { - my $oldLineage = $self->get("lineage"); - return 0 unless $newParent->canEdit; - my $lineage = $newParent->get("lineage").$newParent->getNextChildRank; - return 0 if ($lineage =~ m/^$oldLineage/); # can't move it to its own child - $self->session->db->beginTransaction; - $self->session->db->write("update asset set parentId=".$self->session->db->quote($newParent->getId)." where assetId=".$self->session->db->quote($self->getId)); - $self->cascadeLineage($lineage); - $self->session->db->commit; - $self->updateHistory("moved to parent ".$newParent->getId); - $self->{_properties}{lineage} = $lineage; - $self->purgeCache; - return 1; - } + my $oldLineage = $self->get("lineage"); + return 0 unless $newParent->canEdit; + my $lineage = $newParent->get("lineage").$newParent->getNextChildRank; + return 0 if ($lineage =~ m/^$oldLineage/); # can't move it to its own child + $self->session->db->beginTransaction; + $self->session->db->write("update asset set parentId=? where assetId=?", + [$newParent->getId, $self->getId]); + $self->cascadeLineage($lineage); + $self->session->db->commit; + $self->updateHistory("moved to parent ".$newParent->getId); + $self->{_properties}{lineage} = $lineage; + $self->purgeCache; + return 1; return 0; } diff --git a/t/Asset/AssetLineage.t b/t/Asset/AssetLineage.t index b1848c537..204821294 100644 --- a/t/Asset/AssetLineage.t +++ b/t/Asset/AssetLineage.t @@ -16,7 +16,7 @@ use WebGUI::Test; use WebGUI::Session; use WebGUI::Asset; -use Test::More tests => 9; # increment this value for each test you create +use Test::More tests => 15; # increment this value for each test you create use Test::Deep; # Test the methods in WebGUI::AssetLineage @@ -37,7 +37,13 @@ my $folder = $root->addChild({ title => 'folder', menuTitle => 'folderMenuTitle', className => 'WebGUI::Asset::Wobject::Folder', - isPackage => 1, +}); + +my $folder2 = $root->addChild({ + url => 'testFolder2', + title => 'folder2', + menuTitle => 'folder2MenuTitle', + className => 'WebGUI::Asset::Wobject::Folder', }); my @snippets = (); @@ -51,6 +57,15 @@ foreach my $snipNum (0..6) { menuTitle => $snipNum, }); } + +my $snippet2 = $folder2->addChild( { + className => "WebGUI::Asset::Snippet", + groupIdView => 7, + groupIdEdit => 3, + title => "Snippet2 0", + menuTitle => 0, +}); + $versionTag->commit; my @snipIds = map { $_->getId } @snippets; @@ -92,6 +107,33 @@ ok($folder->hasChildren, 'test folder has children'); ok($root->hasChildren, 'root node has children'); ok(!$snippets[0]->hasChildren, 'test snippet has no children'); +#################################################### +# +# cascadeLineage +# +#################################################### + +#diag $snippets[0]->get('lineage'); +#diag $snippet2->get('lineage'); +##Uncomment me to crash the test +#$snippet2->cascadeLineage($snippets[0]->get('lineage')); +#diag $snippets[0]->get('lineage'); +#diag $snippet2->get('lineage'); + +#################################################### +# +# setParent +# +#################################################### + +ok(!$snippet2->setParent(), 'setParent: new parent must be passed in'); +ok(!$snippet2->setParent($snippet2), 'setParent: cannot be your own parent'); +ok(!$snippet2->setParent($folder2), 'setParent: will not move self to current parent'); +ok(!$snippet2->setParent($folder), 'setParent: user must be in group 4 to do this'); +$session->user({userId => 3}); +ok($snippet2->setParent($folder), 'setParent: Admin can run setParent'); +is($folder->getChildCount, 8, 'setParent: folder now has 8 children'); + END { $versionTag->rollback; }