Browse Source

Enable tests for baking controller code.

mark_story 12 years ago
parent
commit
c9760b4972

+ 23 - 10
src/Console/Command/Task/ControllerTask.php

@@ -16,6 +16,7 @@ namespace Cake\Console\Command\Task;
 
 use Cake\Console\Shell;
 use Cake\Core\App;
+use Cake\Core\Configure;
 use Cake\ORM\TableRegistry;
 use Cake\Utility\ClassRegistry;
 use Cake\Utility\Inflector;
@@ -110,6 +111,9 @@ class ControllerTask extends BakeTask {
  * @return string Baked actions
  */
 	public function bakeActions($controllerName) {
+		if (!empty($this->params['no-actions'])) {
+			return '';
+		}
 		$currentModelName = $controllerName;
 		$plugin = $this->plugin;
 		if ($plugin) {
@@ -144,22 +148,30 @@ class ControllerTask extends BakeTask {
 		$actions = $this->bakeActions($controllerName);
 		$helpers = $this->getHelpers();
 		$components = $this->getComponents();
-		$prefix = $this->params['prefix'];
+
+		$prefix = '';
+		if (isset($this->params['prefix'])) {
+			$prefix = '\\' . $this->params['prefix'];
+		}
 
 		$namespace = Configure::read('App.namespace');
-		$pluginPath = '';
 		if ($this->plugin) {
 			$namespace = $this->plugin;
-			$pluginPath = $this->plugin . '.';
 		}
+
 		$data = compact(
-			'actions', 'helpers', 'components',
-			'prefix', 'namespace', 'pluginPath'
+			'prefix',
+			'actions',
+			'helpers',
+			'components',
+			'prefix',
+			'namespace'
 		);
 		$data['name'] = $controllerName;
 
-		$this->bakeController($controllerName, $data);
+		$out = $this->bakeController($controllerName, $data);
 		$this->bakeTest($controllerName);
+		return $out;
 	}
 
 /**
@@ -185,10 +197,8 @@ class ControllerTask extends BakeTask {
 
 		$path = $this->getPath();
 		$filename = $path . $controllerName . 'Controller.php';
-		if ($this->createFile($filename, $contents)) {
-			return $contents;
-		}
-		return false;
+		$this->createFile($filename, $contents);
+		return $contents;
 	}
 
 /**
@@ -312,6 +322,9 @@ class ControllerTask extends BakeTask {
 		])->addOption('no-test', [
 			'boolean' => true,
 			'help' => __d('cake_console', 'Do not generate a test skeleton.')
+		])->addOption('no-actions', [
+			'boolean' => true,
+			'help' => __d('cake_console', 'Do not generate skeleton actions methods.')
 		])->addOption('force', [
 			'short' => 'f',
 			'help' => __d('cake_console', 'Force overwriting existing files without prompting.')

+ 14 - 22
src/Console/Templates/default/classes/controller.ctp

@@ -18,35 +18,27 @@
  */
 use Cake\Utility\Inflector;
 
-echo "<?php\n";
-echo "App::uses('{$plugin}AppController', '{$pluginPath}Controller');\n";
-?>
+echo "<?php\n"; ?>
+namespace <?= $namespace ?>\Controller<?= $prefix ?>;
+
+use <?= $namespace ?>\Controller\AppController;
+
 /**
- * <?= $controllerName; ?> Controller
+ * <?= $name; ?> Controller
  *
 <?php
-if (!$isScaffold) {
-	$defaultModel = Inflector::singularize($controllerName);
-	echo " * @property {$defaultModel} \${$defaultModel}\n";
-	if (!empty($components)) {
-		foreach ($components as $component) {
-			echo " * @property {$component}Component \${$component}\n";
-		}
+$defaultModel = $name;
+echo " * @property {$namespace}\Model\\Table\\{$defaultModel}Table \${$defaultModel}\n";
+if (!empty($components)) {
+	foreach ($components as $component) {
+		echo " * @property {$component}Component \${$component}\n";
 	}
 }
 ?>
  */
-class <?= $controllerName; ?>Controller extends <?= $plugin; ?>AppController {
+class <?= $name; ?>Controller extends AppController {
 
-<?php if ($isScaffold): ?>
-/**
- * Scaffold
- *
- * @var mixed
- */
-	public $scaffold;
-
-<?php else:
+<?php
 
 	if (count($helpers)):
 		echo "/**\n * Helpers\n *\n * @var array\n */\n";
@@ -76,5 +68,5 @@ class <?= $controllerName; ?>Controller extends <?= $plugin; ?>AppController {
 
 	echo trim($actions);
 
-endif; ?>
+?>
 }

+ 44 - 18
tests/TestCase/Console/Command/Task/ControllerTaskTest.php

@@ -78,6 +78,11 @@ class ControllerTaskTest extends TestCase {
 			array($out, $out, $in)
 		);
 		$this->Task->Test = $this->getMock('Cake\Console\Command\Task\TestTask', array(), array($out, $out, $in));
+
+		TableRegistry::get('BakeArticles', [
+			'className' => __NAMESPACE__ . '\BakeArticlesTable'
+		]);
+
 	}
 
 /**
@@ -87,6 +92,7 @@ class ControllerTaskTest extends TestCase {
  */
 	public function tearDown() {
 		unset($this->Task);
+		TableRegistry::clear();
 		parent::tearDown();
 	}
 
@@ -147,23 +153,47 @@ class ControllerTaskTest extends TestCase {
  *
  * @return void
  */
-	public function testBake() {
-		$this->markTestIncomplete();
-		$helpers = array('Js', 'Time');
-		$components = array('Acl', 'Auth');
-		$this->Task->expects($this->any())->method('createFile')->will($this->returnValue(true));
+	public function testBakeNoActions() {
+		$this->Task->expects($this->any())
+			->method('createFile')
+			->will($this->returnValue(true));
 
-		$result = $this->Task->bake('Articles', null, $helpers, $components);
-		$expected = file_get_contents(CAKE . 'Test' . DS . 'bake_compare' . DS . 'Controller' . DS . 'NoActions.ctp');
-		$this->assertTextEquals($expected, $result);
+		$this->Task->params['no-actions'] = true;
+		$this->Task->params['helpers'] = 'Html,Time';
+		$this->Task->params['components'] = 'Csrf, Auth';
 
-		$result = $this->Task->bake('Articles', null, array(), array());
-		$expected = file_get_contents(CAKE . 'Test' . DS . 'bake_compare' . DS . 'Controller' . DS . 'NoHelpersOrComponents.ctp');
+		$result = $this->Task->bake('BakeArticles');
+		$expected = file_get_contents(CORE_TESTS . '/bake_compare/Controller/NoActions.ctp');
 		$this->assertTextEquals($expected, $result);
+	}
 
-		$result = $this->Task->bake('Articles', 'scaffold', $helpers, $components);
-		$expected = file_get_contents(CAKE . 'Test' . DS . 'bake_compare' . DS . 'Controller' . DS . 'Scaffold.ctp');
-		$this->assertTextEquals($expected, $result);
+/**
+ * test bake with actions.
+ *
+ * @return void
+ */
+	public function testBakeActions() {
+		$this->Task->params['helpers'] = 'Html,Time';
+		$this->Task->params['components'] = 'Csrf, Auth';
+
+		$result = $this->Task->bake('BakeArticles');
+		$this->assertTextContains('public function add(', $result);
+		$this->assertTextContains('public function index(', $result);
+		$this->assertTextContains('public function view(', $result);
+		$this->assertTextContains('public function edit(', $result);
+		$this->assertTextContains('public function delete(', $result);
+	}
+
+/**
+ * test bake actions prefixed.
+ *
+ * @return void
+ */
+	public function testBakePrefixed() {
+		$this->Task->params['prefix'] = 'Admin';
+
+		$result = $this->Task->bake('BakeArticles');
+		$this->assertTextContains('App\Controller\Admin', $result);
 	}
 
 /**
@@ -206,11 +236,7 @@ class ControllerTaskTest extends TestCase {
  *
  * @return void
  */
-	public function testBakeActions() {
-		TableRegistry::get('BakeArticles', [
-			'className' => __NAMESPACE__ . '\BakeArticlesTable'
-		]);
-
+	public function testBakeActionsContent() {
 		$result = $this->Task->bakeActions('BakeArticles');
 		$expected = file_get_contents(CORE_TESTS . 'bake_compare/Controller/Actions.ctp');
 		$this->assertTextEquals($expected, $result);

+ 10 - 7
tests/bake_compare/Controller/NoActions.ctp

@@ -1,27 +1,30 @@
 <?php
-App::uses('AppController', 'Controller');
+namespace App\Controller;
+
+use App\Controller\AppController;
+
 /**
- * Articles Controller
+ * BakeArticles Controller
  *
- * @property Article $Article
- * @property AclComponent $Acl
+ * @property App\Model\Table\BakeArticlesTable $BakeArticles
+ * @property CsrfComponent $Csrf
  * @property AuthComponent $Auth
  * @property PaginatorComponent $Paginator
  */
-class ArticlesController extends AppController {
+class BakeArticlesController extends AppController {
 
 /**
  * Helpers
  *
  * @var array
  */
-	public $helpers = array('Js', 'Time');
+	public $helpers = ['Html', 'Time', 'Form'];
 
 /**
  * Components
  *
  * @var array
  */
-	public $components = array('Acl', 'Auth', 'Paginator');
+	public $components = ['Csrf', 'Auth', 'Paginator'];
 
 }