統計
| ブランチ: | リビジョン:

pictcode / lib / Cake / Test / Case / Console / Command / SchemaShellTest.php @ 0b1b8047

履歴 | 表示 | アノテート | ダウンロード (20.355 KB)

1 635eef61 spyder1211
<?php
2
/**
3
 * SchemaShellTest Test file
4
 *
5
 * CakePHP : 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 Project
14
 * @package       Cake.Test.Case.Console.Command
15
 * @since         CakePHP v 1.3
16
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
17
 */
18
19
App::uses('ShellDispatcher', 'Console');
20
App::uses('ConsoleOutput', 'Console');
21
App::uses('ConsoleInput', 'Console');
22
App::uses('Shell', 'Console');
23
App::uses('CakeSchema', 'Model');
24
App::uses('SchemaShell', 'Console/Command');
25
26
/**
27
 * Test for Schema database management
28
 *
29
 * @package       Cake.Test.Case.Console.Command
30
 */
31
class SchemaShellTestSchema extends CakeSchema {
32
33
/**
34
 * connection property
35
 *
36
 * @var string
37
 */
38
        public $connection = 'test';
39
40
/**
41
 * comments property
42
 *
43
 * @var array
44
 */
45
        public $comments = array(
46
                'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
47
                'post_id' => array('type' => 'integer', 'null' => false, 'default' => 0),
48
                'user_id' => array('type' => 'integer', 'null' => false),
49
                'title' => array('type' => 'string', 'null' => false, 'length' => 100),
50
                'comment' => array('type' => 'text', 'null' => false, 'default' => null),
51
                'published' => array('type' => 'string', 'null' => true, 'default' => 'N', 'length' => 1),
52
                'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
53
                'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
54
                'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
55
        );
56
57
/**
58
 * posts property
59
 *
60
 * @var array
61
 */
62
        public $articles = array(
63
                'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
64
                'user_id' => array('type' => 'integer', 'null' => true, 'default' => ''),
65
                'title' => array('type' => 'string', 'null' => false, 'default' => 'Title'),
66
                'body' => array('type' => 'text', 'null' => true, 'default' => null),
67
                'summary' => array('type' => 'text', 'null' => true),
68
                'published' => array('type' => 'string', 'null' => true, 'default' => 'Y', 'length' => 1),
69
                'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
70
                'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
71
                'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
72
        );
73
74
        public $newone = array(
75
                'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
76
                'testit' => array('type' => 'string', 'null' => false, 'default' => 'Title'),
77
                'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
78
                'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
79
                'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
80
        );
81
}
82
83
/**
84
 * SchemaShellTest class
85
 *
86
 * @package       Cake.Test.Case.Console.Command
87
 */
88
class SchemaShellTest extends CakeTestCase {
89
90
/**
91
 * Fixtures
92
 *
93
 * @var array
94
 */
95
        public $fixtures = array(
96
                'core.article', 'core.user', 'core.post', 'core.auth_user', 'core.author',
97
                'core.comment', 'core.test_plugin_comment', 'core.aco', 'core.aro', 'core.aros_aco',
98
        );
99
100
/**
101
 * setUp method
102
 *
103
 * @return void
104
 */
105
        public function setUp() {
106
                parent::setUp();
107
108
                $out = $this->getMock('ConsoleOutput', array(), array(), '', false);
109
                $in = $this->getMock('ConsoleInput', array(), array(), '', false);
110
                $this->Shell = $this->getMock(
111
                        'SchemaShell',
112
                        array('in', 'out', 'hr', 'createFile', 'error', 'err', '_stop'),
113
                        array($out, $out, $in)
114
                );
115
        }
116
117
/**
118
 * tearDown method
119
 *
120
 * @return void
121
 */
122
        public function tearDown() {
123
                parent::tearDown();
124
                if (!empty($this->file) && $this->file instanceof File) {
125
                        $this->file->delete();
126
                        unset($this->file);
127
                }
128
        }
129
130
/**
131
 * test startup method
132
 *
133
 * @return void
134
 */
135
        public function testStartup() {
136
                $this->Shell->startup();
137
                $this->assertTrue(isset($this->Shell->Schema));
138
                $this->assertInstanceOf('CakeSchema', $this->Shell->Schema);
139
                $this->assertEquals(Inflector::camelize(Inflector::slug(APP_DIR)), $this->Shell->Schema->name);
140
                $this->assertEquals('schema.php', $this->Shell->Schema->file);
141
142
                $this->Shell->Schema = null;
143
                $this->Shell->params = array(
144
                        'name' => 'TestSchema'
145
                );
146
                $this->Shell->startup();
147
                $this->assertEquals('TestSchema', $this->Shell->Schema->name);
148
                $this->assertEquals('test_schema.php', $this->Shell->Schema->file);
149
                $this->assertEquals('default', $this->Shell->Schema->connection);
150
                $this->assertEquals(APP . 'Config' . DS . 'Schema', $this->Shell->Schema->path);
151
152
                $this->Shell->Schema = null;
153
                $this->Shell->params = array(
154
                        'file' => 'other_file.php',
155
                        'connection' => 'test',
156
                        'path' => '/test/path'
157
                );
158
                $this->Shell->startup();
159
                $this->assertEquals(Inflector::camelize(Inflector::slug(APP_DIR)), $this->Shell->Schema->name);
160
                $this->assertEquals('other_file.php', $this->Shell->Schema->file);
161
                $this->assertEquals('test', $this->Shell->Schema->connection);
162
                $this->assertEquals('/test/path', $this->Shell->Schema->path);
163
        }
164
165
/**
166
 * Test View - and that it dumps the schema file to stdout
167
 *
168
 * @return void
169
 */
170
        public function testView() {
171
                $this->Shell->startup();
172
                $this->Shell->Schema->path = APP . 'Config' . DS . 'Schema';
173
                $this->Shell->params['file'] = 'i18n.php';
174
                $this->Shell->expects($this->once())->method('_stop');
175
                $this->Shell->expects($this->once())->method('out');
176
                $this->Shell->view();
177
        }
178
179
/**
180
 * test that view() can find plugin schema files.
181
 *
182
 * @return void
183
 */
184
        public function testViewWithPlugins() {
185
                App::build(array(
186
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
187
                ));
188
                CakePlugin::load('TestPlugin');
189
                $this->Shell->args = array('TestPlugin.schema');
190
                $this->Shell->startup();
191
                $this->Shell->expects($this->exactly(2))->method('_stop');
192
                $this->Shell->expects($this->atLeastOnce())->method('out');
193
                $this->Shell->view();
194
195
                $this->Shell->args = array();
196
                $this->Shell->params = array('plugin' => 'TestPlugin');
197
                $this->Shell->startup();
198
                $this->Shell->view();
199
200
                App::build();
201
                CakePlugin::unload();
202
        }
203
204
/**
205
 * test dump() with sql file generation
206
 *
207
 * @return void
208
 */
209
        public function testDumpWithFileWriting() {
210
                $this->Shell->params = array(
211
                        'name' => 'i18n',
212
                        'connection' => 'test',
213
                        'write' => TMP . 'tests' . DS . 'i18n.sql'
214
                );
215
                $this->Shell->expects($this->once())->method('_stop');
216
                $this->Shell->startup();
217
                $this->Shell->dump();
218
219
                $this->file = new File(TMP . 'tests' . DS . 'i18n.sql');
220
                $contents = $this->file->read();
221
                $this->assertRegExp('/DROP TABLE/', $contents);
222
                $this->assertRegExp('/CREATE TABLE.*?i18n/', $contents);
223
                $this->assertRegExp('/id/', $contents);
224
                $this->assertRegExp('/model/', $contents);
225
                $this->assertRegExp('/field/', $contents);
226
                $this->assertRegExp('/locale/', $contents);
227
                $this->assertRegExp('/foreign_key/', $contents);
228
                $this->assertRegExp('/content/', $contents);
229
        }
230
231
/**
232
 * test that dump() can find and work with plugin schema files.
233
 *
234
 * @return void
235
 */
236
        public function testDumpFileWritingWithPlugins() {
237
                App::build(array(
238
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
239
                ));
240
                CakePlugin::load('TestPlugin');
241
                $this->Shell->args = array('TestPlugin.TestPluginApp');
242
                $this->Shell->params = array(
243
                        'connection' => 'test',
244
                        'write' => TMP . 'tests' . DS . 'dump_test.sql'
245
                );
246
                $this->Shell->startup();
247
                $this->Shell->expects($this->once())->method('_stop');
248
                $this->Shell->dump();
249
250
                $this->file = new File(TMP . 'tests' . DS . 'dump_test.sql');
251
                $contents = $this->file->read();
252
253
                $this->assertRegExp('/CREATE TABLE.*?test_plugin_acos/', $contents);
254
                $this->assertRegExp('/id/', $contents);
255
                $this->assertRegExp('/model/', $contents);
256
257
                $this->file->delete();
258
                App::build();
259
                CakePlugin::unload();
260
        }
261
262
/**
263
 * test generate with snapshot generation
264
 *
265
 * @return void
266
 */
267
        public function testGenerateSnapshot() {
268
                $this->Shell->path = TMP;
269
                $this->Shell->params['file'] = 'schema.php';
270
                $this->Shell->params['force'] = false;
271
                $this->Shell->args = array('snapshot');
272
                $this->Shell->Schema = $this->getMock('CakeSchema');
273
                $this->Shell->Schema->expects($this->at(0))->method('read')->will($this->returnValue(array('schema data')));
274
                $this->Shell->Schema->expects($this->at(0))->method('write')->will($this->returnValue(true));
275
276
                $this->Shell->Schema->expects($this->at(1))->method('read');
277
                $this->Shell->Schema->expects($this->at(1))->method('write')->with(array('schema data', 'file' => 'schema_0.php'));
278
279
                $this->Shell->generate();
280
        }
281
282
/**
283
 * test generate without a snapshot.
284
 *
285
 * @return void
286
 */
287
        public function testGenerateNoOverwrite() {
288
                touch(TMP . 'schema.php');
289
                $this->Shell->params['file'] = 'schema.php';
290
                $this->Shell->params['force'] = false;
291
                $this->Shell->args = array();
292
293
                $this->Shell->expects($this->once())->method('in')->will($this->returnValue('q'));
294
                $this->Shell->Schema = $this->getMock('CakeSchema');
295
                $this->Shell->Schema->path = TMP;
296
                $this->Shell->Schema->expects($this->never())->method('read');
297
298
                $this->Shell->generate();
299
                unlink(TMP . 'schema.php');
300
        }
301
302
/**
303
 * test generate with overwriting of the schema files.
304
 *
305
 * @return void
306
 */
307
        public function testGenerateOverwrite() {
308
                touch(TMP . 'schema.php');
309
                $this->Shell->params['file'] = 'schema.php';
310
                $this->Shell->params['force'] = false;
311
                $this->Shell->args = array();
312
313
                $this->Shell->expects($this->once())->method('in')->will($this->returnValue('o'));
314
315
                $this->Shell->expects($this->at(2))->method('out')
316
                        ->with(new PHPUnit_Framework_Constraint_PCREMatch('/Schema file:\s[a-z\.]+\sgenerated/'));
317
318
                $this->Shell->Schema = $this->getMock('CakeSchema');
319
                $this->Shell->Schema->path = TMP;
320
                $this->Shell->Schema->expects($this->once())->method('read')->will($this->returnValue(array('schema data')));
321
                $this->Shell->Schema->expects($this->once())->method('write')->will($this->returnValue(true));
322
323
                $this->Shell->Schema->expects($this->once())->method('read');
324
                $this->Shell->Schema->expects($this->once())->method('write')
325
                        ->with(array('schema data', 'file' => 'schema.php'));
326
327
                $this->Shell->generate();
328
                unlink(TMP . 'schema.php');
329
        }
330
331
/**
332
 * test that generate() can read plugin dirs and generate schema files for the models
333
 * in a plugin.
334
 *
335
 * @return void
336
 */
337
        public function testGenerateWithPlugins() {
338
                App::build(array(
339
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
340
                ), App::RESET);
341
                CakePlugin::load('TestPlugin');
342
343
                $this->db->cacheSources = false;
344
                $this->Shell->params = array(
345
                        'plugin' => 'TestPlugin',
346
                        'connection' => 'test',
347
                        'force' => false
348
                );
349
                $this->Shell->startup();
350
                $this->Shell->Schema->path = TMP . 'tests' . DS;
351
352
                $this->Shell->generate();
353
                $this->file = new File(TMP . 'tests' . DS . 'schema.php');
354
                $contents = $this->file->read();
355
356
                $this->assertRegExp('/class TestPluginSchema/', $contents);
357
                $this->assertRegExp('/public \$posts/', $contents);
358
                $this->assertRegExp('/public \$auth_users/', $contents);
359
                $this->assertRegExp('/public \$authors/', $contents);
360
                $this->assertRegExp('/public \$test_plugin_comments/', $contents);
361
                $this->assertNotRegExp('/public \$users/', $contents);
362
                $this->assertNotRegExp('/public \$articles/', $contents);
363
                CakePlugin::unload();
364
        }
365
366
/**
367
 * test generate with specific models
368
 *
369
 * @return void
370
 */
371
        public function testGenerateModels() {
372
                App::build(array(
373
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
374
                ), App::RESET);
375
                CakePlugin::load('TestPlugin');
376
377
                $this->db->cacheSources = false;
378
                $this->Shell->params = array(
379
                        'plugin' => 'TestPlugin',
380
                        'connection' => 'test',
381
                        'models' => 'TestPluginComment',
382
                        'force' => false,
383
                        'overwrite' => true
384
                );
385
                $this->Shell->startup();
386
                $this->Shell->Schema->path = TMP . 'tests' . DS;
387
388
                $this->Shell->generate();
389
                $this->file = new File(TMP . 'tests' . DS . 'schema.php');
390
                $contents = $this->file->read();
391
392
                $this->assertRegExp('/class TestPluginSchema/', $contents);
393
                $this->assertRegExp('/public \$test_plugin_comments/', $contents);
394
                $this->assertNotRegExp('/public \$authors/', $contents);
395
                $this->assertNotRegExp('/public \$auth_users/', $contents);
396
                $this->assertNotRegExp('/public \$posts/', $contents);
397
                CakePlugin::unload();
398
        }
399
400
/**
401
 * test generate with excluded tables
402
 *
403
 * @return void
404
 */
405
        public function testGenerateExclude() {
406
                Configure::write('Acl.database', 'test');
407
                $this->db->cacheSources = false;
408
                $this->Shell->params = array(
409
                        'connection' => 'test',
410
                        'force' => false,
411
                        'models' => 'Aro, Aco, Permission',
412
                        'overwrite' => true,
413
                        'exclude' => 'acos, aros',
414
                );
415
                $this->Shell->startup();
416
                $this->Shell->Schema->path = TMP . 'tests' . DS;
417
418
                $this->Shell->generate();
419
                $this->file = new File(TMP . 'tests' . DS . 'schema.php');
420
                $contents = $this->file->read();
421
422
                $this->assertNotContains('public $acos = array(', $contents);
423
                $this->assertNotContains('public $aros = array(', $contents);
424
                $this->assertContains('public $aros_acos = array(', $contents);
425
        }
426
427
/**
428
 * Test schema run create with --yes option
429
 *
430
 * @return void
431
 */
432
        public function testCreateOptionYes() {
433
                $this->Shell = $this->getMock(
434
                        'SchemaShell',
435
                        array('in', 'out', 'hr', 'createFile', 'error', 'err', '_stop', '_run'),
436
                        array(&$this->Dispatcher)
437
                );
438
439
                $this->Shell->params = array(
440
                        'connection' => 'test',
441
                        'yes' => true,
442
                );
443
                $this->Shell->args = array('i18n');
444
                $this->Shell->expects($this->never())->method('in');
445
                $this->Shell->expects($this->exactly(2))->method('_run');
446
                $this->Shell->startup();
447
                $this->Shell->create();
448
        }
449
450
/**
451
 * Test schema run create with no table args.
452
 *
453
 * @return void
454
 */
455
        public function testCreateNoArgs() {
456
                $this->Shell->params = array(
457
                        'connection' => 'test'
458
                );
459
                $this->Shell->args = array('i18n');
460
                $this->Shell->startup();
461
                $this->Shell->expects($this->any())->method('in')->will($this->returnValue('y'));
462
                $this->Shell->create();
463
464
                $db = ConnectionManager::getDataSource('test');
465
466
                $db->cacheSources = false;
467
                $sources = $db->listSources();
468
                $this->assertTrue(in_array($db->config['prefix'] . 'i18n', $sources));
469
470
                $schema = new i18nSchema();
471
                $db->execute($db->dropSchema($schema));
472
        }
473
474
/**
475
 * Test schema run create with no table args.
476
 *
477
 * @return void
478
 */
479
        public function testCreateWithTableArgs() {
480
                $db = ConnectionManager::getDataSource('test');
481
                $sources = $db->listSources();
482
                if (in_array('i18n', $sources)) {
483
                        $this->markTestSkipped('i18n table already exists, cannot try to create it again.');
484
                }
485
                $this->Shell->params = array(
486
                        'connection' => 'test',
487
                        'name' => 'I18n',
488
                        'path' => APP . 'Config' . DS . 'Schema'
489
                );
490
                $this->Shell->args = array('I18n', 'i18n');
491
                $this->Shell->startup();
492
                $this->Shell->expects($this->any())->method('in')->will($this->returnValue('y'));
493
                $this->Shell->create();
494
495
                $db = ConnectionManager::getDataSource('test');
496
                $db->cacheSources = false;
497
                $sources = $db->listSources();
498
                $this->assertTrue(in_array($db->config['prefix'] . 'i18n', $sources), 'i18n should be present.');
499
500
                $schema = new I18nSchema();
501
                $db->execute($db->dropSchema($schema, 'i18n'));
502
        }
503
504
/**
505
 * test run update with a table arg.
506
 *
507
 * @return void
508
 */
509
        public function testUpdateWithTable() {
510
                $this->Shell = $this->getMock(
511
                        'SchemaShell',
512
                        array('in', 'out', 'hr', 'createFile', 'error', 'err', '_stop', '_run'),
513
                        array(&$this->Dispatcher)
514
                );
515
516
                $this->Shell->params = array(
517
                        'connection' => 'test',
518
                        'force' => true
519
                );
520
                $this->Shell->args = array('SchemaShellTest', 'articles');
521
                $this->Shell->startup();
522
                $this->Shell->expects($this->any())
523
                        ->method('in')
524
                        ->will($this->returnValue('y'));
525
                $this->Shell->expects($this->once())
526
                        ->method('_run')
527
                        ->with($this->arrayHasKey('articles'), 'update', $this->isInstanceOf('CakeSchema'));
528
529
                $this->Shell->update();
530
        }
531
532
/**
533
 * test run update with a table arg. and checks that a CREATE statement is issued
534
 * table creation
535
 * @return void
536
 */
537
        public function testUpdateWithTableCreate() {
538
                $this->Shell = $this->getMock(
539
                        'SchemaShell',
540
                        array('in', 'out', 'hr', 'createFile', 'error', 'err', '_stop', '_run'),
541
                        array(&$this->Dispatcher)
542
                );
543
544
                $this->Shell->params = array(
545
                        'connection' => 'test',
546
                        'force' => true
547
                );
548
                $this->Shell->args = array('SchemaShellTest', 'newone');
549
                $this->Shell->startup();
550
                $this->Shell->expects($this->any())
551
                        ->method('in')
552
                        ->will($this->returnValue('y'));
553
                $this->Shell->expects($this->once())
554
                        ->method('_run')
555
                        ->with($this->arrayHasKey('newone'), 'update', $this->isInstanceOf('CakeSchema'));
556
557
                $this->Shell->update();
558
        }
559
560
/**
561
 * test run update with --yes option
562
 *
563
 * @return void
564
 */
565
        public function testUpdateWithOptionYes() {
566
                $this->Shell = $this->getMock(
567
                        'SchemaShell',
568
                        array('in', 'out', 'hr', 'createFile', 'error', 'err', '_stop', '_run'),
569
                        array(&$this->Dispatcher)
570
                );
571
572
                $this->Shell->params = array(
573
                        'connection' => 'test',
574
                        'force' => true,
575
                        'yes' => true,
576
                );
577
                $this->Shell->args = array('SchemaShellTest', 'articles');
578
                $this->Shell->startup();
579
                $this->Shell->expects($this->never())->method('in');
580
                $this->Shell->expects($this->once())
581
                        ->method('_run')
582
                        ->with($this->arrayHasKey('articles'), 'update', $this->isInstanceOf('CakeSchema'));
583
584
                $this->Shell->update();
585
        }
586
587
/**
588
 * test that the plugin param creates the correct path in the schema object.
589
 *
590
 * @return void
591
 */
592
        public function testPluginParam() {
593
                App::build(array(
594
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
595
                ));
596
                CakePlugin::load('TestPlugin');
597
                $this->Shell->params = array(
598
                        'plugin' => 'TestPlugin',
599
                        'connection' => 'test'
600
                );
601
                $this->Shell->startup();
602
                $expected = CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS . 'TestPlugin' . DS . 'Config' . DS . 'Schema';
603
                $this->assertEquals($expected, $this->Shell->Schema->path);
604
                CakePlugin::unload();
605
        }
606
607
/**
608
 * test that underscored names also result in CamelCased class names
609
 *
610
 * @return void
611
 */
612
        public function testName() {
613
                App::build(array(
614
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
615
                ));
616
                CakePlugin::load('TestPlugin');
617
                $this->Shell->params = array(
618
                        'plugin' => 'TestPlugin',
619
                        'connection' => 'test',
620
                        'name' => 'custom_names',
621
                        'force' => false,
622
                        'overwrite' => true,
623
                );
624
                $this->Shell->startup();
625
                if (file_exists($this->Shell->Schema->path . DS . 'custom_names.php')) {
626
                        unlink($this->Shell->Schema->path . DS . 'custom_names.php');
627
                }
628
                $this->Shell->generate();
629
630
                $contents = file_get_contents($this->Shell->Schema->path . DS . 'custom_names.php');
631
                $this->assertRegExp('/class CustomNamesSchema/', $contents);
632
                unlink($this->Shell->Schema->path . DS . 'custom_names.php');
633
                CakePlugin::unload();
634
        }
635
636
/**
637
 * test that passing name and file creates the passed filename with the
638
 * passed class name
639
 *
640
 * @return void
641
 */
642
        public function testNameAndFile() {
643
                App::build(array(
644
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
645
                ));
646
                CakePlugin::load('TestPlugin');
647
                $this->Shell->params = array(
648
                        'plugin' => 'TestPlugin',
649
                        'connection' => 'test',
650
                        'name' => 'custom_name',
651
                        'file' => 'other_name',
652
                        'force' => false,
653
                        'overwrite' => true,
654
                );
655
                $this->Shell->startup();
656
                $file = $this->Shell->Schema->path . DS . 'other_name.php';
657
                if (file_exists($file)) {
658
                        unlink($file);
659
                }
660
                $this->Shell->generate();
661
662
                $this->assertFileExists($file);
663
                $contents = file_get_contents($file);
664
                $this->assertRegExp('/class CustomNameSchema/', $contents);
665
666
                if (file_exists($file)) {
667
                        unlink($file);
668
                }
669
                CakePlugin::unload();
670
        }
671
672
/**
673
 * test that using Plugin.name with write.
674
 *
675
 * @return void
676
 */
677
        public function testPluginDotSyntaxWithCreate() {
678
                App::build(array(
679
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
680
                ));
681
                CakePlugin::load('TestPlugin');
682
                $this->Shell->params = array(
683
                        'connection' => 'test'
684
                );
685
                $this->Shell->args = array('TestPlugin.TestPluginApp');
686
                $this->Shell->startup();
687
                $this->Shell->expects($this->any())->method('in')->will($this->returnValue('y'));
688
                $this->Shell->create();
689
690
                $db = ConnectionManager::getDataSource('test');
691
                $sources = $db->listSources();
692
                $this->assertTrue(in_array($db->config['prefix'] . 'test_plugin_acos', $sources));
693
694
                $schema = new TestPluginAppSchema();
695
                $db->execute($db->dropSchema($schema, 'test_plugin_acos'));
696
                CakePlugin::unload();
697
        }
698
}