View = new View(); $this->Rss = new RssHelper($this->View); error_reporting($oldLevel); } /** * tearDown method * * @return void */ public function tearDown() { parent::tearDown(); unset($this->Rss); } /** * testDocument method * * @return void */ public function testDocument() { $result = $this->Rss->document(); $expected = [ 'rss' => [ 'version' => '2.0', ], ]; $this->assertHtml($expected, $result); $result = $this->Rss->document(null, 'content'); $expected = [ 'rss' => [ 'version' => '2.0', ], 'content', ]; $this->assertHtml($expected, $result); $result = $this->Rss->document(['contrived' => 'parameter'], 'content'); $expected = [ 'rss' => [ 'contrived' => 'parameter', 'version' => '2.0', ], 'content', ]; $this->assertHtml($expected, $result); } /** * testChannel method * * @return void */ public function testChannel() { $attrib = ['a' => '1', 'b' => '2']; $elements = ['title' => 'Title']; $content = 'content'; $result = $this->Rss->channel($attrib, $elements, $content); $expected = [ 'channel' => [ 'a' => '1', 'b' => '2', ], 'Rss->Url->build('/', true), '/link', 'assertHtml($expected, $result); } /** * test correct creation of channel sub elements. * * @return void */ public function testChannelElements() { $attrib = []; $elements = [ 'title' => 'Title of RSS Feed', 'link' => 'http://example.com', 'description' => 'Description of RSS Feed', 'image' => [ 'title' => 'Title of image', 'url' => 'http://example.com/example.png', 'link' => 'http://example.com', ], 'cloud' => [ 'domain' => 'rpc.sys.com', 'port' => '80', 'path' => '/RPC2', 'registerProcedure' => 'myCloud.rssPleaseNotify', 'protocol' => 'xml-rpc', ], ]; $content = 'content-here'; $result = $this->Rss->channel($attrib, $elements, $content); //@codingStandardsIgnoreStart $expected = [ ' [ 'domain' => 'rpc.sys.com', 'port' => '80', 'path' => '/RPC2', 'registerProcedure' => 'myCloud.rssPleaseNotify', 'protocol' => 'xml-rpc' ], 'content-here', '/channel', ]; //@codingStandardsIgnoreEnd $this->assertHtml($expected, $result); } public function testChannelElementAttributes() { $attrib = []; $elements = [ 'title' => 'Title of RSS Feed', 'link' => 'http://example.com', 'description' => 'Description of RSS Feed', 'image' => [ 'title' => 'Title of image', 'url' => 'http://example.com/example.png', 'link' => 'http://example.com', ], 'atom:link' => [ 'attrib' => [ 'href' => 'http://www.example.com/rss.xml', 'rel' => 'self', 'type' => 'application/rss+xml'], ], ]; $content = 'content-here'; $result = $this->Rss->channel($attrib, $elements, $content); //@codingStandardsIgnoreStart $expected = [ ' [ 'xmlns:atom' => 'http://www.w3.org/2005/Atom', 'href' => 'http://www.example.com/rss.xml', 'rel' => 'self', 'type' => 'application/rss+xml' ], 'content-here', '/channel', ]; //@codingStandardsIgnoreEnd $this->assertHtml($expected, $result); } /** * testItems method * * @return void */ public function testItems() { $items = [ ['title' => 'title1', 'guid' => 'http://www.example.com/guid1', 'link' => 'http://www.example.com/link1', 'description' => 'description1'], ['title' => 'title2', 'guid' => 'http://www.example.com/guid2', 'link' => 'http://www.example.com/link2', 'description' => 'description2'], ['title' => 'title3', 'guid' => 'http://www.example.com/guid3', 'link' => 'http://www.example.com/link3', 'description' => 'description3'], ]; $result = $this->Rss->items($items); $expected = [ 'assertHtml($expected, $result); $items = [ ['title' => 'title1', 'guid' => 'http://www.example.com/guid1', 'link' => 'http://www.example.com/link1', 'description' => 'description1'], ['title' => 'title2', 'guid' => 'http://www.example.com/guid2', 'link' => 'http://www.example.com/link2', 'description' => 'description2'], ['title' => 'title3', 'guid' => 'http://www.example.com/guid3', 'link' => 'http://www.example.com/link3', 'description' => 'description3'], ]; $result = $this->Rss->items($items, function ($v) { $v['title'] = $v['title'] . '-transformed'; return $v; }); $expected = [ 'assertHtml($expected, $result); $result = $this->Rss->items([]); $expected = ''; $this->assertEquals($expected, $result); } /** * testItem method * * @return void */ public function testItem() { $item = [ 'title' => 'My title', 'description' => 'My description', 'link' => 'http://www.google.com/', ]; $result = $this->Rss->item(null, $item); $expected = [ 'assertHtml($expected, $result); $item = [ 'title' => 'My Title', 'link' => 'http://www.example.com/1', 'description' => 'descriptive words', 'pubDate' => '2008-05-31 12:00:00', 'source' => ['http://www.google.com/', 'Google'], 'guid' => 'http://www.example.com/1', ]; $result = $this->Rss->item(null, $item); $expected = [ ' ['url' => 'http://www.google.com/'], 'Google', '/source', 'assertHtml($expected, $result); $item = [ 'title' => 'My Title & more', ]; $result = $this->Rss->item(null, $item); $expected = [ 'assertHtml($expected, $result); $item = [ 'title' => 'Foo bar', 'link' => [ 'url' => 'http://example.com/foo?a=1&b=2', 'convertEntities' => false, ], 'description' => [ 'value' => 'descriptive words', 'cdata' => true, ], 'pubDate' => '2008-05-31 12:00:00', 'source' => 'http://www.google.com/', ]; $result = $this->Rss->item(null, $item); $expected = [ 'assertHtml($expected, $result); $item = [ 'title' => 'My title', 'description' => 'My description', 'link' => 'http://www.google.com/', 'source' => ['url' => 'http://www.example.com/', 'title' => 'Example website'], ]; $result = $this->Rss->item(null, $item); $expected = [ ' ['url' => 'http://www.example.com/'], 'Example website', '/source', 'assertHtml($expected, $result); $item = [ 'title' => 'My title', 'description' => 'My description', 'link' => 'http://www.google.com/', 'category' => ['Category One', 'Category Two'], ]; $result = $this->Rss->item(null, $item); $expected = [ 'assertHtml($expected, $result); } /** * test item() with cdata blocks. * * @return void */ public function testItemCdata() { $item = [ 'title' => [ 'value' => 'My Title & more', 'cdata' => true, 'convertEntities' => false, ], ]; $result = $this->Rss->item(null, $item); $expected = [ 'assertHtml($expected, $result); $item = [ 'category' => [ 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org', ], ]; $result = $this->Rss->item(null, $item); $expected = [ ' ['domain' => 'http://www.cakephp.org'], 'assertHtml($expected, $result); $item = [ 'category' => [ [ 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org', ], [ 'value' => 'Bakery', 'cdata' => true, ], ], ]; $result = $this->Rss->item(null, $item); $expected = [ ' ['domain' => 'http://www.cakephp.org'], 'assertHtml($expected, $result); $item = [ 'title' => [ 'value' => 'My Title', 'cdata' => true, ], 'link' => 'http://www.example.com/1', 'description' => [ 'value' => 'descriptive words', 'cdata' => true, ], 'enclosure' => [ 'url' => '/test.flv', ], 'pubDate' => '2008-05-31 12:00:00', 'guid' => 'http://www.example.com/1', 'category' => [ [ 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org', ], [ 'value' => 'Bakery', 'cdata' => true, ], ], ]; $result = $this->Rss->item(null, $item); $expected = [ ' ['url' => $this->Rss->Url->build('/test.flv', true)], ' ['domain' => 'http://www.cakephp.org'], 'assertHtml($expected, $result); } /** * test item() with enclosure data. * * @return void */ public function testItemEnclosureLength() { if (!is_writable(WWW_ROOT)) { $this->markTestSkipped('Webroot is not writable.'); } $testExists = is_dir(WWW_ROOT . 'tests'); $tmpFile = WWW_ROOT . 'tests/cakephp.file.test.tmp'; $File = new File($tmpFile, true); $this->assertTrue($File->write('1234'), 'Could not write to ' . $tmpFile); clearstatcache(); $item = [ 'title' => [ 'value' => 'My Title', 'cdata' => true, ], 'link' => 'http://www.example.com/1', 'description' => [ 'value' => 'descriptive words', 'cdata' => true, ], 'enclosure' => [ 'url' => '/tests/cakephp.file.test.tmp', ], 'pubDate' => '2008-05-31 12:00:00', 'guid' => 'http://www.example.com/1', 'category' => [ [ 'value' => 'CakePHP', 'cdata' => true, 'domain' => 'http://www.cakephp.org', ], [ 'value' => 'Bakery', 'cdata' => true, ], ], ]; $result = $this->Rss->item(null, $item); if (!function_exists('mime_content_type')) { $type = null; } else { $type = mime_content_type($tmpFile); } $expected = [ ' [ 'url' => $this->Rss->Url->build('/tests/cakephp.file.test.tmp', true), 'length' => filesize($tmpFile), 'type' => $type, ], ' ['domain' => 'http://www.cakephp.org'], 'assertHtml($expected, $result); $File->delete(); if (!$testExists) { $Folder = new Folder(WWW_ROOT . 'tests'); $Folder->delete(); } } /** * testElementAttrNotInParent method * * @return void */ public function testElementAttrNotInParent() { $attributes = [ 'title' => 'Some Title', 'link' => 'http://link.com', 'description' => 'description', ]; $elements = ['enclosure' => ['url' => 'http://test.com']]; $result = $this->Rss->item($attributes, $elements); $expected = [ 'item' => [ 'title' => 'Some Title', 'link' => 'http://link.com', 'description' => 'description', ], 'enclosure' => [ 'url' => 'http://test.com', ], '/item', ]; $this->assertHtml($expected, $result); } public function testElementNamespaceWithoutPrefix() { $item = [ 'creator' => 'Alex', ]; $attributes = [ 'namespace' => 'http://link.com', ]; $result = $this->Rss->item($attributes, $item); $expected = [ 'item' => [ 'xmlns' => 'http://link.com', ], 'creator' => [ 'xmlns' => 'http://link.com', ], 'Alex', '/creator', '/item', ]; $this->assertHtml($expected, $result, true); } public function testElementNamespaceWithPrefix() { $item = [ 'title' => 'Title', 'dc:creator' => 'Alex', 'dc:description' => 'descriptive words', ]; $attributes = [ 'namespace' => [ 'prefix' => 'dc', 'url' => 'http://link.com', ], ]; $result = $this->Rss->item($attributes, $item); $expected = [ 'item' => [ 'xmlns:dc' => 'http://link.com', ], 'title' => [ 'xmlns:dc' => 'http://link.com', ], 'Title', '/title', 'dc:creator' => [ 'xmlns:dc' => 'http://link.com', ], 'Alex', '/dc:creator', 'dc:description' => [ 'xmlns:dc' => 'http://link.com', ], 'descriptive words', '/dc:description', '/item', ]; $this->assertHtml($expected, $result, true); } }