getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['validateInput', 'parseData', 'insertData']) ->getMock(); $obj->expects($this->once())->method('validateInput'); $obj->expects($this->once())->method('parseData'); $obj->expects($this->once())->method('insertData'); $obj->import(); $output = ob_get_clean(); $this->assertEquals("\nImportation completed!\n\nClick here to finish the import process", $output); } public function testImportShouldSetInstanceProperties(): void { ob_start(); $obj = $this->getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['validateInput', 'parseData', 'insertData']) ->getMock(); $_POST['alreadyExistentPageName'] = 'override'; $_POST['wikiRevisions'] = 100; $obj->import(); $this->assertEquals(100, $obj->revisionsNumber); $this->assertEquals('override', $obj->alreadyExistentPageName); unset($_POST['alreadyExistentPageName'], $_POST['wikiRevisions']); $obj->import(); $this->assertEquals(0, $obj->revisionsNumber); $this->assertEquals('doNotImport', $obj->alreadyExistentPageName); ob_get_clean(); } public function testImportShouldSetSessionVariables(): void { ob_start(); $expectedImportFeedback = ['importedPages' => 10, 'totalPages' => '13']; $obj = $this->getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['validateInput', 'parseData', 'insertData', 'saveAndDisplayLog']) ->getMock(); $obj->expects($this->once())->method('validateInput'); $obj->expects($this->once())->method('parseData'); $obj->expects($this->once())->method('insertData')->willReturn($expectedImportFeedback); $obj->expects($this->once())->method('saveAndDisplayLog'); $obj->log = 'some log string'; $obj->import(); $this->assertEquals($expectedImportFeedback, $_SESSION['tiki_importer_feedback']); $this->assertEquals('some log string', $_SESSION['tiki_importer_log']); ob_get_clean(); } public function testInsertDataCallInsertPageFourTimes(): void { ob_start(); $obj = $this->getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['insertPage']) ->getMock(); $obj->expects($this->exactly(4))->method('insertPage'); $parsedData = [['name' => '1'],['name' => '2'],['name' => '3'],['name' => '4'],]; $obj->insertData($parsedData); ob_get_clean(); } public function testInsertDataCallInsertPageOnceWithProperParam(): void { ob_start(); $obj = $this->getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['insertPage']) ->getMock(); $obj->expects($this->once())->method('insertPage')->with(['name' => '1']); $parsedData = [['name' => '1'],]; $obj->insertData($parsedData); ob_get_clean(); } public function testInsertDataShouldNotCallInsertPage(): void { ob_start(); $obj = $this->getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['insertPage']) ->getMock(); $obj->expects($this->never())->method('insertPage'); $parsedData = []; $obj->insertData($parsedData); ob_get_clean(); } public function testInsertDataShouldReturnCountData(): void { ob_start(); $obj = $this->getMockBuilder('TikiImporter_Wiki') ->onlyMethods(['insertPage']) ->getMock(); $obj->expects($this->exactly(6))->method('insertPage')->willReturnOnConsecutiveCalls(true, true, false, true, false, true); $parsedData = [ ['name' => 'Page1'], ['name' => 'Page2'], ['name' => 'Page3'], ['name' => 'Page4'], ['name' => 'Page5'], ['name' => 'Page6'], ]; $countData = $obj->insertData($parsedData); $expectedResult = ['totalPages' => 6, 'importedPages' => 4]; $this->assertEquals($expectedResult, $countData); ob_get_clean(); } } class TikiImporter_Wiki_InsertPage_Test extends TikiImporter_TestCase { protected function setUp(): void { require_once(__DIR__ . '/fixtures/mediawiki_page_as_array.php'); global $tikilib; $tikilib = $this->getMockBuilder('TikiLib') ->onlyMethods(['create_page', 'update_page', 'page_exists', 'remove_all_versions']) ->getMock(); $this->obj = new TikiImporter_Wiki_Mediawiki(); $this->obj->revisionsNumber = 0; } public function testInsertPage(): void { global $tikilib, $page; $tikilib->expects($this->once())->method('page_exists')->with($page['name'])->willReturn(false); $tikilib->expects($this->once())->method('create_page')->with($page['name'], 0, $page['revisions'][0]['data'], $page['revisions'][0]['lastModif'], $page['revisions'][0]['comment'], $page['revisions'][0]['user'], $page['revisions'][0]['ip']); // TODO: how to test parameters for update_page for the 7 different calls $tikilib->expects($this->exactly(7))->method('update_page'); // $page is set on mediawiki_page_as_array.php $this->assertEquals('Redes de ensino', $this->obj->insertPage($page)); } public function testInsertPageAlreadyExistentPageNameOverride(): void { global $tikilib, $page; $tikilib->expects($this->once())->method('page_exists')->with($page['name'])->willReturn(true); $tikilib->expects($this->once())->method('remove_all_versions')->with($page['name']); $tikilib->expects($this->once())->method('create_page'); $tikilib->expects($this->exactly(7))->method('update_page'); $this->obj->alreadyExistentPageName = 'override'; $this->assertEquals('Redes de ensino', $this->obj->insertPage($page)); } public function testInsertPageAlreadyExistentPageNameAppendPrefix(): void { global $tikilib, $page; $newPageName = $this->obj->softwareName . '_' . $page['name']; $tikilib->expects($this->once())->method('page_exists')->with($page['name'])->willReturn(true); $tikilib->expects($this->once())->method('create_page')->with($newPageName); $tikilib->expects($this->exactly(7))->method('update_page')->with($newPageName); $this->obj->alreadyExistentPageName = 'appendPrefix'; $this->assertEquals('Mediawiki_Redes de ensino', $this->obj->insertPage($page)); } public function testInsertPageAlreadyExistentPageNameDoNotImport(): void { global $tikilib, $page; $tikilib->expects($this->once())->method('page_exists')->with($page['name'])->willReturn(true); $tikilib->expects($this->never())->method('create_page'); $tikilib->expects($this->never())->method('update_page'); $this->obj->alreadyExistentPageName = 'doNotImport'; $this->assertFalse($this->obj->insertPage($page)); } }