* @author Bernhard Posselt * @copyright 2012 Alessandro Cosentino * @copyright 2012-2014 Bernhard Posselt */ namespace OCA\News\Tests\Unit\Utility; use \OCA\News\Db\Folder; use \OCA\News\Db\Feed; use OCA\News\Utility\OPMLExporter; use PHPUnit\Framework\TestCase; class OPMLExporterTest extends TestCase { /** @var OPMLExporter */ private $exporter; /** @var Feed */ private $feed1; /** @var Feed */ private $feed2; /** @var Folder */ private $folder1; /** @var Folder */ private $folder2; protected function setUp() { $this->exporter = new OPMLExporter(); $this->folder1 = new Folder(); $this->folder1->setId(3); $this->folder1->setParentId(0); $this->folder1->setName('Örgendwas'); $this->folder2 = new Folder(); $this->folder2->setId(1); $this->folder2->setParentId(3); $this->folder2->setName('a ergendwas'); $this->feed1 = new Feed(); $this->feed1->setUrl('http://url1'); $this->feed1->setTitle('tötel'); $this->feed1->setFolderId(0); $this->feed2 = new Feed(); $this->feed2->setUrl('http://url'); $this->feed2->setTitle('ttel df'); $this->feed2->setLink('goooooogel'); $this->feed2->setFolderId(1); } private function getAttribute($item, $name) { // used to fix scrutinizer errors if ($item instanceof \DOMElement) { return $item->getAttribute($name); } else { return null; } } public function testBuildEmpty() { $result = $this->exporter->build([], []); $xpath = new \DOMXpath($result); $this->assertEquals(0, $xpath->query('//outline')->length); } public function testBuildReturnsFolders() { $result = $this->exporter->build([$this->folder1, $this->folder2], []); $xpath = new \DOMXpath($result); $elems = $xpath->query('/opml/body/outline'); $this->assertEquals(2, $elems->length); $this->assertEquals( $this->folder1->getName(), $this->getAttribute($elems->item(0), 'title') ); $this->assertEquals( $this->folder1->getName(), $this->getAttribute($elems->item(0), 'text') ); $this->assertEquals( $this->folder2->getName(), $this->getAttribute($elems->item(1), 'title') ); $this->assertEquals( $this->folder2->getName(), $this->getAttribute($elems->item(1), 'text') ); } public function testBuildReturnsOnlyOneFeedIfParentFolderNotThere() { $result = $this->exporter->build([], [$this->feed1, $this->feed2]); $xpath = new \DOMXpath($result); $elems = $xpath->query('//outline'); $this->assertEquals(1, $elems->length); $this->assertEquals( $this->feed1->getTitle(), $this->getAttribute($elems->item(0), 'title') ); $this->assertEquals( $this->feed1->getTitle(), $this->getAttribute($elems->item(0), 'text') ); $this->assertEquals( $this->feed1->getUrl(), $this->getAttribute($elems->item(0), 'xmlUrl') ); $this->assertEquals( '', $this->getAttribute($elems->item(0), 'htmlUrl') ); } public function testBuildReturnsFeedsAndFolders() { $result = $this->exporter->build( [$this->folder1, $this->folder2], [$this->feed1, $this->feed2] ); $xpath = new \DOMXpath($result); $elems = $xpath->query('/opml/body/outline'); $this->assertEquals(3, $elems->length); $this->assertEquals( $this->folder1->getName(), $this->getAttribute($elems->item(0), 'title') ); $this->assertEquals( $this->folder2->getName(), $this->getAttribute($elems->item(1), 'text') ); $this->assertEquals( $this->feed1->getUrl(), $this->getAttribute($elems->item(2), 'xmlUrl') ); $this->assertEquals( $this->feed2->getLink(), $this->getAttribute($elems->item(1)->childNodes->item(0), 'htmlUrl') ); } }