XmlViewTest.php 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. <?php
  2. /**
  3. * XmlViewTest file
  4. *
  5. * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  6. * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  7. *
  8. * Licensed under The MIT License
  9. * For full copyright and license information, please see the LICENSE.txt
  10. * Redistributions of files must retain the above copyright notice
  11. *
  12. * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  13. * @link http://cakephp.org CakePHP(tm) Project
  14. * @since 2.1.0
  15. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  16. */
  17. namespace Cake\Test\TestCase\View;
  18. use Cake\Controller\Controller;
  19. use Cake\Core\Configure;
  20. use Cake\Network\Request;
  21. use Cake\Network\Response;
  22. use Cake\TestSuite\TestCase;
  23. use Cake\Utility\Xml;
  24. /**
  25. * XmlViewTest
  26. *
  27. */
  28. class XmlViewTest extends TestCase
  29. {
  30. public function setUp()
  31. {
  32. parent::setUp();
  33. Configure::write('debug', false);
  34. }
  35. /**
  36. * testRenderWithoutView method
  37. *
  38. * @return void
  39. */
  40. public function testRenderWithoutView()
  41. {
  42. $Request = new Request();
  43. $Response = new Response();
  44. $Controller = new Controller($Request, $Response);
  45. $data = ['users' => ['user' => ['user1', 'user2']]];
  46. $Controller->set(['users' => $data, '_serialize' => 'users']);
  47. $Controller->viewClass = 'Xml';
  48. $View = $Controller->createView();
  49. $output = $View->render(false);
  50. $this->assertSame(Xml::build($data)->asXML(), $output);
  51. $this->assertSame('application/xml', $Response->type());
  52. $data = [
  53. [
  54. 'User' => [
  55. 'username' => 'user1'
  56. ]
  57. ],
  58. [
  59. 'User' => [
  60. 'username' => 'user2'
  61. ]
  62. ]
  63. ];
  64. $Controller->set(['users' => $data, '_serialize' => 'users']);
  65. $Controller->viewClass = 'Xml';
  66. $View = $Controller->createView();
  67. $output = $View->render(false);
  68. $expected = Xml::build(['response' => ['users' => $data]])->asXML();
  69. $this->assertSame($expected, $output);
  70. $Controller->set('_rootNode', 'custom_name');
  71. $Controller->viewClass = 'Xml';
  72. $View = $Controller->createView();
  73. $output = $View->render(false);
  74. $expected = Xml::build(['custom_name' => ['users' => $data]])->asXML();
  75. $this->assertSame($expected, $output);
  76. }
  77. /**
  78. * Test that rendering with _serialize does not load helpers
  79. *
  80. * @return void
  81. */
  82. public function testRenderSerializeNoHelpers()
  83. {
  84. $Request = new Request();
  85. $Response = new Response();
  86. $Controller = new Controller($Request, $Response);
  87. $Controller->helpers = ['Html'];
  88. $Controller->set([
  89. '_serialize' => 'tags',
  90. 'tags' => ['cakephp', 'framework']
  91. ]);
  92. $Controller->viewClass = 'Xml';
  93. $View = $Controller->createView();
  94. $View->render();
  95. $this->assertFalse(isset($View->Html), 'No helper loaded.');
  96. }
  97. /**
  98. * Test that rendering with _serialize respects XML options.
  99. *
  100. * @return void
  101. */
  102. public function testRenderSerializeWithOptions()
  103. {
  104. $Request = new Request();
  105. $Response = new Response();
  106. $Controller = new Controller($Request, $Response);
  107. $data = [
  108. '_serialize' => ['tags', 'nope'],
  109. '_xmlOptions' => ['format' => 'attributes', 'return' => 'domdocument'],
  110. 'tags' => [
  111. 'tag' => [
  112. [
  113. 'id' => '1',
  114. 'name' => 'defect'
  115. ],
  116. [
  117. 'id' => '2',
  118. 'name' => 'enhancement'
  119. ]
  120. ]
  121. ]
  122. ];
  123. $Controller->set($data);
  124. $Controller->viewClass = 'Xml';
  125. $View = $Controller->createView();
  126. $result = $View->render();
  127. $expected = Xml::build(['response' => ['tags' => $data['tags']]], $data['_xmlOptions'])->saveXML();
  128. $this->assertSame($expected, $result);
  129. }
  130. /**
  131. * Test that rendering with _serialize can work with string setting.
  132. *
  133. * @return void
  134. */
  135. public function testRenderSerializeWithString()
  136. {
  137. $Request = new Request();
  138. $Response = new Response();
  139. $Controller = new Controller($Request, $Response);
  140. $data = [
  141. '_serialize' => 'tags',
  142. '_xmlOptions' => ['format' => 'attributes'],
  143. 'tags' => [
  144. 'tags' => [
  145. 'tag' => [
  146. [
  147. 'id' => '1',
  148. 'name' => 'defect'
  149. ],
  150. [
  151. 'id' => '2',
  152. 'name' => 'enhancement'
  153. ]
  154. ]
  155. ]
  156. ]
  157. ];
  158. $Controller->set($data);
  159. $Controller->viewClass = 'Xml';
  160. $View = $Controller->createView();
  161. $result = $View->render();
  162. $expected = Xml::build($data['tags'], $data['_xmlOptions'])->asXML();
  163. $this->assertSame($expected, $result);
  164. }
  165. /**
  166. * Test render with an array in _serialize
  167. *
  168. * @return void
  169. */
  170. public function testRenderWithoutViewMultiple()
  171. {
  172. $Request = new Request();
  173. $Response = new Response();
  174. $Controller = new Controller($Request, $Response);
  175. $data = ['no' => 'nope', 'user' => 'fake', 'list' => ['item1', 'item2']];
  176. $Controller->set($data);
  177. $Controller->set('_serialize', ['no', 'user']);
  178. $Controller->viewClass = 'Xml';
  179. $View = $Controller->createView();
  180. $this->assertSame('application/xml', $Response->type());
  181. $output = $View->render(false);
  182. $expected = [
  183. 'response' => ['no' => $data['no'], 'user' => $data['user']]
  184. ];
  185. $this->assertSame(Xml::build($expected)->asXML(), $output);
  186. $Controller->set('_rootNode', 'custom_name');
  187. $Controller->viewClass = 'Xml';
  188. $View = $Controller->createView();
  189. $output = $View->render(false);
  190. $expected = [
  191. 'custom_name' => ['no' => $data['no'], 'user' => $data['user']]
  192. ];
  193. $this->assertSame(Xml::build($expected)->asXML(), $output);
  194. }
  195. /**
  196. * Test render with an array in _serialize and alias
  197. *
  198. * @return void
  199. */
  200. public function testRenderWithoutViewMultipleAndAlias()
  201. {
  202. $Request = new Request();
  203. $Response = new Response();
  204. $Controller = new Controller($Request, $Response);
  205. $data = ['original_name' => 'my epic name', 'user' => 'fake', 'list' => ['item1', 'item2']];
  206. $Controller->set($data);
  207. $Controller->set('_serialize', ['new_name' => 'original_name', 'user']);
  208. $Controller->viewClass = 'Xml';
  209. $View = $Controller->createView();
  210. $this->assertSame('application/xml', $Response->type());
  211. $output = $View->render(false);
  212. $expected = [
  213. 'response' => ['new_name' => $data['original_name'], 'user' => $data['user']]
  214. ];
  215. $this->assertSame(Xml::build($expected)->asXML(), $output);
  216. $Controller->set('_rootNode', 'custom_name');
  217. $Controller->viewClass = 'Xml';
  218. $View = $Controller->createView();
  219. $output = $View->render(false);
  220. $expected = [
  221. 'custom_name' => ['new_name' => $data['original_name'], 'user' => $data['user']]
  222. ];
  223. $this->assertSame(Xml::build($expected)->asXML(), $output);
  224. }
  225. /**
  226. * test rendering with _serialize true
  227. *
  228. * @return void
  229. */
  230. public function testRenderWithSerializeTrue()
  231. {
  232. $Request = new Request();
  233. $Response = new Response();
  234. $Controller = new Controller($Request, $Response);
  235. $data = ['users' => ['user' => ['user1', 'user2']]];
  236. $Controller->set(['users' => $data, '_serialize' => true]);
  237. $Controller->viewClass = 'Xml';
  238. $View = $Controller->createView();
  239. $output = $View->render();
  240. $this->assertSame(Xml::build($data)->asXML(), $output);
  241. $this->assertSame('application/xml', $Response->type());
  242. $data = ['no' => 'nope', 'user' => 'fake', 'list' => ['item1', 'item2']];
  243. $Controller->viewVars = [];
  244. $Controller->set($data);
  245. $Controller->set('_serialize', true);
  246. $View = $Controller->createView();
  247. $output = $View->render();
  248. $expected = [
  249. 'response' => $data
  250. ];
  251. $this->assertSame(Xml::build($expected)->asXML(), $output);
  252. }
  253. /**
  254. * testRenderWithView method
  255. *
  256. * @return void
  257. */
  258. public function testRenderWithView()
  259. {
  260. $Request = new Request();
  261. $Response = new Response();
  262. $Controller = new Controller($Request, $Response);
  263. $Controller->name = 'Posts';
  264. $data = [
  265. [
  266. 'User' => [
  267. 'username' => 'user1'
  268. ]
  269. ],
  270. [
  271. 'User' => [
  272. 'username' => 'user2'
  273. ]
  274. ]
  275. ];
  276. $Controller->set('users', $data);
  277. $Controller->viewClass = 'Xml';
  278. $View = $Controller->createView();
  279. $View->viewPath = 'Posts';
  280. $output = $View->render('index');
  281. $expected = [
  282. 'users' => ['user' => ['user1', 'user2']]
  283. ];
  284. $expected = Xml::build($expected)->asXML();
  285. $this->assertSame($expected, $output);
  286. $this->assertSame('application/xml', $Response->type());
  287. $this->assertInstanceOf('Cake\View\HelperRegistry', $View->helpers());
  288. }
  289. }