示例#1
0
 /**
  * Tests JTableNested::delete
  *
  * @return  void
  *
  * @since   11.3
  */
 public function testDelete()
 {
     $table = $this->object;
     $assetsTable = new JTableAsset(self::$dbo);
     $treeAssetsOriginal = $assetsTable->getTree('1');
     $this->assertEquals(159, count($treeAssetsOriginal), 'Line: ' . __LINE__ . ' Assets root tree should have 159 nodes');
     // Delete Sample Data weblinks (18) & children
     $table->load('18');
     $this->assertTrue($table->delete('18', true), 'Line: ' . __LINE__ . ' Should delete 18');
     // Check categories table
     $treeTemp = $table->getTree('1');
     $this->assertEquals(63, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 63 nodes');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('14', $treeTemp[1]->id, 'Line: ' . __LINE__ . ' id for element 1 should be 14');
     $this->assertEquals('19', $treeTemp[2]->id, 'Line: ' . __LINE__ . ' id for element 2 should be 19');
     $this->assertEquals(0, count($table->getTree('18')), 'Line: ' . __LINE__ . ' Id 18 should have been deleted');
     $this->assertEquals(0, count($table->getTree('31')), 'Line: ' . __LINE__ . ' Id 31 should have been deleted');
     // Check assets table
     $treeAssetsTemp = $assetsTable->getTree('1');
     $this->assertEquals(155, count($treeAssetsTemp), 'Line: ' . __LINE__ . ' After delete, assets root tree should have 155 nodes');
     $this->assertEquals(0, count($assetsTable->getTree('43')), 'Line: ' . __LINE__ . ' Id 43 should have been deleted from assets');
     $this->assertEquals(0, count($assetsTable->getTree('56')), 'Line: ' . __LINE__ . ' Id 56 should have been deleted from assets');
     // Delete Modules (22) and don't delete children
     // Child nodes should be moved up to parent
     $table->load('22');
     $this->assertTrue($table->delete('22', false), 'Line: ' . __LINE__ . ' Delete id 22 should be successful');
     // Check categories table
     $treeTemp = $table->getTree('1');
     $this->assertEquals(62, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 62 nodes');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('64', $treeTemp[5]->id, 'Line: ' . __LINE__ . ' id for element 5 should be 64');
     $this->assertEquals('4', $treeTemp[5]->level, 'Line: ' . __LINE__ . ' level for element 5 should be 4');
     $this->assertEquals('65', $treeTemp[6]->id, 'Line: ' . __LINE__ . ' id for element 6 should be 65');
     $this->assertEquals('4', $treeTemp[6]->level, 'Line: ' . __LINE__ . ' id for element 6 should be 4');
     $this->assertEquals('66', $treeTemp[7]->id, 'Line: ' . __LINE__ . ' id for element 7 should be 66');
     $this->assertEquals('4', $treeTemp[7]->level, 'Line: ' . __LINE__ . ' id for element 7 should be 4');
     $this->assertEquals('67', $treeTemp[8]->id, 'Line: ' . __LINE__ . ' id for element 8 should be 67');
     $this->assertEquals('4', $treeTemp[8]->level, 'Line: ' . __LINE__ . ' id for element 8 should be 4');
     $this->assertEquals('75', $treeTemp[9]->id, 'Line: ' . __LINE__ . ' id for element 9 should be 75');
     $this->assertEquals('4', $treeTemp[9]->level, 'Line: ' . __LINE__ . ' id for element 9 should be 4');
     $this->assertEquals(0, count($table->getTree('22')), 'Line: ' . __LINE__ . ' id 22 should be deleted');
     // Check assets table
     $treeAssetsTemp = $assetsTable->getTree('1');
     $this->assertEquals(154, count($treeAssetsTemp), 'Line: ' . __LINE__ . ' After delete, assets root tree should have 154 nodes');
     $this->assertEquals(0, count($assetsTable->getTree('47')), 'Line: ' . __LINE__ . ' Id 47 should have been deleted from assets');
     // Try using delete method without the table->load
     // It should fail and return false
     $table->reset();
     $this->assertFalse($table->delete('14'), 'Line: ' . __LINE__ . ' Table delete should fail because table->load() was not run first');
     // Delete Templates (23) without arguments (using just the $table->load)
     $table->load('23');
     $this->assertTrue($table->delete(), 'Line: ' . __LINE__ . ' Should delete id 23 and children');
     // Check categories
     $treeTemp = $table->getTree('1');
     $this->assertEquals(58, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 58 nodes');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('24', $treeTemp[10]->id, 'Line: ' . __LINE__ . ' id for element 10 should be 24');
     $this->assertEquals(0, count($table->getTree('23')), 'Line: ' . __LINE__ . ' id 23 should be deleted');
     // Check assets
     $treeAssetsTemp = $assetsTable->getTree('1');
     $this->assertEquals(148, count($treeAssetsTemp), 'Line: ' . __LINE__ . ' After delete, assets root tree should have 148 nodes');
     $this->assertEquals(0, count($assetsTable->getTree('48')), 'Line: ' . __LINE__ . ' Id 48 should have been deleted from assets');
     $this->assertEquals(0, count($assetsTable->getTree('98')), 'Line: ' . __LINE__ . ' Id 98 should have been deleted from assets');
     $this->assertEquals(0, count($assetsTable->getTree('147')), 'Line: ' . __LINE__ . ' Id 147 should have been deleted from assets (article)');
     $table->load('21');
     // Components no children
     $this->assertTrue($table->delete('21', false), 'Line: ' . __LINE__ . ' Should delete id 21 but not children');
     // Check categories
     $treeTemp = $table->getTree('1');
     $this->assertEquals(57, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 58 nodes');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('64', $treeTemp[4]->id, 'Line: ' . __LINE__ . ' id for element 4 should be 64');
     $this->assertEquals(0, count($table->getTree('21')), 'Line: ' . __LINE__ . ' id 21 should be deleted');
     // Check assets
     $treeAssetsTemp = $assetsTable->getTree('1');
     $this->assertEquals(147, count($treeAssetsTemp), 'Line: ' . __LINE__ . ' After delete, assets root tree should have 147 nodes');
     // Test table with no assets
     $menuTable = new JTableMenu(self::$dbo);
     $menuTable->load('2');
     $this->assertTrue($menuTable->delete('2', true), 'Line: ' . __LINE__ . ' Menu id 2 should be deleted');
     $treeMenuTemp = $menuTable->getTree('1');
     $this->checkLftRgt($treeMenuTemp);
     $this->assertEquals(16, count($treeMenuTemp), 'Line: ' . __LINE__ . ' Menu table should have 16 rows');
     $this->assertEquals(147, count($treeAssetsTemp), 'Line: ' . __LINE__ . ' After delete, assets root tree should still have 147 nodes');
     // Check assets
     $treeAssetsTemp = $assetsTable->getTree('1');
     $this->assertEquals(147, count($treeAssetsTemp), 'Line: ' . __LINE__ . ' Assets root tree should have 147 nodes');
     // Check lock
     $lockedTable = $this->getMock('JTableCategory', array('_lock'), array('jos_categories', 'id', self::$dbo));
     $lockedTable->expects($this->any())->method('_lock')->will($this->returnValue(false));
     $this->assertFalse($lockedTable->delete('1'), 'Line: ' . __LINE__ . ' Delete should fail because cannot lock');
 }