diff --git a/code/model/SiteTree.php b/code/model/SiteTree.php index de0c3f69..8319b5cf 100755 --- a/code/model/SiteTree.php +++ b/code/model/SiteTree.php @@ -1574,7 +1574,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid parent::onBeforeDelete(); // If deleting this page, delete all its children. - if(SiteTree::config()->enforce_strict_hierarchy && $children = $this->AllChildren()) { + if($this->isInDB() && SiteTree::config()->enforce_strict_hierarchy && $children = $this->AllChildren()) { foreach($children as $child) { $child->delete(); } diff --git a/tests/model/SiteTreeTest.php b/tests/model/SiteTreeTest.php index 3ded8572..8f4ae262 100644 --- a/tests/model/SiteTreeTest.php +++ b/tests/model/SiteTreeTest.php @@ -276,7 +276,25 @@ class SiteTreeTest extends SapphireTest { } - public function testGetByLink() { + public function testNoCascadingDeleteWithoutID() { + Config::inst()->update('SiteTree', 'enforce_strict_hierarchy', true); + $count = SiteTree::get()->count(); + $this->assertNotEmpty($count); + $obj = new SiteTree(); + $this->assertFalse($obj->exists()); + $fail = true; + try { + $obj->delete(); + } catch (LogicException $e) { + $fail = false; + } + if ($fail) { + $this->fail('Failed to throw delete exception'); + } + $this->assertCount($count, SiteTree::get()); + } + + public function testGetByLink() { $home = $this->objFromFixture('Page', 'home'); $about = $this->objFromFixture('Page', 'about'); $staff = $this->objFromFixture('Page', 'staff');