Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
13532 anikendra 1
<?php
2
/**
3
 * ScaffoldViewTest 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.View
15
 * @since         CakePHP(tm) v 2.0
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
 
19
App::uses('Controller', 'Controller');
20
App::uses('Scaffold', 'Controller');
21
App::uses('ScaffoldView', 'View');
22
App::uses('AppModel', 'Model');
23
 
24
require_once dirname(dirname(__FILE__)) . DS . 'Model' . DS . 'models.php';
25
 
26
/**
27
 * TestScaffoldView class
28
 *
29
 * @package       Cake.Test.Case.Controller
30
 */
31
class TestScaffoldView extends ScaffoldView {
32
 
33
/**
34
 * testGetFilename method
35
 *
36
 * @param string $action
37
 * @return void
38
 */
39
	public function testGetFilename($action) {
40
		return $this->_getViewFileName($action);
41
	}
42
 
43
}
44
 
45
/**
46
 * ScaffoldViewMockController class
47
 *
48
 * @package       Cake.Test.Case.Controller
49
 */
50
class ScaffoldViewMockController extends Controller {
51
 
52
/**
53
 * name property
54
 *
55
 * @var string
56
 */
57
	public $name = 'ScaffoldMock';
58
 
59
/**
60
 * scaffold property
61
 *
62
 * @var mixed
63
 */
64
	public $scaffold;
65
}
66
 
67
/**
68
 * ScaffoldViewTest class
69
 *
70
 * @package       Cake.Test.Case.Controller
71
 */
72
class ScaffoldViewTest extends CakeTestCase {
73
 
74
/**
75
 * fixtures property
76
 *
77
 * @var array
78
 */
79
	public $fixtures = array('core.article', 'core.user', 'core.comment', 'core.join_thing', 'core.tag');
80
 
81
/**
82
 * setUp method
83
 *
84
 * @return void
85
 */
86
	public function setUp() {
87
		parent::setUp();
88
		$this->request = new CakeRequest(null, false);
89
		$this->Controller = new ScaffoldViewMockController($this->request);
90
		$this->Controller->response = $this->getMock('CakeResponse', array('_sendHeader'));
91
 
92
		App::build(array(
93
			'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS),
94
			'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
95
		));
96
		CakePlugin::load('TestPlugin');
97
	}
98
 
99
/**
100
 * tearDown method
101
 *
102
 * @return void
103
 */
104
	public function tearDown() {
105
		unset($this->Controller, $this->request);
106
		parent::tearDown();
107
	}
108
 
109
/**
110
 * testGetViewFilename method
111
 *
112
 * @return void
113
 */
114
	public function testGetViewFilename() {
115
		$_admin = Configure::read('Routing.prefixes');
116
		Configure::write('Routing.prefixes', array('admin'));
117
 
118
		$this->Controller->request->params['action'] = 'index';
119
		$ScaffoldView = new TestScaffoldView($this->Controller);
120
		$result = $ScaffoldView->testGetFilename('index');
121
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'index.ctp';
122
		$this->assertEquals($expected, $result);
123
 
124
		$result = $ScaffoldView->testGetFilename('edit');
125
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'form.ctp';
126
		$this->assertEquals($expected, $result);
127
 
128
		$result = $ScaffoldView->testGetFilename('add');
129
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'form.ctp';
130
		$this->assertEquals($expected, $result);
131
 
132
		$result = $ScaffoldView->testGetFilename('view');
133
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'view.ctp';
134
		$this->assertEquals($expected, $result);
135
 
136
		$result = $ScaffoldView->testGetFilename('admin_index');
137
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'index.ctp';
138
		$this->assertEquals($expected, $result);
139
 
140
		$result = $ScaffoldView->testGetFilename('admin_view');
141
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'view.ctp';
142
		$this->assertEquals($expected, $result);
143
 
144
		$result = $ScaffoldView->testGetFilename('admin_edit');
145
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'form.ctp';
146
		$this->assertEquals($expected, $result);
147
 
148
		$result = $ScaffoldView->testGetFilename('admin_add');
149
		$expected = CAKE . 'View' . DS . 'Scaffolds' . DS . 'form.ctp';
150
		$this->assertEquals($expected, $result);
151
 
152
		$result = $ScaffoldView->testGetFilename('error');
153
		$expected = CAKE . 'View' . DS . 'Errors' . DS . 'scaffold_error.ctp';
154
		$this->assertEquals($expected, $result);
155
 
156
		$Controller = new ScaffoldViewMockController($this->request);
157
		$Controller->scaffold = 'admin';
158
		$Controller->viewPath = 'Posts';
159
		$Controller->request['action'] = 'admin_edit';
160
 
161
		$ScaffoldView = new TestScaffoldView($Controller);
162
		$result = $ScaffoldView->testGetFilename('admin_edit');
163
		$expected = CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS . 'Posts' . DS . 'scaffold.form.ctp';
164
		$this->assertEquals($expected, $result);
165
 
166
		$result = $ScaffoldView->testGetFilename('edit');
167
		$expected = CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS . 'Posts' . DS . 'scaffold.form.ctp';
168
		$this->assertEquals($expected, $result);
169
 
170
		$Controller = new ScaffoldViewMockController($this->request);
171
		$Controller->scaffold = 'admin';
172
		$Controller->viewPath = 'Tests';
173
		$Controller->request->addParams(array(
174
			'plugin' => 'test_plugin',
175
			'action' => 'admin_add',
176
			'admin' => true
177
		));
178
		$Controller->plugin = 'TestPlugin';
179
 
180
		$ScaffoldView = new TestScaffoldView($Controller);
181
		$result = $ScaffoldView->testGetFilename('admin_add');
182
		$expected = CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' .
183
			DS . 'TestPlugin' . DS . 'View' . DS . 'Tests' . DS . 'scaffold.form.ctp';
184
		$this->assertEquals($expected, $result);
185
 
186
		$result = $ScaffoldView->testGetFilename('add');
187
		$expected = CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' .
188
			DS . 'TestPlugin' . DS . 'View' . DS . 'Tests' . DS . 'scaffold.form.ctp';
189
		$this->assertEquals($expected, $result);
190
 
191
		Configure::write('Routing.prefixes', $_admin);
192
	}
193
 
194
/**
195
 * test getting the view file name for themed scaffolds.
196
 *
197
 * @return void
198
 */
199
	public function testGetViewFileNameWithTheme() {
200
		$this->Controller->request['action'] = 'index';
201
		$this->Controller->viewPath = 'Posts';
202
		$this->Controller->theme = 'TestTheme';
203
		$ScaffoldView = new TestScaffoldView($this->Controller);
204
 
205
		$result = $ScaffoldView->testGetFilename('index');
206
		$expected = CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS .
207
			'Themed' . DS . 'TestTheme' . DS . 'Posts' . DS . 'scaffold.index.ctp';
208
		$this->assertEquals($expected, $result);
209
	}
210
 
211
/**
212
 * test default index scaffold generation
213
 *
214
 * @return void
215
 */
216
	public function testIndexScaffold() {
217
		$params = array(
218
			'plugin' => null,
219
			'pass' => array(),
220
			'form' => array(),
221
			'named' => array(),
222
			'url' => array('url' => 'scaffold_mock'),
223
			'controller' => 'scaffold_mock',
224
			'action' => 'index',
225
		);
226
		$this->Controller->request->addParams($params);
227
		$this->Controller->request->webroot = '/';
228
		$this->Controller->request->base = '';
229
		$this->Controller->request->here = '/scaffold_mock/index';
230
 
231
		//set router.
232
		Router::reload();
233
		Router::setRequestInfo($this->Controller->request);
234
 
235
		$this->Controller->constructClasses();
236
		ob_start();
237
		new Scaffold($this->Controller, $this->Controller->request);
238
		$this->Controller->response->send();
239
		$result = ob_get_clean();
240
 
241
		$this->assertRegExp('#<h2>Scaffold Mock</h2>#', $result);
242
		$this->assertRegExp('#<table cellpadding="0" cellspacing="0">#', $result);
243
 
244
		$this->assertRegExp('#<a href="/scaffold_users/view/1">1</a>#', $result); //belongsTo links
245
		$this->assertRegExp('#<li><a href="/scaffold_mock/add">New Scaffold Mock</a></li>#', $result);
246
		$this->assertRegExp('#<li><a href="/scaffold_users">List Scaffold Users</a></li>#', $result);
247
		$this->assertRegExp('#<li><a href="/scaffold_comments/add">New Comment</a></li>#', $result);
248
	}
249
 
250
/**
251
 * test default view scaffold generation
252
 *
253
 * @return void
254
 */
255
	public function testViewScaffold() {
256
		$this->Controller->request->base = '';
257
		$this->Controller->request->here = '/scaffold_mock';
258
		$this->Controller->request->webroot = '/';
259
		$params = array(
260
			'plugin' => null,
261
			'pass' => array(1),
262
			'form' => array(),
263
			'named' => array(),
264
			'url' => array('url' => 'scaffold_mock/view/1'),
265
			'controller' => 'scaffold_mock',
266
			'action' => 'view',
267
		);
268
		$this->Controller->request->addParams($params);
269
 
270
		//set router.
271
		Router::reload();
272
		Router::setRequestInfo($this->Controller->request);
273
		$this->Controller->constructClasses();
274
 
275
		ob_start();
276
		new Scaffold($this->Controller, $this->Controller->request);
277
		$this->Controller->response->send();
278
		$result = ob_get_clean();
279
 
280
		$this->assertRegExp('/<h2>View Scaffold Mock<\/h2>/', $result);
281
		$this->assertRegExp('/<dl>/', $result);
282
 
283
		$this->assertRegExp('/<a href="\/scaffold_users\/view\/1">1<\/a>/', $result); //belongsTo links
284
		$this->assertRegExp('/<li><a href="\/scaffold_mock\/edit\/1">Edit Scaffold Mock<\/a>\s<\/li>/', $result);
285
		$this->assertRegExp('/<a href="\#" onclick="if[^>]*>Delete Scaffold Mock<\/a>\s<\/li>/', $result);
286
		//check related table
287
		$this->assertRegExp('/<div class="related">\s*<h3>Related Scaffold Comments<\/h3>\s*<table cellpadding="0" cellspacing="0">/', $result);
288
		$this->assertRegExp('/<li><a href="\/scaffold_comments\/add">New Comment<\/a><\/li>/', $result);
289
		$this->assertNotRegExp('/<th>JoinThing<\/th>/', $result);
290
	}
291
 
292
/**
293
 * test default view scaffold generation
294
 *
295
 * @return void
296
 */
297
	public function testEditScaffold() {
298
		$this->Controller->request->base = '';
299
		$this->Controller->request->webroot = '/';
300
		$this->Controller->request->here = '/scaffold_mock/edit/1';
301
 
302
		$params = array(
303
			'plugin' => null,
304
			'pass' => array(1),
305
			'form' => array(),
306
			'named' => array(),
307
			'url' => array('url' => 'scaffold_mock'),
308
			'controller' => 'scaffold_mock',
309
			'action' => 'edit',
310
		);
311
		$this->Controller->request->addParams($params);
312
 
313
		//set router.
314
		Router::reload();
315
		Router::setRequestInfo($this->Controller->request);
316
		$this->Controller->constructClasses();
317
 
318
		ob_start();
319
		new Scaffold($this->Controller, $this->Controller->request);
320
		$this->Controller->response->send();
321
		$result = ob_get_clean();
322
 
323
		$this->assertContains('<form action="/scaffold_mock/edit/1" id="ScaffoldMockEditForm" method="post"', $result);
324
		$this->assertContains('<legend>Edit Scaffold Mock</legend>', $result);
325
 
326
		$this->assertContains('input type="hidden" name="data[ScaffoldMock][id]" value="1" id="ScaffoldMockId"', $result);
327
		$this->assertContains('select name="data[ScaffoldMock][user_id]" id="ScaffoldMockUserId"', $result);
328
		$this->assertContains('input name="data[ScaffoldMock][title]" maxlength="255" type="text" value="First Article" id="ScaffoldMockTitle"', $result);
329
		$this->assertContains('input name="data[ScaffoldMock][published]" maxlength="1" type="text" value="Y" id="ScaffoldMockPublished"', $result);
330
		$this->assertContains('textarea name="data[ScaffoldMock][body]" cols="30" rows="6" id="ScaffoldMockBody"', $result);
331
		$this->assertRegExp('/<a href="\#" onclick="if[^>]*>Delete<\/a><\/li>/', $result);
332
	}
333
 
334
/**
335
 * Test Admin Index Scaffolding.
336
 *
337
 * @return void
338
 */
339
	public function testAdminIndexScaffold() {
340
		$_backAdmin = Configure::read('Routing.prefixes');
341
 
342
		Configure::write('Routing.prefixes', array('admin'));
343
		$params = array(
344
			'plugin' => null,
345
			'pass' => array(),
346
			'form' => array(),
347
			'named' => array(),
348
			'prefix' => 'admin',
349
			'url' => array('url' => 'admin/scaffold_mock'),
350
			'controller' => 'scaffold_mock',
351
			'action' => 'admin_index',
352
			'admin' => 1,
353
		);
354
		$this->Controller->request->base = '';
355
		$this->Controller->request->webroot = '/';
356
		$this->Controller->request->here = '/admin/scaffold_mock';
357
		$this->Controller->request->addParams($params);
358
 
359
		//reset, and set router.
360
		Router::reload();
361
		Router::setRequestInfo($this->Controller->request);
362
 
363
		$this->Controller->scaffold = 'admin';
364
		$this->Controller->constructClasses();
365
 
366
		ob_start();
367
		new Scaffold($this->Controller, $this->Controller->request);
368
		$this->Controller->response->send();
369
		$result = ob_get_clean();
370
 
371
		$this->assertRegExp('/<h2>Scaffold Mock<\/h2>/', $result);
372
		$this->assertRegExp('/<table cellpadding="0" cellspacing="0">/', $result);
373
 
374
		$this->assertRegExp('/<li><a href="\/admin\/scaffold_mock\/add">New Scaffold Mock<\/a><\/li>/', $result);
375
 
376
		Configure::write('Routing.prefixes', $_backAdmin);
377
	}
378
 
379
/**
380
 * Test Admin Index Scaffolding.
381
 *
382
 * @return void
383
 */
384
	public function testAdminEditScaffold() {
385
		Configure::write('Routing.prefixes', array('admin'));
386
		$params = array(
387
			'plugin' => null,
388
			'pass' => array(1),
389
			'form' => array(),
390
			'named' => array(),
391
			'prefix' => 'admin',
392
			'url' => array('url' => 'admin/scaffold_mock/edit/1'),
393
			'controller' => 'scaffold_mock',
394
			'action' => 'admin_edit',
395
			'admin' => 1,
396
		);
397
		$this->Controller->request->base = '';
398
		$this->Controller->request->webroot = '/';
399
		$this->Controller->request->here = '/admin/scaffold_mock/edit/1';
400
		$this->Controller->request->addParams($params);
401
 
402
		//reset, and set router.
403
		Router::reload();
404
		Router::setRequestInfo($this->Controller->request);
405
 
406
		$this->Controller->scaffold = 'admin';
407
		$this->Controller->constructClasses();
408
 
409
		ob_start();
410
		new Scaffold($this->Controller, $this->Controller->request);
411
		$this->Controller->response->send();
412
		$result = ob_get_clean();
413
 
414
		$this->assertRegExp('#admin/scaffold_mock/edit/1#', $result);
415
		$this->assertRegExp('#Scaffold Mock#', $result);
416
	}
417
 
418
/**
419
 * Test Admin Index Scaffolding.
420
 *
421
 * @return void
422
 */
423
	public function testMultiplePrefixScaffold() {
424
		$_backAdmin = Configure::read('Routing.prefixes');
425
 
426
		Configure::write('Routing.prefixes', array('admin', 'member'));
427
		$params = array(
428
			'plugin' => null,
429
			'pass' => array(),
430
			'form' => array(),
431
			'named' => array(),
432
			'prefix' => 'member',
433
			'url' => array('url' => 'member/scaffold_mock'),
434
			'controller' => 'scaffold_mock',
435
			'action' => 'member_index',
436
			'member' => 1,
437
		);
438
		$this->Controller->request->base = '';
439
		$this->Controller->request->webroot = '/';
440
		$this->Controller->request->here = '/member/scaffold_mock';
441
		$this->Controller->request->addParams($params);
442
 
443
		//reset, and set router.
444
		Router::reload();
445
		Router::setRequestInfo($this->Controller->request);
446
 
447
		$this->Controller->scaffold = 'member';
448
		$this->Controller->constructClasses();
449
 
450
		ob_start();
451
		new Scaffold($this->Controller, $this->Controller->request);
452
		$this->Controller->response->send();
453
		$result = ob_get_clean();
454
 
455
		$this->assertRegExp('/<h2>Scaffold Mock<\/h2>/', $result);
456
		$this->assertRegExp('/<table cellpadding="0" cellspacing="0">/', $result);
457
 
458
		$this->assertRegExp('/<li><a href="\/member\/scaffold_mock\/add">New Scaffold Mock<\/a><\/li>/', $result);
459
 
460
		Configure::write('Routing.prefixes', $_backAdmin);
461
	}
462
 
463
}