diff --git a/lumen-test/routes/api.php b/lumen-test/routes/api.php deleted file mode 100644 index a13fbad..0000000 --- a/lumen-test/routes/api.php +++ /dev/null @@ -1,7 +0,0 @@ -getScenario()->runStep(new \Codeception\Step\Action('assertArraySubset', func_get_args())); + } + + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -95,7 +111,7 @@ trait AcceptanceTesterActions /** * [!] Method is generated. Documentation taken from corresponding module. * - * + * @param $regex * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Cli::seeShellOutputMatches() */ @@ -105,7 +121,7 @@ trait AcceptanceTesterActions /** * [!] Method is generated. Documentation taken from corresponding module. * - * + * @param $regex * @see \Codeception\Module\Cli::seeShellOutputMatches() */ public function seeShellOutputMatches($regex) { @@ -113,13 +129,83 @@ trait AcceptanceTesterActions } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks result code + * + * ```php + * seeResultCodeIs(0); + * ``` + * + * @param $code + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\Cli::seeResultCodeIs() + */ + public function canSeeResultCodeIs($code) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResultCodeIs', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks result code + * + * ```php + * seeResultCodeIs(0); + * ``` + * + * @param $code + * @see \Codeception\Module\Cli::seeResultCodeIs() + */ + public function seeResultCodeIs($code) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResultCodeIs', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks result code + * + * ```php + * seeResultCodeIsNot(0); + * ``` + * + * @param $code + * Conditional Assertion: Test won't be stopped on fail + * @see \Codeception\Module\Cli::seeResultCodeIsNot() + */ + public function canSeeResultCodeIsNot($code) { + return $this->getScenario()->runStep(new \Codeception\Step\ConditionalAssertion('seeResultCodeIsNot', func_get_args())); + } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks result code + * + * ```php + * seeResultCodeIsNot(0); + * ``` + * + * @param $code + * @see \Codeception\Module\Cli::seeResultCodeIsNot() + */ + public function seeResultCodeIsNot($code) { + return $this->getScenario()->runStep(new \Codeception\Step\Assertion('seeResultCodeIsNot', func_get_args())); + } + + /** * [!] Method is generated. Documentation taken from corresponding module. * * Enters a directory In local filesystem. * Project root directory is used by default * - * @param $path + * @param string $path * @see \Codeception\Module\Filesystem::amInPath() */ public function amInPath($path) { @@ -141,7 +227,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $filename + * @param string $filename * @see \Codeception\Module\Filesystem::openFile() */ public function openFile($filename) { @@ -160,7 +246,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $filename + * @param string $filename * @see \Codeception\Module\Filesystem::deleteFile() */ public function deleteFile($filename) { @@ -179,7 +265,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $dirname + * @param string $dirname * @see \Codeception\Module\Filesystem::deleteDir() */ public function deleteDir($dirname) { @@ -198,8 +284,8 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $src - * @param $dst + * @param string $src + * @param string $dst * @see \Codeception\Module\Filesystem::copyDir() */ public function copyDir($src, $dst) { @@ -221,7 +307,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $text + * @param string $text * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Filesystem::seeInThisFile() */ @@ -242,7 +328,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $text + * @param string $text * @see \Codeception\Module\Filesystem::seeInThisFile() */ public function seeInThisFile($text) { @@ -298,7 +384,7 @@ trait AcceptanceTesterActions * * Checks that contents of currently opened file matches $regex * - * @param $regex + * @param string $regex * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Filesystem::seeThisFileMatches() */ @@ -310,7 +396,7 @@ trait AcceptanceTesterActions * * Checks that contents of currently opened file matches $regex * - * @param $regex + * @param string $regex * @see \Codeception\Module\Filesystem::seeThisFileMatches() */ public function seeThisFileMatches($regex) { @@ -333,7 +419,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $text + * @param string $text * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Filesystem::seeFileContentsEqual() */ @@ -355,7 +441,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $text + * @param string $text * @see \Codeception\Module\Filesystem::seeFileContentsEqual() */ public function seeFileContentsEqual($text) { @@ -375,7 +461,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $text + * @param string $text * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Filesystem::dontSeeInThisFile() */ @@ -394,7 +480,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $text + * @param string $text * @see \Codeception\Module\Filesystem::dontSeeInThisFile() */ public function dontSeeInThisFile($text) { @@ -425,7 +511,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $filename + * @param string $filename * @param string $path * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Filesystem::seeFileFound() @@ -445,7 +531,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $filename + * @param string $filename * @param string $path * @see \Codeception\Module\Filesystem::seeFileFound() */ @@ -459,7 +545,7 @@ trait AcceptanceTesterActions * * Checks if file does not exist in path * - * @param $filename + * @param string $filename * @param string $path * Conditional Assertion: Test won't be stopped on fail * @see \Codeception\Module\Filesystem::dontSeeFileFound() @@ -472,7 +558,7 @@ trait AcceptanceTesterActions * * Checks if file does not exist in path * - * @param $filename + * @param string $filename * @param string $path * @see \Codeception\Module\Filesystem::dontSeeFileFound() */ @@ -492,7 +578,7 @@ trait AcceptanceTesterActions * ?> * ``` * - * @param $dirname + * @param string $dirname * @see \Codeception\Module\Filesystem::cleanDir() */ public function cleanDir($dirname) { @@ -505,8 +591,8 @@ trait AcceptanceTesterActions * * Saves contents to file * - * @param $filename - * @param $contents + * @param string $filename + * @param string $contents * @see \Codeception\Module\Filesystem::writeToFile() */ public function writeToFile($filename, $contents) { diff --git a/lumen-test/tests/_support/_generated/FunctionalTesterActions.php b/lumen-test/tests/_support/_generated/FunctionalTesterActions.php index 01e7df9..074ea91 100644 --- a/lumen-test/tests/_support/_generated/FunctionalTesterActions.php +++ b/lumen-test/tests/_support/_generated/FunctionalTesterActions.php @@ -1,4 +1,4 @@ -getScenario()->runStep(new \Codeception\Step\Action('assertArraySubset', func_get_args())); + } } diff --git a/lumen-test/tests/_support/_generated/UnitTesterActions.php b/lumen-test/tests/_support/_generated/UnitTesterActions.php index 35bd8ec..9b2691f 100644 --- a/lumen-test/tests/_support/_generated/UnitTesterActions.php +++ b/lumen-test/tests/_support/_generated/UnitTesterActions.php @@ -1,4 +1,4 @@ -assertEquals($element->getChildrenCount(), 5); + * ``` + * + * Floating-point example: + * ```php + * assertEquals($calculator->add(0.1, 0.2), 0.3, 'Calculator should add the two numbers correctly.', 0.01); + * ``` * * @param $expected * @param $actual * @param string $message + * @param float $delta * @see \Codeception\Module\Asserts::assertEquals() */ - public function assertEquals($expected, $actual, $message = null) { + public function assertEquals($expected, $actual, $message = null, $delta = null) { return $this->getScenario()->runStep(new \Codeception\Step\Action('assertEquals', func_get_args())); } @@ -34,14 +49,29 @@ trait UnitTesterActions /** * [!] Method is generated. Documentation taken from corresponding module. * - * Checks that two variables are not equal + * Checks that two variables are not equal. If you're comparing floating-point values, + * you can specify the optional "delta" parameter which dictates how great of a precision + * error are you willing to tolerate in order to consider the two values not equal. + * + * Regular example: + * ```php + * assertNotEquals($element->getChildrenCount(), 0); + * ``` + * + * Floating-point example: + * ```php + * assertNotEquals($calculator->add(0.1, 0.2), 0.4, 'Calculator should add the two numbers correctly.', 0.01); + * ``` * * @param $expected * @param $actual * @param string $message + * @param float $delta * @see \Codeception\Module\Asserts::assertNotEquals() */ - public function assertNotEquals($expected, $actual, $message = null) { + public function assertNotEquals($expected, $actual, $message = null, $delta = null) { return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotEquals', func_get_args())); } @@ -54,7 +84,6 @@ trait UnitTesterActions * @param $expected * @param $actual * @param string $message - * @return mixed|void * @see \Codeception\Module\Asserts::assertSame() */ public function assertSame($expected, $actual, $message = null) { @@ -197,6 +226,36 @@ trait UnitTesterActions } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that a string starts with the given prefix. + * + * @param string $prefix + * @param string $string + * @param string $message + * @see \Codeception\Module\Asserts::assertStringStartsWith() + */ + public function assertStringStartsWith($prefix, $string, $message = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringStartsWith', func_get_args())); + } + + + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that a string doesn't start with the given prefix. + * + * @param string $prefix + * @param string $string + * @param string $message + * @see \Codeception\Module\Asserts::assertStringStartsNotWith() + */ + public function assertStringStartsNotWith($prefix, $string, $message = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringStartsNotWith', func_get_args())); + } + + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -373,6 +432,22 @@ trait UnitTesterActions } + /** + * [!] Method is generated. Documentation taken from corresponding module. + * + * Checks that array contains subset. + * + * @param array $subset + * @param array $array + * @param bool $strict + * @param string $message + * @see \Codeception\Module::assertArraySubset() + */ + public function assertArraySubset($subset, $array, $strict = null, $message = null) { + return $this->getScenario()->runStep(new \Codeception\Step\Action('assertArraySubset', func_get_args())); + } + + /** * [!] Method is generated. Documentation taken from corresponding module. * diff --git a/lumen-test/tests/acceptance/ResourcesWithLaravelRoutesCept.php b/lumen-test/tests/acceptance/ResourcesWithLaravelRoutesCept.php new file mode 100644 index 0000000..3da5289 --- /dev/null +++ b/lumen-test/tests/acceptance/ResourcesWithLaravelRoutesCept.php @@ -0,0 +1,121 @@ +wantTo('Generate RESTful resources from a file with Laravel Routes'); +$I->runShellCommand('php artisan wn:resources tests/_data/ResourcesTest.yml --laravel=true'); + +// Checking the model +$I->seeInShellOutput('Author model generated'); +$I->seeInShellOutput('Book model generated'); +$I->seeInShellOutput('Library model generated'); +$I->seeFileFound('./app/Author.php'); +$I->seeFileFound('./app/Book.php'); +$I->seeFileFound('./app/Library.php'); +$I->deleteFile('./app/Author.php'); +$I->deleteFile('./app/Book.php'); +$I->deleteFile('./app/Library.php'); + +// Checking the migration +$I->seeInShellOutput('authors migration generated'); +$I->seeInShellOutput('books migration generated'); +$I->seeInShellOutput('libraries migration generated'); +// Can't check for specific file names, so we'll just strip the directory +$I->cleanDir('database/migrations'); +$I->writeToFile('database/migrations/.gitkeep', ''); + +// Checking the RESTActions trait +$I->seeFileFound('./app/Http/Controllers/RESTActions.php'); +$I->deleteFile('./app/Http/Controllers/RESTActions.php'); + +// Checking the controller +$I->seeInShellOutput('AuthorsController generated'); +$I->seeInShellOutput('LibrariesController generated'); +$I->seeInShellOutput('BooksController generated'); +$I->seeFileFound('./app/Http/Controllers/AuthorsController.php'); +$I->seeFileFound('./app/Http/Controllers/LibrariesController.php'); +$I->seeFileFound('./app/Http/Controllers/BooksController.php'); + +$I->deleteFile('./app/Http/Controllers/AuthorsController.php'); +$I->deleteFile('./app/Http/Controllers/LibrariesController.php'); +$I->deleteFile('./app/Http/Controllers/BooksController.php'); + +$I->seeFileFound('routes/api.php'); + +$I->seeInThisFile(' +Route::get(\'author\', \'AuthorsController@all\'); +Route::get(\'author/{id}\', \'AuthorsController@get\'); +Route::post(\'author\', \'AuthorsController@add\'); +Route::put(\'author/{id}\', \'AuthorsController@put\'); +Route::delete(\'author/{id}\', \'AuthorsController@remove\');'); + +$I->seeInThisFile(' +Route::get(\'book\', \'BooksController@all\'); +Route::get(\'book/{id}\', \'BooksController@get\'); +Route::post(\'book\', \'BooksController@add\'); +Route::put(\'book/{id}\', \'BooksController@put\'); +Route::delete(\'book/{id}\', \'BooksController@remove\');'); + +$I->seeInThisFile(' +Route::get(\'library\', \'LibrariesController@all\'); +Route::get(\'library/{id}\', \'LibrariesController@get\'); +Route::post(\'library\', \'LibrariesController@add\'); +Route::put(\'library/{id}\', \'LibrariesController@put\'); +Route::delete(\'library/{id}\', \'LibrariesController@remove\');'); +$I->writeToFile('./app/Http/routes.php', 'openFile('./database/factories/ModelFactory.php'); +// $I->seeInThisFile( +// "/** +// * Factory definition for model App\TaskCategory. +// */ +// \$factory->define(App\TaskCategory::class, function (\$faker) { +// return [ +// 'name' => \$faker->word, +// 'descr' => \$faker->paragraph, +// 'due' => \$faker->date, +// ]; +// });"); +$I->writeToFile('./database/factories/ModelFactory.php', "define(App\User::class, function (\$faker) { + return [ + 'name' => \$faker->name, + 'email' => \$faker->email, + 'password' => str_random(10), + 'remember_token' => str_random(10), + ]; +}); +"); + +// Checking database seeder +// $I->openFile('./database/seeds/TaskCategoriesTableSeeder.php'); +// $I->seeInThisFile(' +// use Illuminate\Database\Seeder; + +// class TaskCategoriesTableSeeder extends Seeder +// { +// public function run() +// { +// factory(App\TaskCategory::class, 10)->create(); +// } +// }'); +// $I->deleteFile('./database/seeds/TaskCategoriesTableSeeder.php'); diff --git a/lumen-test/tests/acceptance/RouteCommandCept.php b/lumen-test/tests/acceptance/RouteCommandCept.php index d22918c..0ba89a7 100644 --- a/lumen-test/tests/acceptance/RouteCommandCept.php +++ b/lumen-test/tests/acceptance/RouteCommandCept.php @@ -62,7 +62,9 @@ $app->get("/", function () use ($app) { $I->wantTo('run wn:routes in Lumen 5.3+'); -mkdir('./routes'); +if(!file_exists('./routes')) { + mkdir('./routes'); +} $I->writeToFile('./routes/web.php', 'get(); $this->save($content, "./app/Http/Controllers/{$controller}.php", "{$controller}"); - if(! $this->option('no-routes')){ - $this->call('wn:route', [ + $options = [ 'resource' => snake_case($name, '-'), '--controller' => $controller, - '--laravel' => $this->options('laravel') - ]); + ]; +// try { +// if($this->option('laravel')) { +// $options['--laravel'] = true; +// }; +// } catch (InvalidArgumentException $e) { +// // Do nothing +// } + + $this->call('wn:route', $options); } } diff --git a/src/Commands/ResourceCommand.php b/src/Commands/ResourceCommand.php index c4926fd..b6a50f4 100644 --- a/src/Commands/ResourceCommand.php +++ b/src/Commands/ResourceCommand.php @@ -1,6 +1,8 @@ call('wn:controller', [ + $controllerOptions = [ 'model' => $modelName, '--force' => $this->option('force'), '--no-routes' => false, - '--laravel' => $this->option('laravel') - ]); + ]; + try { + if($this->option('laravel')) { + $controllerOptions['--laravel'] = true; + }; + } catch (InvalidArgumentException $e) { + // Do nothing + } + $this->call('wn:controller', $controllerOptions); // generating model factory $this->call('wn:factory', [ diff --git a/src/Commands/ResourcesCommand.php b/src/Commands/ResourcesCommand.php index 51bd269..74d2f6f 100644 --- a/src/Commands/ResourcesCommand.php +++ b/src/Commands/ResourcesCommand.php @@ -1,5 +1,6 @@ $i){ $i = $this->getResourceParams($model, $i); - $this->call('wn:resource', [ + $options = [ 'name' => $i['name'], 'fields' => $i['fields'], '--add' => $i['add'], @@ -35,8 +36,17 @@ class ResourcesCommand extends BaseCommand { '--belongs-to-many' => $i['belongsToMany'], '--path' => $this->option('path'), '--force' => $this->option('force'), - '--laravel' => $this->option('laravel') - ]); + ]; + + try { + if($this->option('laravel')) { + $options['--laravel'] = true; + }; + } catch (InvalidArgumentException $e) { + // Do nothing + } + + $this->call('wn:resource', $options); } // $this->call('migrate'); // actually needed for pivot seeders ! diff --git a/src/Commands/RouteCommand.php b/src/Commands/RouteCommand.php index 2fdf727..5a429fb 100644 --- a/src/Commands/RouteCommand.php +++ b/src/Commands/RouteCommand.php @@ -1,6 +1,8 @@ argument('resource'); - $laravelRoutes = $this->option('laravel'); - $templateFile = 'routes'; + $laravelRoutes = $this->input->hasOption('laravel') ? $this->option('laravel') : false; - $routesPath = './routes/web.php'; + $templateFile = 'routes'; + $routesPath = 'routes/web.php'; if ($laravelRoutes) { - $routesPath = './routes/api.php'; $templateFile = 'routes-laravel'; + $routesPath = 'routes/api.php'; + if (!$this->fs->isFile($routesPath)) { + $this->fs->put($routesPath, " + get('/user', function (Request $request) { + return $request->user(); + }); + + "); + } + } + + if(!$this->fs->isFile($routesPath)) { + $routesPath = 'app/Http/routes.php'; } - if (! $this->fs->exists($routesPath)) - $routesPath = './app/Http/routes.php'; $content = $this->fs->get($routesPath);