public function testDeleteCategory() { ActiveRecord::clearPool(); $startingPositions = array(); $nodes = $this->root->getChildNodes(false, true); $nodes->add($this->root); $this->root->reload(); foreach ($nodes as $category) { $startingPositions[$category->getID()] = array('lft' => $category->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), 'rgt' => $category->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), 'parent' => $category == $this->root ? '0' : $category->getFieldValue(ActiveTreeNode::PARENT_NODE_FIELD_NAME)->getID()); } // new node $newCategory = Category::getNewInstance($this->root); $newCategory->setValueByLang("name", 'en', 'NEWNODE'); $newCategory->save(); // nested nodes $nestedNodes = array(); $lastNode = $newCategory; foreach (array() as $i) { $nestedNodes[$i] = Category::getNewInstance($lastNode); $nestedNodes[$i]->setValueByLang("name", 'en', 'TEST ' . rand(1, 1000)); $nestedNodes[$i]->save(); $lastNode = $nestedNodes[$i]; } $newCategory->reload(); // Delete child node $newCategory->delete(); $this->assertFalse($newCategory->isExistingRecord()); $this->assertFalse($newCategory->isLoaded()); // Check to see if everything is back to starting values $activeTreeNodes = ActiveRecord::retrieveFromPool(get_class($newCategory)); foreach ($activeTreeNodes as $category) { try { $category->reload(); } catch (ARNotFoundException $e) { continue; } if (!$category->getID()) { continue; } $this->assertEqual($category->getFieldValue(ActiveTreeNode::LEFT_NODE_FIELD_NAME), $startingPositions[$category->getID()]['lft']); $this->assertEqual($category->getFieldValue(ActiveTreeNode::RIGHT_NODE_FIELD_NAME), $startingPositions[$category->getID()]['rgt']); if (!$category->isRoot()) { $this->assertEqual($category->getFieldValue(ActiveTreeNode::PARENT_NODE_FIELD_NAME)->getID(), $startingPositions[$category->getID()]['parent']); } } }