diff --git a/lib/Cake/Console/Command/Task/FixtureTask.php b/lib/Cake/Console/Command/Task/FixtureTask.php index 1f578d083..d0329e944 100644 --- a/lib/Cake/Console/Command/Task/FixtureTask.php +++ b/lib/Cake/Console/Command/Task/FixtureTask.php @@ -125,7 +125,8 @@ class FixtureTask extends BakeTask { return $this->all(); } $model = $this->_modelName($this->args[0]); - $this->bake($model); + $importOptions = $this->importOptions($model); + $this->bake($model, false, $importOptions); } } @@ -177,24 +178,29 @@ class FixtureTask extends BakeTask { */ public function importOptions($modelName) { $options = array(); + $plugin = ''; + if (isset($this->params['plugin'])) { + $plugin = $this->params['plugin'] . '.'; + } if (!empty($this->params['schema'])) { - $options['schema'] = $modelName; - } else { + $options['schema'] = $plugin . $modelName; + } elseif ($this->interactive) { $doSchema = $this->in(__d('cake_console', 'Would you like to import schema for this fixture?'), array('y', 'n'), 'n'); if ($doSchema === 'y') { $options['schema'] = $modelName; } } + if (!empty($this->params['records'])) { - $doRecords = 'y'; - } else { + $options['fromTable'] = true; + } elseif ($this->interactive) { $doRecords = $this->in(__d('cake_console', 'Would you like to use record importing for this fixture?'), array('y', 'n'), 'n'); + if ($doRecords === 'y') { + $options['records'] = true; + } } - if ($doRecords === 'y') { - $options['records'] = true; - } - if ($doRecords === 'n') { + if (!isset($options['records']) && $this->interactive) { $prompt = __d('cake_console', "Would you like to build this fixture with data from %s's table?", $modelName); $fromTable = $this->in($prompt, array('y', 'n'), 'n'); if (strtolower($fromTable) === 'y') { diff --git a/lib/Cake/Test/Case/Console/Command/Task/FixtureTaskTest.php b/lib/Cake/Test/Case/Console/Command/Task/FixtureTaskTest.php index a649b7b75..01a7b2b27 100644 --- a/lib/Cake/Test/Case/Console/Command/Task/FixtureTaskTest.php +++ b/lib/Cake/Test/Case/Console/Command/Task/FixtureTaskTest.php @@ -98,6 +98,7 @@ class FixtureTaskTest extends CakeTestCase { * @return void */ public function testImportOptionsSchemaRecords() { + $this->Task->interactive = true; $this->Task->expects($this->at(0))->method('in')->will($this->returnValue('y')); $this->Task->expects($this->at(1))->method('in')->will($this->returnValue('y')); @@ -112,6 +113,7 @@ class FixtureTaskTest extends CakeTestCase { * @return void */ public function testImportOptionsNothing() { + $this->Task->interactive = true; $this->Task->expects($this->at(0))->method('in')->will($this->returnValue('n')); $this->Task->expects($this->at(1))->method('in')->will($this->returnValue('n')); $this->Task->expects($this->at(2))->method('in')->will($this->returnValue('n')); @@ -130,7 +132,20 @@ class FixtureTaskTest extends CakeTestCase { $this->Task->params = array('schema' => true, 'records' => true); $result = $this->Task->importOptions('Article'); - $expected = array('schema' => 'Article', 'records' => true); + $expected = array('schema' => 'Article', 'fromTable' => true); + $this->assertEquals($expected, $result); + } + +/** + * test importOptions with overwriting CLI options + * + * @return void + */ + public function testImportOptionsWithCommandLineOptionsPlugin() { + $this->Task->params = array('schema' => true, 'records' => true, 'plugin' => 'TestPlugin'); + + $result = $this->Task->importOptions('Article'); + $expected = array('schema' => 'TestPlugin.Article', 'fromTable' => true); $this->assertEquals($expected, $result); } @@ -140,6 +155,7 @@ class FixtureTaskTest extends CakeTestCase { * @return void */ public function testImportOptionsWithSchema() { + $this->Task->interactive = true; $this->Task->params = array('schema' => true); $this->Task->expects($this->at(0))->method('in')->will($this->returnValue('n')); $this->Task->expects($this->at(1))->method('in')->will($this->returnValue('n')); @@ -155,11 +171,12 @@ class FixtureTaskTest extends CakeTestCase { * @return void */ public function testImportOptionsWithRecords() { + $this->Task->interactive = true; $this->Task->params = array('records' => true); $this->Task->expects($this->at(0))->method('in')->will($this->returnValue('n')); $result = $this->Task->importOptions('Article'); - $expected = array('records' => true); + $expected = array('fromTable' => true); $this->assertEquals($expected, $result); } @@ -169,6 +186,7 @@ class FixtureTaskTest extends CakeTestCase { * @return void */ public function testImportOptionsTable() { + $this->Task->interactive = true; $this->Task->expects($this->at(0))->method('in')->will($this->returnValue('n')); $this->Task->expects($this->at(1))->method('in')->will($this->returnValue('n')); $this->Task->expects($this->at(2))->method('in')->will($this->returnValue('y')); @@ -244,6 +262,62 @@ class FixtureTaskTest extends CakeTestCase { $this->assertContains("'body' => 'Body \"value\"'", $result, 'Data has bad escaping'); } +/** + * test that execute includes import options + * + * @return void + */ + public function testExecuteWithImportSchema() { + $this->Task->connection = 'test'; + $this->Task->path = '/my/path/'; + $this->Task->args = array('article'); + $this->Task->params = array( + 'schema' => true, + 'records' => false, + ); + $filename = '/my/path/ArticleFixture.php'; + + $this->Task->expects($this->never()) + ->method('in'); + + $this->Task->expects($this->at(0)) + ->method('createFile') + ->with($filename, $this->logicalAnd( + $this->stringContains('class ArticleFixture'), + $this->stringContains("\$import = array('model' => 'Article'") + )); + + $this->Task->execute(); + } + +/** + * test that execute includes import options + * + * @return void + */ + public function testExecuteWithImportRecords() { + $this->Task->connection = 'test'; + $this->Task->path = '/my/path/'; + $this->Task->args = array('article'); + $this->Task->params = array( + 'schema' => true, + 'records' => true, + ); + $filename = '/my/path/ArticleFixture.php'; + + $this->Task->expects($this->never()) + ->method('in'); + + $this->Task->expects($this->at(0)) + ->method('createFile') + ->with($filename, $this->logicalAnd( + $this->stringContains('class ArticleFixture'), + $this->stringContains("\$import = array('model' => 'Article', 'connection' => 'test')") + )); + + $this->Task->execute(); + } + /** * test that execute passes runs bake depending with named model. *