Merge pull request #8695 from cakephp/issue-8693

Use import options when generating fixtures
This commit is contained in:
José Lorenzo Rodríguez 2016-04-24 22:38:30 +02:00
commit c72ac14dc0
2 changed files with 91 additions and 11 deletions

View file

@ -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') {

View file

@ -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.
*