View = new View(); $this->Rss = new RssHelper($this->View); } /** * 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, create_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); } }