Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
16591 anikendra 1
<?php
2
/**
3
 * CookieComponentTest file
4
 *
5
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
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://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
14
 * @package       Cake.Test.Case.Controller.Component
15
 * @since         CakePHP(tm) v 1.2.0.5435
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('Component', 'Controller');
20
App::uses('Controller', 'Controller');
21
App::uses('CookieComponent', 'Controller/Component');
22
 
23
/**
24
 * CookieComponentTestController class
25
 *
26
 * @package       Cake.Test.Case.Controller.Component
27
 */
28
class CookieComponentTestController extends Controller {
29
 
30
/**
31
 * components property
32
 *
33
 * @var array
34
 */
35
	public $components = array('Cookie');
36
 
37
/**
38
 * beforeFilter method
39
 *
40
 * @return void
41
 */
42
	public 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
 
53
/**
54
 * CookieComponentTest class
55
 *
56
 * @package       Cake.Test.Case.Controller.Component
57
 */
58
class CookieComponentTest extends CakeTestCase {
59
 
60
/**
61
 * Controller property
62
 *
63
 * @var CookieComponentTestController
64
 */
65
	public $Controller;
66
 
67
/**
68
 * start
69
 *
70
 * @return void
71
 */
72
	public function setUp() {
73
		parent::setUp();
74
		$_COOKIE = array();
75
		$this->Controller = new CookieComponentTestController(new CakeRequest(), new CakeResponse());
76
		$this->Controller->constructClasses();
77
		$this->Cookie = $this->Controller->Cookie;
78
 
79
		$this->Cookie->name = 'CakeTestCookie';
80
		$this->Cookie->time = 10;
81
		$this->Cookie->path = '/';
82
		$this->Cookie->domain = '';
83
		$this->Cookie->secure = false;
84
		$this->Cookie->key = 'somerandomhaskey';
85
 
86
		$this->Cookie->startup($this->Controller);
87
	}
88
 
89
/**
90
 * end
91
 *
92
 * @return void
93
 */
94
	public function tearDown() {
95
		parent::tearDown();
96
		$this->Cookie->destroy();
97
	}
98
 
99
/**
100
 * sets up some default cookie data.
101
 *
102
 * @return void
103
 */
104
	protected function _setCookieData() {
105
		$this->Cookie->write(array('Encrytped_array' => array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!')));
106
		$this->Cookie->write(array('Encrytped_multi_cookies.name' => 'CakePHP'));
107
		$this->Cookie->write(array('Encrytped_multi_cookies.version' => '1.2.0.x'));
108
		$this->Cookie->write(array('Encrytped_multi_cookies.tag' => 'CakePHP Rocks!'));
109
 
110
		$this->Cookie->write(array('Plain_array' => array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!')), null, false);
111
		$this->Cookie->write(array('Plain_multi_cookies.name' => 'CakePHP'), null, false);
112
		$this->Cookie->write(array('Plain_multi_cookies.version' => '1.2.0.x'), null, false);
113
		$this->Cookie->write(array('Plain_multi_cookies.tag' => 'CakePHP Rocks!'), null, false);
114
	}
115
 
116
/**
117
 * test that initialize sets settings from components array
118
 *
119
 * @return void
120
 */
121
	public function testSettings() {
122
		$settings = array(
123
			'time' => '5 days',
124
			'path' => '/'
125
		);
126
		$Cookie = new CookieComponent(new ComponentCollection(), $settings);
127
		$this->assertEquals($Cookie->time, $settings['time']);
128
		$this->assertEquals($Cookie->path, $settings['path']);
129
	}
130
 
131
/**
132
 * testCookieName
133
 *
134
 * @return void
135
 */
136
	public function testCookieName() {
137
		$this->assertEquals('CakeTestCookie', $this->Cookie->name);
138
	}
139
 
140
/**
141
 * testReadEncryptedCookieData
142
 *
143
 * @return void
144
 */
145
	public function testReadEncryptedCookieData() {
146
		$this->_setCookieData();
147
		$data = $this->Cookie->read('Encrytped_array');
148
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
149
		$this->assertEquals($expected, $data);
150
 
151
		$data = $this->Cookie->read('Encrytped_multi_cookies');
152
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
153
		$this->assertEquals($expected, $data);
154
	}
155
 
156
/**
157
 * testReadPlainCookieData
158
 *
159
 * @return void
160
 */
161
	public function testReadPlainCookieData() {
162
		$this->_setCookieData();
163
		$data = $this->Cookie->read('Plain_array');
164
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
165
		$this->assertEquals($expected, $data);
166
 
167
		$data = $this->Cookie->read('Plain_multi_cookies');
168
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
169
		$this->assertEquals($expected, $data);
170
	}
171
 
172
/**
173
 * test read() after switching the cookie name.
174
 *
175
 * @return void
176
 */
177
	public function testReadWithNameSwitch() {
178
		$_COOKIE = array(
179
			'CakeTestCookie' => array(
180
				'key' => 'value'
181
			),
182
			'OtherTestCookie' => array(
183
				'key' => 'other value'
184
			)
185
		);
186
		$this->assertEquals('value', $this->Cookie->read('key'));
187
 
188
		$this->Cookie->name = 'OtherTestCookie';
189
		$this->assertEquals('other value', $this->Cookie->read('key'));
190
	}
191
 
192
/**
193
 * test a simple write()
194
 *
195
 * @return void
196
 */
197
	public function testWriteSimple() {
198
		$this->Cookie->write('Testing', 'value');
199
		$result = $this->Cookie->read('Testing');
200
 
201
		$this->assertEquals('value', $result);
202
	}
203
 
204
/**
205
 * test write() encrypted data with falsey value
206
 *
207
 * @return void
208
 */
209
	public function testWriteWithFalseyValue() {
210
		$this->Cookie->type('aes');
211
		$this->Cookie->key = 'qSI232qs*&sXOw!adre@34SAv!@*(XSL#$%)asGb$@11~_+!@#HKis~#^';
212
 
213
		$this->Cookie->write('Testing');
214
		$result = $this->Cookie->read('Testing');
215
		$this->assertNull($result);
216
 
217
		$this->Cookie->write('Testing', '');
218
		$result = $this->Cookie->read('Testing');
219
		$this->assertEquals('', $result);
220
 
221
		$this->Cookie->write('Testing', false);
222
		$result = $this->Cookie->read('Testing');
223
		$this->assertFalse($result);
224
 
225
		$this->Cookie->write('Testing', 1);
226
		$result = $this->Cookie->read('Testing');
227
		$this->assertEquals(1, $result);
228
 
229
		$this->Cookie->write('Testing', '0');
230
		$result = $this->Cookie->read('Testing');
231
		$this->assertSame('0', $result);
232
 
233
		$this->Cookie->write('Testing', 0);
234
		$result = $this->Cookie->read('Testing');
235
		$this->assertSame(0, $result);
236
	}
237
 
238
/**
239
 * test that two write() calls use the expiry.
240
 *
241
 * @return void
242
 */
243
	public function testWriteMultipleShareExpiry() {
244
		$this->Cookie->write('key1', 'value1', false);
245
		$this->Cookie->write('key2', 'value2', false);
246
 
247
		$name = $this->Cookie->name . '[key1]';
248
		$result = $this->Controller->response->cookie($name);
249
		$this->assertWithinMargin(time() + 10, $result['expire'], 2, 'Expiry time is wrong');
250
 
251
		$name = $this->Cookie->name . '[key2]';
252
		$result = $this->Controller->response->cookie($name);
253
		$this->assertWithinMargin(time() + 10, $result['expire'], 2, 'Expiry time is wrong');
254
	}
255
 
256
/**
257
 * test write with distant future cookies
258
 *
259
 * @return void
260
 */
261
	public function testWriteFarFuture() {
262
		$this->Cookie->write('Testing', 'value', false, '+90 years');
263
		$future = new DateTime('now');
264
		$future->modify('+90 years');
265
 
266
		$expected = array(
267
			'name' => $this->Cookie->name . '[Testing]',
268
			'value' => 'value',
269
			'path' => '/',
270
			'domain' => '',
271
			'secure' => false,
272
			'httpOnly' => false);
273
		$result = $this->Controller->response->cookie($this->Cookie->name . '[Testing]');
274
 
275
		$this->assertEquals($future->format('U'), $result['expire'], '', 3);
276
		unset($result['expire']);
277
 
278
		$this->assertEquals($expected, $result);
279
	}
280
 
281
/**
282
 * test write with httpOnly cookies
283
 *
284
 * @return void
285
 */
286
	public function testWriteHttpOnly() {
287
		$this->Cookie->httpOnly = true;
288
		$this->Cookie->secure = false;
289
		$this->Cookie->write('Testing', 'value', false);
290
		$expected = array(
291
			'name' => $this->Cookie->name . '[Testing]',
292
			'value' => 'value',
293
			'expire' => time() + 10,
294
			'path' => '/',
295
			'domain' => '',
296
			'secure' => false,
297
			'httpOnly' => true);
298
		$result = $this->Controller->response->cookie($this->Cookie->name . '[Testing]');
299
		$this->assertEquals($expected, $result);
300
	}
301
 
302
/**
303
 * test delete with httpOnly
304
 *
305
 * @return void
306
 */
307
	public function testDeleteHttpOnly() {
308
		$this->Cookie->httpOnly = true;
309
		$this->Cookie->secure = false;
310
		$this->Cookie->delete('Testing', false);
311
		$expected = array(
312
			'name' => $this->Cookie->name . '[Testing]',
313
			'value' => '',
314
			'expire' => time() - 42000,
315
			'path' => '/',
316
			'domain' => '',
317
			'secure' => false,
318
			'httpOnly' => true);
319
		$result = $this->Controller->response->cookie($this->Cookie->name . '[Testing]');
320
		$this->assertEquals($expected, $result);
321
	}
322
 
323
/**
324
 * testWritePlainCookieArray
325
 *
326
 * @return void
327
 */
328
	public function testWritePlainCookieArray() {
329
		$this->Cookie->write(array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!'), null, false);
330
 
331
		$this->assertEquals('CakePHP', $this->Cookie->read('name'));
332
		$this->assertEquals('1.2.0.x', $this->Cookie->read('version'));
333
		$this->assertEquals('CakePHP Rocks!', $this->Cookie->read('tag'));
334
 
335
		$this->Cookie->delete('name');
336
		$this->Cookie->delete('version');
337
		$this->Cookie->delete('tag');
338
	}
339
 
340
/**
341
 * test writing values that are not scalars
342
 *
343
 * @return void
344
 */
345
	public function testWriteArrayValues() {
346
		$this->Cookie->secure = false;
347
		$this->Cookie->write('Testing', array(1, 2, 3), false);
348
		$expected = array(
349
			'name' => $this->Cookie->name . '[Testing]',
350
			'value' => '[1,2,3]',
351
			'path' => '/',
352
			'domain' => '',
353
			'secure' => false,
354
			'httpOnly' => false);
355
		$result = $this->Controller->response->cookie($this->Cookie->name . '[Testing]');
356
 
357
		$this->assertWithinMargin($result['expire'], time() + 10, 1);
358
		unset($result['expire']);
359
		$this->assertEquals($expected, $result);
360
	}
361
 
362
/**
363
 * Test that writing mixed arrays results in the correct data.
364
 *
365
 * @return void
366
 */
367
	public function testWriteMixedArray() {
368
		$this->Cookie->encrypt = false;
369
		$this->Cookie->write('User', array('name' => 'mark'), false);
370
		$this->Cookie->write('User.email', 'mark@example.com', false);
371
		$expected = array(
372
			'name' => $this->Cookie->name . '[User]',
373
			'value' => '{"name":"mark","email":"mark@example.com"}',
374
			'path' => '/',
375
			'domain' => '',
376
			'secure' => false,
377
			'httpOnly' => false
378
		);
379
		$result = $this->Controller->response->cookie($this->Cookie->name . '[User]');
380
		unset($result['expire']);
381
 
382
		$this->assertEquals($expected, $result);
383
 
384
		$this->Cookie->write('User.email', 'mark@example.com', false);
385
		$this->Cookie->write('User', array('name' => 'mark'), false);
386
		$expected = array(
387
			'name' => $this->Cookie->name . '[User]',
388
			'value' => '{"name":"mark"}',
389
			'path' => '/',
390
			'domain' => '',
391
			'secure' => false,
392
			'httpOnly' => false
393
		);
394
		$result = $this->Controller->response->cookie($this->Cookie->name . '[User]');
395
		unset($result['expire']);
396
 
397
		$this->assertEquals($expected, $result);
398
	}
399
 
400
/**
401
 * testReadingCookieValue
402
 *
403
 * @return void
404
 */
405
	public function testReadingCookieValue() {
406
		$this->_setCookieData();
407
		$data = $this->Cookie->read();
408
		$expected = array(
409
			'Encrytped_array' => array(
410
				'name' => 'CakePHP',
411
				'version' => '1.2.0.x',
412
				'tag' => 'CakePHP Rocks!'),
413
			'Encrytped_multi_cookies' => array(
414
				'name' => 'CakePHP',
415
				'version' => '1.2.0.x',
416
				'tag' => 'CakePHP Rocks!'),
417
			'Plain_array' => array(
418
				'name' => 'CakePHP',
419
				'version' => '1.2.0.x',
420
				'tag' => 'CakePHP Rocks!'),
421
			'Plain_multi_cookies' => array(
422
				'name' => 'CakePHP',
423
				'version' => '1.2.0.x',
424
				'tag' => 'CakePHP Rocks!'));
425
		$this->assertEquals($expected, $data);
426
	}
427
 
428
/**
429
 * testDeleteCookieValue
430
 *
431
 * @return void
432
 */
433
	public function testDeleteCookieValue() {
434
		$this->_setCookieData();
435
		$this->Cookie->delete('Encrytped_multi_cookies.name');
436
		$data = $this->Cookie->read('Encrytped_multi_cookies');
437
		$expected = array('version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
438
		$this->assertEquals($expected, $data);
439
 
440
		$this->Cookie->delete('Encrytped_array');
441
		$data = $this->Cookie->read('Encrytped_array');
442
		$this->assertNull($data);
443
 
444
		$this->Cookie->delete('Plain_multi_cookies.name');
445
		$data = $this->Cookie->read('Plain_multi_cookies');
446
		$expected = array('version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
447
		$this->assertEquals($expected, $data);
448
 
449
		$this->Cookie->delete('Plain_array');
450
		$data = $this->Cookie->read('Plain_array');
451
		$this->assertNull($data);
452
	}
453
 
454
/**
455
 * testReadingCookieArray
456
 *
457
 * @return void
458
 */
459
	public function testReadingCookieArray() {
460
		$this->_setCookieData();
461
 
462
		$data = $this->Cookie->read('Encrytped_array.name');
463
		$expected = 'CakePHP';
464
		$this->assertEquals($expected, $data);
465
 
466
		$data = $this->Cookie->read('Encrytped_array.version');
467
		$expected = '1.2.0.x';
468
		$this->assertEquals($expected, $data);
469
 
470
		$data = $this->Cookie->read('Encrytped_array.tag');
471
		$expected = 'CakePHP Rocks!';
472
		$this->assertEquals($expected, $data);
473
 
474
		$data = $this->Cookie->read('Encrytped_multi_cookies.name');
475
		$expected = 'CakePHP';
476
		$this->assertEquals($expected, $data);
477
 
478
		$data = $this->Cookie->read('Encrytped_multi_cookies.version');
479
		$expected = '1.2.0.x';
480
		$this->assertEquals($expected, $data);
481
 
482
		$data = $this->Cookie->read('Encrytped_multi_cookies.tag');
483
		$expected = 'CakePHP Rocks!';
484
		$this->assertEquals($expected, $data);
485
 
486
		$data = $this->Cookie->read('Plain_array.name');
487
		$expected = 'CakePHP';
488
		$this->assertEquals($expected, $data);
489
 
490
		$data = $this->Cookie->read('Plain_array.version');
491
		$expected = '1.2.0.x';
492
		$this->assertEquals($expected, $data);
493
 
494
		$data = $this->Cookie->read('Plain_array.tag');
495
		$expected = 'CakePHP Rocks!';
496
		$this->assertEquals($expected, $data);
497
 
498
		$data = $this->Cookie->read('Plain_multi_cookies.name');
499
		$expected = 'CakePHP';
500
		$this->assertEquals($expected, $data);
501
 
502
		$data = $this->Cookie->read('Plain_multi_cookies.version');
503
		$expected = '1.2.0.x';
504
		$this->assertEquals($expected, $data);
505
 
506
		$data = $this->Cookie->read('Plain_multi_cookies.tag');
507
		$expected = 'CakePHP Rocks!';
508
		$this->assertEquals($expected, $data);
509
	}
510
 
511
/**
512
 * testReadingCookieDataOnStartup
513
 *
514
 * @return void
515
 */
516
	public function testReadingCookieDataOnStartup() {
517
		$data = $this->Cookie->read('Encrytped_array');
518
		$this->assertNull($data);
519
 
520
		$data = $this->Cookie->read('Encrytped_multi_cookies');
521
		$this->assertNull($data);
522
 
523
		$data = $this->Cookie->read('Plain_array');
524
		$this->assertNull($data);
525
 
526
		$data = $this->Cookie->read('Plain_multi_cookies');
527
		$this->assertNull($data);
528
 
529
		$_COOKIE['CakeTestCookie'] = array(
530
				'Encrytped_array' => $this->_encrypt(array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!')),
531
				'Encrytped_multi_cookies' => array(
532
						'name' => $this->_encrypt('CakePHP'),
533
						'version' => $this->_encrypt('1.2.0.x'),
534
						'tag' => $this->_encrypt('CakePHP Rocks!')),
535
				'Plain_array' => '{"name":"CakePHP","version":"1.2.0.x","tag":"CakePHP Rocks!"}',
536
				'Plain_multi_cookies' => array(
537
						'name' => 'CakePHP',
538
						'version' => '1.2.0.x',
539
						'tag' => 'CakePHP Rocks!'));
540
 
541
		$this->Cookie->startup(new CookieComponentTestController());
542
 
543
		$data = $this->Cookie->read('Encrytped_array');
544
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
545
		$this->assertEquals($expected, $data);
546
 
547
		$data = $this->Cookie->read('Encrytped_multi_cookies');
548
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
549
		$this->assertEquals($expected, $data);
550
 
551
		$data = $this->Cookie->read('Plain_array');
552
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
553
		$this->assertEquals($expected, $data);
554
 
555
		$data = $this->Cookie->read('Plain_multi_cookies');
556
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
557
		$this->assertEquals($expected, $data);
558
		$this->Cookie->destroy();
559
		unset($_COOKIE['CakeTestCookie']);
560
	}
561
 
562
/**
563
 * testReadingCookieDataWithoutStartup
564
 *
565
 * @return void
566
 */
567
	public function testReadingCookieDataWithoutStartup() {
568
		$data = $this->Cookie->read('Encrytped_array');
569
		$expected = null;
570
		$this->assertEquals($expected, $data);
571
 
572
		$data = $this->Cookie->read('Encrytped_multi_cookies');
573
		$expected = null;
574
		$this->assertEquals($expected, $data);
575
 
576
		$data = $this->Cookie->read('Plain_array');
577
		$expected = null;
578
		$this->assertEquals($expected, $data);
579
 
580
		$data = $this->Cookie->read('Plain_multi_cookies');
581
		$expected = null;
582
		$this->assertEquals($expected, $data);
583
 
584
		$_COOKIE['CakeTestCookie'] = array(
585
				'Encrytped_array' => $this->_encrypt(array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!')),
586
				'Encrytped_multi_cookies' => array(
587
						'name' => $this->_encrypt('CakePHP'),
588
						'version' => $this->_encrypt('1.2.0.x'),
589
						'tag' => $this->_encrypt('CakePHP Rocks!')),
590
				'Plain_array' => '{"name":"CakePHP","version":"1.2.0.x","tag":"CakePHP Rocks!"}',
591
				'Plain_multi_cookies' => array(
592
						'name' => 'CakePHP',
593
						'version' => '1.2.0.x',
594
						'tag' => 'CakePHP Rocks!'));
595
 
596
		$data = $this->Cookie->read('Encrytped_array');
597
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
598
		$this->assertEquals($expected, $data);
599
 
600
		$data = $this->Cookie->read('Encrytped_multi_cookies');
601
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
602
		$this->assertEquals($expected, $data);
603
 
604
		$data = $this->Cookie->read('Plain_array');
605
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
606
		$this->assertEquals($expected, $data);
607
 
608
		$data = $this->Cookie->read('Plain_multi_cookies');
609
		$expected = array('name' => 'CakePHP', 'version' => '1.2.0.x', 'tag' => 'CakePHP Rocks!');
610
		$this->assertEquals($expected, $data);
611
		$this->Cookie->destroy();
612
		unset($_COOKIE['CakeTestCookie']);
613
	}
614
 
615
/**
616
 * Test Reading legacy cookie values.
617
 *
618
 * @return void
619
 */
620
	public function testReadLegacyCookieValue() {
621
		$_COOKIE['CakeTestCookie'] = array(
622
			'Legacy' => array('value' => $this->_oldImplode(array(1, 2, 3)))
623
		);
624
		$result = $this->Cookie->read('Legacy.value');
625
		$expected = array(1, 2, 3);
626
		$this->assertEquals($expected, $result);
627
	}
628
 
629
/**
630
 * Test reading empty values.
631
 *
632
 * @return void
633
 */
634
	public function testReadEmpty() {
635
		$_COOKIE['CakeTestCookie'] = array(
636
			'JSON' => '{"name":"value"}',
637
			'Empty' => '',
638
			'String' => '{"somewhat:"broken"}',
639
			'Array' => '{}'
640
		);
641
		$this->assertEquals(array('name' => 'value'), $this->Cookie->read('JSON'));
642
		$this->assertEquals('value', $this->Cookie->read('JSON.name'));
643
		$this->assertEquals('', $this->Cookie->read('Empty'));
644
		$this->assertEquals('{"somewhat:"broken"}', $this->Cookie->read('String'));
645
		$this->assertEquals(array(), $this->Cookie->read('Array'));
646
	}
647
 
648
/**
649
 * test that no error is issued for non array data.
650
 *
651
 * @return void
652
 */
653
	public function testNoErrorOnNonArrayData() {
654
		$this->Cookie->destroy();
655
		$_COOKIE['CakeTestCookie'] = 'kaboom';
656
 
657
		$this->assertNull($this->Cookie->read('value'));
658
	}
659
 
660
/**
661
 * testCheck method
662
 *
663
 * @return void
664
 */
665
	public function testCheck() {
666
		$this->Cookie->write('CookieComponentTestCase', 'value');
667
		$this->assertTrue($this->Cookie->check('CookieComponentTestCase'));
668
 
669
		$this->assertFalse($this->Cookie->check('NotExistingCookieComponentTestCase'));
670
	}
671
 
672
/**
673
 * testCheckingSavedEmpty method
674
 *
675
 * @return void
676
 */
677
	public function testCheckingSavedEmpty() {
678
		$this->Cookie->write('CookieComponentTestCase', 0);
679
		$this->assertTrue($this->Cookie->check('CookieComponentTestCase'));
680
 
681
		$this->Cookie->write('CookieComponentTestCase', '0');
682
		$this->assertTrue($this->Cookie->check('CookieComponentTestCase'));
683
 
684
		$this->Cookie->write('CookieComponentTestCase', false);
685
		$this->assertTrue($this->Cookie->check('CookieComponentTestCase'));
686
 
687
		$this->Cookie->write('CookieComponentTestCase', null);
688
		$this->assertFalse($this->Cookie->check('CookieComponentTestCase'));
689
	}
690
 
691
/**
692
 * testCheckKeyWithSpaces method
693
 *
694
 * @return void
695
 */
696
	public function testCheckKeyWithSpaces() {
697
		$this->Cookie->write('CookieComponent Test', "test");
698
		$this->assertTrue($this->Cookie->check('CookieComponent Test'));
699
		$this->Cookie->delete('CookieComponent Test');
700
 
701
		$this->Cookie->write('CookieComponent Test.Test Case', "test");
702
		$this->assertTrue($this->Cookie->check('CookieComponent Test.Test Case'));
703
	}
704
 
705
/**
706
 * testCheckEmpty
707
 *
708
 * @return void
709
 */
710
	public function testCheckEmpty() {
711
		$this->assertFalse($this->Cookie->check());
712
	}
713
 
714
/**
715
 * test that deleting a top level keys kills the child elements too.
716
 *
717
 * @return void
718
 */
719
	public function testDeleteRemovesChildren() {
720
		$_COOKIE['CakeTestCookie'] = array(
721
			'User' => array('email' => 'example@example.com', 'name' => 'mark'),
722
			'other' => 'value'
723
		);
724
		$this->assertEquals('mark', $this->Cookie->read('User.name'));
725
 
726
		$this->Cookie->delete('User');
727
		$this->assertNull($this->Cookie->read('User.email'));
728
		$this->Cookie->destroy();
729
	}
730
 
731
/**
732
 * Test deleting recursively with keys that don't exist.
733
 *
734
 * @return void
735
 */
736
	public function testDeleteChildrenNotExist() {
737
		$this->assertNull($this->Cookie->delete('NotFound'));
738
		$this->assertNull($this->Cookie->delete('Not.Found'));
739
	}
740
 
741
/**
742
 * Helper method for generating old style encoded cookie values.
743
 *
744
 * @return string.
745
 */
746
	protected function _oldImplode(array $array) {
747
		$string = '';
748
		foreach ($array as $key => $value) {
749
			$string .= ',' . $key . '|' . $value;
750
		}
751
		return substr($string, 1);
752
	}
753
 
754
/**
755
 * Implode method to keep keys are multidimensional arrays
756
 *
757
 * @param array $array Map of key and values
758
 * @return string String in the form key1|value1,key2|value2
759
 */
760
	protected function _implode(array $array) {
761
		return json_encode($array);
762
	}
763
 
764
/**
765
 * encrypt method
766
 *
767
 * @param array|string $value
768
 * @return string
769
 */
770
	protected function _encrypt($value) {
771
		if (is_array($value)) {
772
			$value = $this->_implode($value);
773
		}
774
		return "Q2FrZQ==." . base64_encode(Security::cipher($value, $this->Cookie->key));
775
	}
776
 
777
}