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'); }