PageRenderTime 26ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/cake/tests/cases/libs/controller/components/cookie.test.php

http://github.com/Datawalke/Coordino
PHP | 530 lines | 293 code | 66 blank | 171 comment | 2 complexity | dc9853df58ba7fd9cb09074f05088825 MD5 | raw file
  1. <?php
  2. /**
  3. * CookieComponentTest file
  4. *
  5. * PHP versions 4 and 5
  6. *
  7. * CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
  8. * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
  9. *
  10. * Licensed under The Open Group Test Suite License
  11. * Redistributions of files must retain the above copyright notice.
  12. *
  13. * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
  14. * @link http://book.cakephp.org/view/1196/Testing CakePHP(tm) Tests
  15. * @package cake
  16. * @subpackage cake.tests.cases.libs.controller.components
  17. * @since CakePHP(tm) v 1.2.0.5435
  18. * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
  19. */
  20. App::import('Controller', array('Component', 'Controller'), false);
  21. App::import('Component', 'Cookie');
  22. /**
  23. * CookieComponentTestController class
  24. *
  25. * @package cake
  26. * @subpackage cake.tests.cases.libs.controller.components
  27. */
  28. class CookieComponentTestController extends Controller {
  29. /**
  30. * components property
  31. *
  32. * @var array
  33. * @access public
  34. */
  35. var $components = array('Cookie');
  36. /**
  37. * beforeFilter method
  38. *
  39. * @access public
  40. * @return void
  41. */
  42. function beforeFilter() {
  43. $this->Cookie->name = 'CakeTestCookie';
  44. $this->Cookie->time = 10;
  45. $this->Cookie->path = '/';
  46. $this->Cookie->domain = '';
  47. $this->Cookie->secure = false;
  48. $this->Cookie->key = 'somerandomhaskey';
  49. }
  50. }
  51. /**
  52. * CookieComponentTest class
  53. *
  54. * @package cake
  55. * @subpackage cake.tests.cases.libs.controller.components
  56. */
  57. class CookieComponentTest extends CakeTestCase {
  58. /**
  59. * Controller property
  60. *
  61. * @var CookieComponentTestController
  62. * @access public
  63. */
  64. var $Controller;
  65. /**
  66. * start
  67. *
  68. * @access public
  69. * @return void
  70. */
  71. function start() {
  72. $this->Controller = new CookieComponentTestController();
  73. $this->Controller->constructClasses();
  74. $this->Controller->Component->initialize($this->Controller);
  75. $this->Controller->beforeFilter();
  76. $this->Controller->Component->startup($this->Controller);
  77. $this->Controller->Cookie->destroy();
  78. }
  79. /**
  80. * end
  81. *
  82. * @access public
  83. * @return void
  84. */
  85. function end() {
  86. $this->Controller->Cookie->destroy();
  87. }
  88. /**
  89. * test that initialize sets settings from components array
  90. *
  91. * @return void
  92. */
  93. function testInitialize() {
  94. $settings = array(
  95. 'time' => '5 days',
  96. 'path' => '/'
  97. );
  98. $this->Controller->Cookie->initialize($this->Controller, $settings);
  99. $this->assertEqual($this->Controller->Cookie->time, $settings['time']);
  100. $this->assertEqual($this->Controller->Cookie->path, $settings['path']);
  101. }
  102. /**
  103. * testCookieName
  104. *
  105. * @access public
  106. * @return void
  107. */
  108. function testCookieName() {
  109. $this->assertEqual($this->Controller->Cookie->name, 'CakeTestCookie');
  110. }
  111. /**
  112. * testSettingEncryptedCookieData
  113. *
  114. * @access public
  115. * @return void
  116. */
  117. function testSettingEncryptedCookieData() {
  118. $this->Controller->Cookie->write('Encrytped_array', array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!'));
  119. $this->Controller->Cookie->write('Encrytped_multi_cookies.name', 'CakePHP');
  120. $this->Controller->Cookie->write('Encrytped_multi_cookies.version', '1.2.0.x');
  121. $this->Controller->Cookie->write('Encrytped_multi_cookies.tag', 'CakePHP Rocks!');
  122. }
  123. /**
  124. * testReadEncryptedCookieData
  125. *
  126. * @access public
  127. * @return void
  128. */
  129. function testReadEncryptedCookieData() {
  130. $data = $this->Controller->Cookie->read('Encrytped_array');
  131. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  132. $this->assertEqual($data, $expected);
  133. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies');
  134. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  135. $this->assertEqual($data, $expected);
  136. }
  137. /**
  138. * testSettingPlainCookieData
  139. *
  140. * @access public
  141. * @return void
  142. */
  143. function testSettingPlainCookieData() {
  144. $this->Controller->Cookie->write('Plain_array', array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!'), false);
  145. $this->Controller->Cookie->write('Plain_multi_cookies.name', 'CakePHP', false);
  146. $this->Controller->Cookie->write('Plain_multi_cookies.version', '1.2.0.x', false);
  147. $this->Controller->Cookie->write('Plain_multi_cookies.tag', 'CakePHP Rocks!', false);
  148. }
  149. /**
  150. * testReadPlainCookieData
  151. *
  152. * @access public
  153. * @return void
  154. */
  155. function testReadPlainCookieData() {
  156. $data = $this->Controller->Cookie->read('Plain_array');
  157. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  158. $this->assertEqual($data, $expected);
  159. $data = $this->Controller->Cookie->read('Plain_multi_cookies');
  160. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  161. $this->assertEqual($data, $expected);
  162. }
  163. /**
  164. * testWritePlainCookieArray
  165. *
  166. * @access public
  167. * @return void
  168. */
  169. function testWritePlainCookieArray() {
  170. $this->Controller->Cookie->write(array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!'), null, false);
  171. $this->assertEqual($this->Controller->Cookie->read('name'), 'CakePHP');
  172. $this->assertEqual($this->Controller->Cookie->read('version'), '1.2.0.x');
  173. $this->assertEqual($this->Controller->Cookie->read('tag'), 'CakePHP Rocks!');
  174. $this->Controller->Cookie->delete('name');
  175. $this->Controller->Cookie->delete('version');
  176. $this->Controller->Cookie->delete('tag');
  177. }
  178. /**
  179. * testReadingCookieValue
  180. *
  181. * @access public
  182. * @return void
  183. */
  184. function testReadingCookieValue() {
  185. $data = $this->Controller->Cookie->read();
  186. $expected = array(
  187. 'Encrytped_array' => array(
  188. 'name' => 'CakePHP',
  189. 'version' => '1.2.0.x',
  190. 'tag' => 'CakePHP Rocks!'),
  191. 'Encrytped_multi_cookies' => array(
  192. 'name' => 'CakePHP',
  193. 'version' => '1.2.0.x',
  194. 'tag' => 'CakePHP Rocks!'),
  195. 'Plain_array' => array(
  196. 'name' => 'CakePHP',
  197. 'version' => '1.2.0.x',
  198. 'tag' => 'CakePHP Rocks!'),
  199. 'Plain_multi_cookies' => array(
  200. 'name' => 'CakePHP',
  201. 'version' => '1.2.0.x',
  202. 'tag' => 'CakePHP Rocks!'));
  203. $this->assertEqual($data, $expected);
  204. }
  205. /**
  206. * testDeleteCookieValue
  207. *
  208. * @access public
  209. * @return void
  210. */
  211. function testDeleteCookieValue() {
  212. $this->Controller->Cookie->delete('Encrytped_multi_cookies.name');
  213. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies');
  214. $expected = array('version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  215. $this->assertEqual($data, $expected);
  216. $this->Controller->Cookie->delete('Encrytped_array');
  217. $data = $this->Controller->Cookie->read('Encrytped_array');
  218. $expected = array();
  219. $this->assertEqual($data, $expected);
  220. $this->Controller->Cookie->delete('Plain_multi_cookies.name');
  221. $data = $this->Controller->Cookie->read('Plain_multi_cookies');
  222. $expected = array('version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  223. $this->assertEqual($data, $expected);
  224. $this->Controller->Cookie->delete('Plain_array');
  225. $data = $this->Controller->Cookie->read('Plain_array');
  226. $expected = array();
  227. $this->assertEqual($data, $expected);
  228. }
  229. /**
  230. * testSettingCookiesWithArray
  231. *
  232. * @access public
  233. * @return void
  234. */
  235. function testSettingCookiesWithArray() {
  236. $this->Controller->Cookie->destroy();
  237. $this->Controller->Cookie->write(array('Encrytped_array' => array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!')));
  238. $this->Controller->Cookie->write(array('Encrytped_multi_cookies.name' => 'CakePHP'));
  239. $this->Controller->Cookie->write(array('Encrytped_multi_cookies.version' => '1.2.0.x'));
  240. $this->Controller->Cookie->write(array('Encrytped_multi_cookies.tag' => 'CakePHP Rocks!'));
  241. $this->Controller->Cookie->write(array('Plain_array' => array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!')), null, false);
  242. $this->Controller->Cookie->write(array('Plain_multi_cookies.name' => 'CakePHP'), null, false);
  243. $this->Controller->Cookie->write(array('Plain_multi_cookies.version' => '1.2.0.x'), null, false);
  244. $this->Controller->Cookie->write(array('Plain_multi_cookies.tag' => 'CakePHP Rocks!'), null, false);
  245. }
  246. /**
  247. * testReadingCookieArray
  248. *
  249. * @access public
  250. * @return void
  251. */
  252. function testReadingCookieArray() {
  253. $data = $this->Controller->Cookie->read('Encrytped_array.name');
  254. $expected = 'CakePHP';
  255. $this->assertEqual($data, $expected);
  256. $data = $this->Controller->Cookie->read('Encrytped_array.version');
  257. $expected = '1.2.0.x';
  258. $this->assertEqual($data, $expected);
  259. $data = $this->Controller->Cookie->read('Encrytped_array.tag');
  260. $expected = 'CakePHP Rocks!';
  261. $this->assertEqual($data, $expected);
  262. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies.name');
  263. $expected = 'CakePHP';
  264. $this->assertEqual($data, $expected);
  265. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies.version');
  266. $expected = '1.2.0.x';
  267. $this->assertEqual($data, $expected);
  268. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies.tag');
  269. $expected = 'CakePHP Rocks!';
  270. $this->assertEqual($data, $expected);
  271. $data = $this->Controller->Cookie->read('Plain_array.name');
  272. $expected = 'CakePHP';
  273. $this->assertEqual($data, $expected);
  274. $data = $this->Controller->Cookie->read('Plain_array.version');
  275. $expected = '1.2.0.x';
  276. $this->assertEqual($data, $expected);
  277. $data = $this->Controller->Cookie->read('Plain_array.tag');
  278. $expected = 'CakePHP Rocks!';
  279. $this->assertEqual($data, $expected);
  280. $data = $this->Controller->Cookie->read('Plain_multi_cookies.name');
  281. $expected = 'CakePHP';
  282. $this->assertEqual($data, $expected);
  283. $data = $this->Controller->Cookie->read('Plain_multi_cookies.version');
  284. $expected = '1.2.0.x';
  285. $this->assertEqual($data, $expected);
  286. $data = $this->Controller->Cookie->read('Plain_multi_cookies.tag');
  287. $expected = 'CakePHP Rocks!';
  288. $this->assertEqual($data, $expected);
  289. }
  290. /**
  291. * testReadingCookieDataOnStartup
  292. *
  293. * @access public
  294. * @return void
  295. */
  296. function testReadingCookieDataOnStartup() {
  297. $this->Controller->Cookie->destroy();
  298. $data = $this->Controller->Cookie->read('Encrytped_array');
  299. $expected = array();
  300. $this->assertEqual($data, $expected);
  301. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies');
  302. $expected = array();
  303. $this->assertEqual($data, $expected);
  304. $data = $this->Controller->Cookie->read('Plain_array');
  305. $expected = array();
  306. $this->assertEqual($data, $expected);
  307. $data = $this->Controller->Cookie->read('Plain_multi_cookies');
  308. $expected = array();
  309. $this->assertEqual($data, $expected);
  310. $_COOKIE['CakeTestCookie'] = array(
  311. 'Encrytped_array' => $this->__encrypt(array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!')),
  312. 'Encrytped_multi_cookies' => array(
  313. 'name' => $this->__encrypt('CakePHP'),
  314. 'version' => $this->__encrypt('1.2.0.x'),
  315. 'tag' => $this->__encrypt('CakePHP Rocks!')),
  316. 'Plain_array' => 'name|CakePHP,version|1.2.0.x,tag|CakePHP Rocks!',
  317. 'Plain_multi_cookies' => array(
  318. 'name' => 'CakePHP',
  319. 'version' => '1.2.0.x',
  320. 'tag' => 'CakePHP Rocks!'));
  321. $this->Controller->Cookie->startup();
  322. $data = $this->Controller->Cookie->read('Encrytped_array');
  323. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  324. $this->assertEqual($data, $expected);
  325. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies');
  326. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  327. $this->assertEqual($data, $expected);
  328. $data = $this->Controller->Cookie->read('Plain_array');
  329. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  330. $this->assertEqual($data, $expected);
  331. $data = $this->Controller->Cookie->read('Plain_multi_cookies');
  332. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  333. $this->assertEqual($data, $expected);
  334. $this->Controller->Cookie->destroy();
  335. unset($_COOKIE['CakeTestCookie']);
  336. }
  337. /**
  338. * testReadingCookieDataWithoutStartup
  339. *
  340. * @access public
  341. * @return void
  342. */
  343. function testReadingCookieDataWithoutStartup() {
  344. $data = $this->Controller->Cookie->read('Encrytped_array');
  345. $expected = array();
  346. $this->assertEqual($data, $expected);
  347. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies');
  348. $expected = array();
  349. $this->assertEqual($data, $expected);
  350. $data = $this->Controller->Cookie->read('Plain_array');
  351. $expected = array();
  352. $this->assertEqual($data, $expected);
  353. $data = $this->Controller->Cookie->read('Plain_multi_cookies');
  354. $expected = array();
  355. $this->assertEqual($data, $expected);
  356. $_COOKIE['CakeTestCookie'] = array(
  357. 'Encrytped_array' => $this->__encrypt(array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!')),
  358. 'Encrytped_multi_cookies' => array(
  359. 'name' => $this->__encrypt('CakePHP'),
  360. 'version' => $this->__encrypt('1.2.0.x'),
  361. 'tag' => $this->__encrypt('CakePHP Rocks!')),
  362. 'Plain_array' => 'name|CakePHP,version|1.2.0.x,tag|CakePHP Rocks!',
  363. 'Plain_multi_cookies' => array(
  364. 'name' => 'CakePHP',
  365. 'version' => '1.2.0.x',
  366. 'tag' => 'CakePHP Rocks!'));
  367. $data = $this->Controller->Cookie->read('Encrytped_array');
  368. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  369. $this->assertEqual($data, $expected);
  370. $data = $this->Controller->Cookie->read('Encrytped_multi_cookies');
  371. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  372. $this->assertEqual($data, $expected);
  373. $data = $this->Controller->Cookie->read('Plain_array');
  374. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  375. $this->assertEqual($data, $expected);
  376. $data = $this->Controller->Cookie->read('Plain_multi_cookies');
  377. $expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' =>'CakePHP Rocks!');
  378. $this->assertEqual($data, $expected);
  379. $this->Controller->Cookie->destroy();
  380. unset($_COOKIE['CakeTestCookie']);
  381. }
  382. /**
  383. * test that no error is issued for non array data.
  384. *
  385. * @return void
  386. */
  387. function testNoErrorOnNonArrayData() {
  388. $this->Controller->Cookie->destroy();
  389. $_COOKIE['CakeTestCookie'] = 'kaboom';
  390. $this->assertNull($this->Controller->Cookie->read('value'));
  391. }
  392. /**
  393. * test that deleting a top level keys kills the child elements too.
  394. *
  395. * @return void
  396. */
  397. function testDeleteRemovesChildren() {
  398. $_COOKIE['CakeTestCookie'] = array(
  399. 'User' => array('email' => 'example@example.com', 'name' => 'mark'),
  400. 'other' => 'value'
  401. );
  402. $this->Controller->Cookie->startup();
  403. $this->assertEqual('mark', $this->Controller->Cookie->read('User.name'));
  404. $this->Controller->Cookie->delete('User');
  405. $this->assertFalse($this->Controller->Cookie->read('User.email'));
  406. $this->Controller->Cookie->destroy();
  407. }
  408. /**
  409. * Test deleting recursively with keys that don't exist.
  410. *
  411. * @return void
  412. */
  413. function testDeleteChildrenNotExist() {
  414. $this->assertNull($this->Controller->Cookie->delete('NotFound'));
  415. $this->assertNull($this->Controller->Cookie->delete('Not.Found'));
  416. }
  417. /**
  418. * Test that 1.3 can read 2.0 format codes if json_encode exists.
  419. *
  420. * @return void
  421. */
  422. function testForwardsCompatibility() {
  423. if ($this->skipIf(!function_exists('json_decode'), 'no json_decode, skipping.')) {
  424. return;
  425. }
  426. $_COOKIE['CakeTestCookie'] = array(
  427. 'JSON' => '{"name":"value"}',
  428. 'Empty' => '',
  429. 'String' => '{"somewhat:"broken"}'
  430. );
  431. $this->Controller->Cookie->startup($this->Controller);
  432. $this->assertEqual(array('name' => 'value'), $this->Controller->Cookie->read('JSON'));
  433. $this->assertEqual('value', $this->Controller->Cookie->read('JSON.name'));
  434. $this->assertEqual('', $this->Controller->Cookie->read('Empty'));
  435. $this->assertEqual('{"somewhat:"broken"}', $this->Controller->Cookie->read('String'));
  436. }
  437. /**
  438. * encrypt method
  439. *
  440. * @param mixed $value
  441. * @return string
  442. * @access private
  443. */
  444. function __encrypt($value) {
  445. if (is_array($value)) {
  446. $value = $this->__implode($value);
  447. }
  448. return "Q2FrZQ==." . base64_encode(Security::cipher($value, $this->Controller->Cookie->key));
  449. }
  450. /**
  451. * implode method
  452. *
  453. * @param array $value
  454. * @return string
  455. * @access private
  456. */
  457. function __implode($array) {
  458. $string = '';
  459. foreach ($array as $key => $value) {
  460. $string .= ',' . $key . '|' . $value;
  461. }
  462. return substr($string, 1);
  463. }
  464. }