diff --git a/src/Maker/MakeCrud.php b/src/Maker/MakeCrud.php index 879906cc1..2ec9d9928 100644 --- a/src/Maker/MakeCrud.php +++ b/src/Maker/MakeCrud.php @@ -44,6 +44,8 @@ final class MakeCrud extends AbstractMaker private $inflector; + private $controllerClassName; + public function __construct(DoctrineHelper $doctrineHelper, FormTypeRenderer $formTypeRenderer) { $this->doctrineHelper = $doctrineHelper; @@ -91,6 +93,13 @@ public function interact(InputInterface $input, ConsoleStyle $io, Command $comma $input->setArgument('entity-class', $value); } + + $defaultControllerClass = Str::asClassName(sprintf('%s Controller', $input->getArgument('entity-class'))); + + $this->controllerClassName = $io->ask( + sprintf('Choose a name for your controller class (e.g. %s)', $defaultControllerClass), + $defaultControllerClass + ); } public function generate(InputInterface $input, ConsoleStyle $io, Generator $generator) @@ -119,7 +128,7 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen } $controllerClassDetails = $generator->createClassNameDetails( - $entityClassDetails->getRelativeNameWithoutSuffix().'Controller', + $this->controllerClassName, 'Controller\\', 'Controller' ); diff --git a/tests/Maker/MakeCrudTest.php b/tests/Maker/MakeCrudTest.php index 98cba3dfd..c746f2044 100644 --- a/tests/Maker/MakeCrudTest.php +++ b/tests/Maker/MakeCrudTest.php @@ -24,6 +24,7 @@ public function getTestDetails() [ // entity class name 'SweetFood', + '', // default controller ]) ->setFixtureFilesPath(__DIR__.'/../fixtures/MakeCrud') // need for crud web tests @@ -36,11 +37,30 @@ public function getTestDetails() ->setRequiredPhpVersion(70200), ]; + yield 'crud_basic_custom_controller' => [MakerTestDetails::createTest( + $this->getMakerInstance(MakeCrud::class), + [ + // entity class name + 'SweetFood', + 'SweetFoodAdminController', // default controller + ]) + ->setFixtureFilesPath(__DIR__.'/../fixtures/MakeCrudCustomController') + // need for crud web tests + ->configureDatabase() + ->assert(function (string $output, string $directory) { + $this->assertStringContainsString('created: src/Controller/SweetFoodAdminController.php', $output); + $this->assertStringContainsString('created: src/Form/SweetFoodType.php', $output); + }) + // workaround for segfault in PHP 7.1 CI :/ + ->setRequiredPhpVersion(70200), + ]; + yield 'crud_basic_in_custom_root_namespace' => [MakerTestDetails::createTest( $this->getMakerInstance(MakeCrud::class), [ // entity class name 'SweetFood', + '', // default controller ]) ->setFixtureFilesPath(__DIR__.'/../fixtures/MakeCrudInCustomRootNamespace') ->changeRootNamespace('Custom') @@ -59,6 +79,7 @@ public function getTestDetails() [ // entity class name 'SweetFood', + '', // default controller ]) ->setFixtureFilesPath(__DIR__.'/../fixtures/MakeCrudRepository') // need for crud web tests @@ -76,6 +97,7 @@ public function getTestDetails() [ // entity class name 'SweetFood', + '', // default controller ]) ->setFixtureFilesPath(__DIR__.'/../fixtures/MakeCrud') // need for crud web tests diff --git a/tests/fixtures/MakeCrudCustomController/src/Entity/SweetFood.php b/tests/fixtures/MakeCrudCustomController/src/Entity/SweetFood.php new file mode 100644 index 000000000..66590eaf7 --- /dev/null +++ b/tests/fixtures/MakeCrudCustomController/src/Entity/SweetFood.php @@ -0,0 +1,44 @@ +id; + } + + /** + * @return mixed + */ + public function getTitle() + { + return $this->title; + } + + /** + * @param mixed $title + */ + public function setTitle($title) + { + $this->title = $title; + } +} diff --git a/tests/fixtures/MakeCrudCustomController/tests/GeneratedCrudControllerTest.php b/tests/fixtures/MakeCrudCustomController/tests/GeneratedCrudControllerTest.php new file mode 100644 index 000000000..d6eaca822 --- /dev/null +++ b/tests/fixtures/MakeCrudCustomController/tests/GeneratedCrudControllerTest.php @@ -0,0 +1,68 @@ +request('GET', '/sweet/food/admin/'); + $this->assertTrue($client->getResponse()->isSuccessful()); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('SweetFood index', $client->getResponse()->getContent()); + + $newLink = $crawler->filter('a:contains("Create new")')->eq(0)->link(); + + $crawler = $client->click($newLink); + $this->assertTrue($client->getResponse()->isSuccessful()); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('New SweetFood', $client->getResponse()->getContent()); + + $newForm = $crawler->selectButton('Save')->form(); + $client->submit($newForm, ['sweet_food[title]' => 'Candy']); + $this->assertTrue($client->getResponse()->isRedirect()); + + $crawler = $client->followRedirect(); + $this->assertTrue($client->getResponse()->isSuccessful()); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('SweetFood index', $client->getResponse()->getContent()); + $this->assertStringContainsString('Candy', $client->getResponse()->getContent()); + + $editLink = $crawler->filter('a:contains("edit")')->eq(0)->link(); + $crawler = $client->click($editLink); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('Edit SweetFood', $client->getResponse()->getContent()); + $this->assertGreaterThan(0, $crawler->filter('input[type=text]')->count()); + + $editForm = $crawler->selectButton('Update')->form(); + $client->submit($editForm, ['sweet_food[title]' => 'Candy edited']); + $this->assertTrue($client->getResponse()->isRedirect()); + + $crawler = $client->followRedirect(); + $this->assertTrue($client->getResponse()->isSuccessful()); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('SweetFood index', $client->getResponse()->getContent()); + $this->assertStringContainsString('Candy edited', $client->getResponse()->getContent()); + + $showLink = $crawler->filter('a:contains("show")')->eq(0)->link(); + + $crawler = $client->click($showLink); + $this->assertTrue($client->getResponse()->isSuccessful()); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('SweetFood', $client->getResponse()->getContent()); + $this->assertStringContainsString('Candy edited', $client->getResponse()->getContent()); + + $deleteForm = $crawler->selectButton('Delete')->form(); + $client->submit($deleteForm); + $this->assertTrue($client->getResponse()->isRedirect()); + + $client->followRedirect(); + $this->assertTrue($client->getResponse()->isSuccessful()); + $this->assertStringContainsString('', $client->getResponse()->getContent()); + $this->assertStringContainsString('SweetFood index', $client->getResponse()->getContent()); + $this->assertStringContainsString('no records found', $client->getResponse()->getContent()); + } +}