You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

457 lines
16 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
require_once(__DIR__ . '/tikiimporter_testcase.php');
require_once(__DIR__ . '/../../importer/tikiimporter_blog.php');
/**
* @group importer
*/
class TikiImporter_Blog_Test extends TikiImporter_TestCase
{
protected function setUp(): void
{
$this->obj = new TikiImporter_Blog();
}
public function testImportShouldCallMethodsToStartImportProcess(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['parseData', 'insertData', 'setupTiki'])
->getMock();
$obj->expects($this->once())->method('parseData');
$obj->expects($this->once())->method('insertData');
$obj->expects($this->once())->method('setupTiki');
$obj->import();
$output = ob_get_clean();
$this->assertEquals("\nImportation completed!\n\n<b><a href=\"tiki-importer.php\">Click here</a> to finish the import process</b>", $output);
}
public function testImportShouldSetSessionVariables(): void
{
ob_start();
$expectedImportFeedback = ['importedPages' => 10, 'totalPages' => '13'];
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['parseData', 'insertData', 'saveAndDisplayLog', 'setupTiki'])
->getMock();
$obj->expects($this->once())->method('parseData');
$obj->expects($this->once())->method('insertData')->willReturn($expectedImportFeedback);
$obj->expects($this->once())->method('saveAndDisplayLog');
$obj->expects($this->once())->method('setupTiki');
$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 testInsertDataShouldCallInsertItemSixTimes(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertItem', 'createBlog'])
->getMock();
$obj->expects($this->once())->method('createBlog');
$obj->expects($this->exactly(6))->method('insertItem');
$obj->permalinks = ['not empty'];
$obj->parsedData = [
'pages' => [
['type' => 'page', 'name' => 'Any name'],
['type' => 'page', 'name' => 'Any name'],
],
'posts' => [
['type' => 'post', 'name' => 'Any name'],
['type' => 'post', 'name' => 'Any name'],
['type' => 'post', 'name' => 'Any name'],
['type' => 'post', 'name' => 'Any name'],
],
'tags' => [],
'categories' => [],
];
$obj->insertData();
ob_get_clean();
}
public function testInsertDataShouldNotCallInsertItem(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertItem'])
->getMock();
$obj->expects($this->never())->method('insertItem');
$obj->parsedData = [
'pages' => [],
'posts' => [],
'tags' => [],
'categories' => [],
];
$obj->insertData();
ob_get_clean();
}
public function testInsertDataShouldReturnCountData(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertItem', 'createBlog'])
->getMock();
$obj->expects($this->once())->method('createBlog');
$obj->expects($this->exactly(6))->method('insertItem')->willReturnOnConsecutiveCalls(true, true, true, true, false, true);
$obj->permalinks = ['not empty'];
$obj->parsedData = [
'pages' => [
['type' => 'page', 'name' => 'Any name'],
['type' => 'page', 'name' => 'Any name'],
],
'posts' => [
['type' => 'post', 'name' => 'Any name'],
['type' => 'post', 'name' => 'Any name'],
['type' => 'post', 'name' => 'Any name'],
['type' => 'post', 'name' => 'Any name'],
],
'tags' => [],
'categories' => [],
];
$countData = $obj->insertData();
$expectedResult = ['importedPages' => 1, 'importedPosts' => 4, 'importedTags' => 0, 'importedCategories' => 0];
$this->assertEquals($expectedResult, $countData);
ob_get_clean();
}
public function testInsertDataShouldNotCreateBlogIfNoPosts(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertItem', 'createTags', 'createCategories', 'createBlog'])
->getMock();
$obj->expects($this->exactly(0))->method('insertItem');
$obj->expects($this->exactly(0))->method('createTags');
$obj->expects($this->exactly(0))->method('createCategories');
$obj->expects($this->exactly(0))->method('createBlog');
$obj->parsedData = [
'pages' => [],
'posts' => [],
'tags' => [],
'categories' => [],
];
$countData = $obj->insertData();
$expectedResult = ['importedPages' => 0, 'importedPosts' => 0, 'importedTags' => 0, 'importedCategories' => 0];
$this->assertEquals($expectedResult, $countData);
ob_get_clean();
}
/**
* @group marked-as-skipped
*/
public function testInsertItemShouldCallInsertCommentsForPage(): void
{
$this->markTestSkipped("As of 2013-09-30, this test is broken. Skipping it for now.");
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertComments', 'insertPage'])
->getMock();
$obj->expects($this->once())->method('insertComments')->with('Any name', 'wiki page');
$obj->expects($this->once())->method('insertPage')->willReturnOnConsecutiveCalls(true);
$page = ['type' => 'page', 'name' => 'Any name', 'comments' => [1, 2, 3]];
$obj->insertItem($page);
}
/**
* @group marked-as-skipped
*/
public function testInsertItemShouldCallInsertCommentsForPost(): void
{
$this->markTestSkipped("As of 2013-09-30, this test is broken. Skipping it for now.");
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertComments', 'insertPost'])
->getMock();
$obj->expects($this->once())->method('insertComments')->with('Any name', 'blog post');
$obj->expects($this->once())->method('insertPost')->willReturnOnConsecutiveCalls(true);
$post = ['type' => 'post', 'name' => 'Any name', 'comments' => [1, 2]];
$obj->insertItem($post);
}
public function testInsertItemShouldReturnObjId(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertComments', 'insertPost'])
->getMock();
$obj->expects($this->once())->method('insertComments')->with(22, 'blog post', [1, 2]);
$obj->expects($this->once())->method('insertPost')->willReturnOnConsecutiveCalls(22);
$post = ['type' => 'post', 'name' => 'Any name', 'comments' => [1, 2]];
$objId = $obj->insertItem($post);
$this->assertEquals(22, $objId);
ob_get_clean();
}
public function testInsertItemShoudReturnNull(): void
{
ob_start();
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['insertComments', 'insertPost'])
->getMock();
$obj->expects($this->exactly(0))->method('insertComments');
$obj->expects($this->once())->method('insertPost')->willReturnOnConsecutiveCalls(null);
$post = ['type' => 'post', 'name' => 'Any name', 'comments' => [1, 2]];
$objId = $obj->insertItem($post);
$this->assertEquals(null, $objId);
ob_get_clean();
}
/**
* @group marked-as-skipped
*/
public function testInsertComments(): void
{
$this->markTestSkipped("As of 2013-09-30, this test is broken. Skipping it for now.");
$commentslib = $this->getMockBuilder('Comments')
->onlyMethods(['post_new_comment'])
->getMock();
$commentslib->expects($this->exactly(2))
->method('post_new_comment')
->with('wiki page:2', 0, null, '', 'asdf', '', '', 'n', '', '', '', '', 1234, '', '');
$comments = [
['data' => 'asdf', 'created' => 1234, 'approved' => 1],
['data' => 'asdf', 'created' => 1234, 'approved' => 1],
];
$this->obj->insertComments(2, 'wiki page', $comments);
}
/**
* @group marked-as-skipped
*/
public function testInsertCommentsShouldConsiderIfCommentIsApprovedOrNot(): void
{
$this->markTestSkipped("As of 2013-09-30, this test is broken. Skipping it for now.");
$commentslib = $this->getMockBuilder('Comments')
->onlyMethods(['post_new_comment', 'approve_comment'])
->getMock();
$commentslib->expects($this->exactly(2))
->method('post_new_comment')
->with('wiki page:2', 0, null, '', 'asdf', '', '', 'n', '', '', '', '', 1234, '', '')->willReturn(22);
$commentslib->expects($this->once())->method('approve_comment')->with(22, 'n');
$comments = [
['data' => 'asdf', 'created' => 1234, 'approved' => 1],
['data' => 'asdf', 'created' => 1234, 'approved' => 0],
];
$this->obj->insertComments(2, 'wiki page', $comments);
}
/**
* @group marked-as-skipped
*/
public function testInsertPage(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$objectlib = $this->getMockBuilder('ObjectLib')
->onlyMethods(['insert_object'])
->getMock();
$objectlib->expects($this->once())->method('insert_object');
$importerWiki = $this->getMockBuilder('TikiImporter_Wiki')
->onlyMethods(['insertPage'])
->getMock();
$importerWiki->expects($this->once())->method('insertPage')->willReturn('HomePage');
$obj = $this->getMockBuilder('TikiImporter_Blog')
->onlyMethods(['instantiateImporterWiki'])
->getMock();
$obj->expects($this->once())->method('instantiateImporterWiki');
$obj->importerWiki = $importerWiki;
$obj->insertPage([]);
}
/**
* @group marked-as-skipped
*/
public function testInsertPost(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$bloglib = $this->getMockBuilder('BlogLib')
->onlyMethods(['blog_post'])
->getMock();
$bloglib->expects($this->once())->method('blog_post')->willReturn(1);
$objectlib = $this->getMockBuilder('ObjectLib')
->onlyMethods(['insert_object'])
->getMock();
$objectlib->expects($this->once())->method('insert_object');
$post = ['content' => 'asdf', 'excerpt' => '', 'author' => 'admin', 'name' => 'blog post title', 'created' => 1234];
$this->obj->insertPost($post);
}
/**
* @group marked-as-skipped
*/
public function testCreateTags(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$freetaglib = $this->getMockBuilder('FreetagLib')
->onlyMethods(['find_or_create_tag'])
->getMock();
$freetaglib->expects($this->exactly(4))->method('find_or_create_tag');
$tags = ['tag1', 'tag2', 'tag3', 'tag4'];
$this->obj->createTags($tags);
}
/**
* @group marked-as-skipped
*/
public function testCreateCategories(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$categlib = $this->getMockBuilder('CategLib')
->onlyMethods(['add_category', 'get_category_id'])
->getMock();
$categlib->expects($this->exactly(3))->method('add_category');
$categlib->expects($this->once())->method('get_category_id');
$categories = [
['parent' => '', 'name' => 'categ1', 'description' => ''],
['parent' => '', 'name' => 'categ2', 'description' => ''],
['parent' => 'categ1', 'name' => 'categ3', 'description' => ''],
];
$this->obj->createCategories($categories);
}
/**
* @group marked-as-skipped
*/
public function testLinkObjectWithTags(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$freetaglib = $this->getMockBuilder('FreetagLib')
->onlyMethods(['_tag_object_array'])
->getMock();
$freetaglib->expects($this->once())->method('_tag_object_array');
$tags = ['tag1', 'tag2', 'tag3', 'tag4'];
$this->obj->linkObjectWithTags('HomePage', 'wiki page', $tags);
}
/**
* @group marked-as-skipped
*/
public function testLinkObjectWithCategories(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$categlib = $this->getMockBuilder('CategLib')
->onlyMethods(['get_category_id', 'get_object_id', 'categorize', 'add_categorized_object'])
->getMock();
$categlib->expects($this->exactly(4))->method('get_category_id');
$categlib->expects($this->exactly(4))->method('get_category_id');
$categlib->expects($this->exactly(4))->method('get_category_id');
$categlib->expects($this->exactly(4))->method('add_categorized_object');
$categs = ['categ1', 'categ2', 'categ3', 'categ4'];
$this->obj->linkObjectWithCategories('HomePage', 'wiki page', $categs);
}
/**
* @group marked-as-skipped
*/
public function testCreateBlog(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$bloglib = $this->getMockBuilder('BlogLib')
->onlyMethods(['replace_blog'])
->getMock();
$bloglib->expects($this->once())->method('replace_blog');
$this->obj->blogInfo = ['title' => 'Test title', 'desc' => 'Test description', 'lastModif' => 12345];
$this->obj->createBlog();
}
/**
* @group marked-as-skipped
*/
public function testCreateBlogShouldSetBlogAsHomepage(): void
{
$this->markTestSkipped('2016-09-26 Skipped as dependency injection has stopped mock objects working like this.');
$bloglib = $this->getMockBuilder('BlogLib')
->onlyMethods(['replace_blog'])
->getMock();
$bloglib->expects($this->once())->method('replace_blog');
$tikilib = $this->getMockBuilder('TikiLib')
->onlyMethods(['set_preference'])
->getMock();
$tikilib->expects($this->exactly(2))->method('set_preference');
$this->obj->blogInfo = ['title' => 'Test title', 'desc' => 'Test description', 'lastModif' => 12345];
$_REQUEST['setAsHomePage'] = 'on';
$this->obj->createBlog();
unset($_REQUEST['setAsHomePage']);
}
}