예제 #1
0
 public function testMoveByReference()
 {
     $table = $this->object;
     // Save original tree for future reference
     $treeOriginal = $table->getTree('1');
     // Check original tree for starting integrity
     $this->checkLftRgt($treeOriginal);
     //Move Modules category (22) to after Plugins (25)
     $this->assertTrue($table->moveByReference('25', 'after', '22'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeTemp = $table->getTree('1');
     $this->assertEquals(68, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 68 nodes');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('23', $treeTemp[9]->id, 'Line: ' . __LINE__ . ' id for element 9 should be 23');
     $this->assertEquals('69', $treeTemp[10]->id, 'Line: ' . __LINE__ . ' id for element 10 should be 69');
     $this->assertEquals('24', $treeTemp[14]->id, 'Line: ' . __LINE__ . ' id for element 14 should be 24');
     $this->assertEquals('25', $treeTemp[15]->id, 'Line: ' . __LINE__ . ' id for element 15 should be 25');
     $this->assertEquals('22', $treeTemp[16]->id, 'Line: ' . __LINE__ . ' id for element 16 should be 22');
     $this->assertEquals('25', $treeTemp[15]->id, 'Line: ' . __LINE__ . ' id for element 21 should be 25');
     // Move Modules category (22) back to before Templates (23)
     $this->assertTrue($table->moveByReference('23', 'before', '22'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeOriginalNew = $table->getTree('1');
     $this->assertEquals(68, count($treeOriginalNew), 'Line: ' . __LINE__ . ' Root tree should have 68 nodes');
     $this->compareTrees($treeOriginal, $treeOriginalNew);
     // Move Templates (23) to first child under Menu Module (75)
     $this->assertTrue($table->moveByReference('75', 'first-child', '23'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeTemp = $table->getTree('1');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('23', $treeTemp[15]->id, 'Line: ' . __LINE__ . ' id for element 15 should be 23');
     $this->assertEquals(6, $treeTemp[15]->level, 'Line: ' . __LINE__ . ' level for element 15 should be 6');
     $this->assertEquals('75', $treeTemp[15]->parent_id, 'Line: ' . __LINE__ . ' parent_id for element 15 should be 75');
     $this->assertEquals('69', $treeTemp[16]->id, 'Line: ' . __LINE__ . ' id for element 16 should be 69');
     $this->assertEquals(7, $treeTemp[16]->level, 'Line: ' . __LINE__ . ' level for element 16 should be 7');
     $this->assertEquals('23', $treeTemp[16]->parent_id, 'Line: ' . __LINE__ . ' parent_id for element 16 should be 23');
     // Move Templates (23) back to original position - after Modules (22)
     $this->assertTrue($table->moveByReference('22', 'after', '23'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeOriginalNew = $table->getTree('1');
     $this->assertEquals(68, count($treeOriginalNew), 'Line: ' . __LINE__ . ' Root tree should have 68 nodes');
     $this->compareTrees($treeOriginal, $treeOriginalNew);
     // Move Components (21) to be last-child of Extensions (20)
     $this->assertTrue($table->moveByReference('20', 'last-child', '21'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeTemp = $table->getTree('1');
     $this->assertEquals(68, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 68 nodes');
     $this->checkLftRgt($treeTemp);
     $this->assertEquals('22', $treeTemp[8]->id, 'Line: ' . __LINE__ . ' id for element 8 should be 22');
     $this->assertEquals('21', $treeTemp[21]->id, 'Line: ' . __LINE__ . ' id for element 21 should be 21');
     // Move Components (21) back to first-child of Extensions (20)
     $this->assertTrue($table->moveByReference('20', 'first-child', '21'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeOriginalNew = $table->getTree('1');
     $this->assertEquals(68, count($treeOriginalNew), 'Line: ' . __LINE__ . ' Root tree should have 68 nodes');
     $this->compareTrees($treeOriginal, $treeOriginalNew);
     // Try to move Modules (22) to first-child of User Modules (65)
     // Should be invalid since 65 is child of 22
     $this->assertFalse($table->moveByReference('65', 'first-child', '22'), 'Line: ' . __LINE__ . ' MovebyReference should fail');
     // Move Sample Data Articles (14) to before Sample Data Weblinks (18)
     $this->assertTrue($table->moveByReference('18', 'before', '14'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeTemp = $table->getTree('1');
     $this->assertEquals(68, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 68 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('18', $treeTemp[26]->id, 'Line: ' . __LINE__ . ' id for element 26 should be 18');
     $this->assertEquals('31', $treeTemp[27]->id, 'Line: ' . __LINE__ . ' id for element 27 should be 31');
     // Move Sample Data Weblinks (18) to be first-child of ROOT (1)
     // Should put it back to original state
     $this->assertTrue($table->moveByReference('1', 'first-child', '18'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeOriginalNew = $table->getTree('1');
     $this->assertEquals(68, count($treeOriginalNew), 'Root tree should have 68 nodes');
     $this->compareTrees($treeOriginal, $treeOriginalNew);
     // Move with blank reference id
     // Default behavior is to move the node to the last child of the root node (ignores the position parameter)
     $this->assertTrue($table->moveByReference('', 'before', '18'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeTemp = $table->getTree('1');
     $this->assertEquals(68, count($treeTemp), 'Line: ' . __LINE__ . ' Root tree should have 68 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('18', $treeTemp[64]->id, 'Line: ' . __LINE__ . ' id for element 26 should be 18');
     $this->assertEquals('31', $treeTemp[65]->id, 'Line: ' . __LINE__ . ' id for element 27 should be 31');
     // Call with no id should return false
     $this->assertFalse($table->moveByReference('', 'first-child', ''), 'Line: ' . __LINE__ . ' MovebyReference should fail');
     // Can set id with load method
     $table->load('18');
     // Move Sample Data Weblinks back to first-child under Root
     $this->assertTrue($table->moveByReference('1', 'first-child'), 'Line: ' . __LINE__ . ' MovebyReference should succeed');
     $treeOriginalNew = $table->getTree('1');
     $this->assertEquals(68, count($treeOriginalNew), 'Line: ' . __LINE__ . ' Root tree should have 68 nodes');
     $this->compareTrees($treeOriginal, $treeOriginalNew);
     // Test db error
     $badTable = new JTableCategory($this->badDB);
     $this->assertFalse($badTable->moveByReference('1', 'first-child'), 'Line: ' . __LINE__ . ' Should fail with db error');
 }