Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion src/Generators/ControllerGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,16 @@ protected function buildMethods(Controller $controller)
if (isset($fqcn) && $name !== 'destroy' && $controller->isApiResource()) {
$method = str_replace(')' . PHP_EOL, '): \\' . $fqcn . PHP_EOL, $method);
} else {
$method = str_replace(')' . PHP_EOL, '): \Illuminate\Http\Response' . PHP_EOL, $method);
$returnType = match (true) {
$statement instanceof RenderStatement => 'Illuminate\View\View',
$statement instanceof RedirectStatement => 'Illuminate\Routing\Redirector',
default => 'Illuminate\Http\Response'
};

$method = Str::of($method)
->replace('* @return \\Illuminate\\Http\\Response', '* @return \\' . $returnType)
->replace(')' . PHP_EOL, '): \\' . $returnType . PHP_EOL)
->toString();
}
}

Expand Down
1 change: 1 addition & 0 deletions tests/Feature/BlueprintTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,7 @@ public function generate_should_skip_specific_types()

/**
* @test
*
* @dataProvider namespacesDataProvider
*/
public function relative_namespace_removes_namespace_prefix_from_reference($namespace, $expected, $reference)
Expand Down
28 changes: 28 additions & 0 deletions tests/Feature/Generators/ControllerGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public function output_writes_nothing_for_empty_tree()

/**
* @test
*
* @dataProvider controllerTreeDataProvider
*/
public function output_writes_migration_for_controller_tree($definition, $path, $controller)
Expand Down Expand Up @@ -240,4 +241,31 @@ public function controllerTreeDataProvider()
['drafts/invokable-controller-shorthand.yaml', 'app/Http/Controllers/ReportController.php', 'controllers/invokable-controller-shorthand.php'],
];
}

public function testOutputGeneratesControllersWithTypehints(): void
{
$definition = 'drafts/controller-returns-view-typehint.yaml';
$path = 'app/Http/Controllers/UserController.php';
$controller = 'controllers/controller-returns-view-typehint.php';

$this->app['config']->set('blueprint.use_return_types', true);

$this->filesystem->expects('stub')
->with('controller.class.stub')
->andReturn($this->stub('controller.class.stub'));
$this->filesystem->expects('stub')
->with('controller.method.stub')
->andReturn($this->stub('controller.method.stub'));

$this->filesystem->expects('exists')
->with(dirname($path))
->andReturnTrue();
$this->filesystem->expects('put')
->with($path, $this->fixture($controller));

$tokens = $this->blueprint->parse($this->fixture($definition));
$tree = $this->blueprint->analyze($tokens);

self::assertSame(['created' => [$path]], $this->subject->output($tree));
}
}
1 change: 1 addition & 0 deletions tests/Feature/Generators/FactoryGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public function output_writes_nothing_for_empty_tree()

/**
* @test
*
* @dataProvider modelTreeDataProvider
*/
public function output_writes_factory_for_model_tree($definition, $path, $factory)
Expand Down
2 changes: 2 additions & 0 deletions tests/Feature/Generators/MigrationGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public function output_writes_nothing_for_empty_tree()

/**
* @test
*
* @dataProvider modelTreeDataProvider
*/
public function output_writes_migration_for_model_tree($definition, $path, $migration)
Expand Down Expand Up @@ -80,6 +81,7 @@ public function output_writes_migration_for_model_tree($definition, $path, $migr

/**
* @test
*
* @dataProvider modelTreeDataProvider
*/
public function output_updates_migration_for_model_tree($definition, $path, $migration)
Expand Down
2 changes: 2 additions & 0 deletions tests/Feature/Generators/ModelGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public function output_generates_nothing_for_empty_tree()

/**
* @test
*
* @dataProvider modelTreeDataProvider
*/
public function output_generates_models($definition, $path, $model)
Expand Down Expand Up @@ -393,6 +394,7 @@ public function output_respects_configuration()

/**
* @test
*
* @dataProvider docBlockModelsDataProvider
*/
public function output_generates_phpdoc_for_model($definition, $path, $model)
Expand Down
1 change: 1 addition & 0 deletions tests/Feature/Generators/RouteGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public function output_generates_nothing_for_empty_tree()

/**
* @test
*
* @dataProvider controllerTreeDataProvider
*/
public function output_generates_web_routes($definition, $routes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public function output_writes_nothing_tree_without_validate_statements()

/**
* @test
*
* @dataProvider notificationDraftProvider
*/
public function output_writes_notifications($draft)
Expand Down
1 change: 1 addition & 0 deletions tests/Feature/Generators/TestGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public function output_writes_nothing_for_empty_tree()

/**
* @test
*
* @dataProvider controllerTreeDataProvider
*/
public function output_generates_test_for_controller_tree_l8($definition, $path, $test)
Expand Down
2 changes: 2 additions & 0 deletions tests/Feature/Lexers/ModelLexerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ public function it_accepts_lowercase_keywords()

/**
* @test
*
* @dataProvider dataTypeAttributesDataProvider
*/
public function it_handles_data_type_attributes($definition, $data_type, $attributes)
Expand Down Expand Up @@ -304,6 +305,7 @@ public function it_handles_data_type_attributes($definition, $data_type, $attrib

/**
* @test
*
* @dataProvider modifierAttributesProvider
*/
public function it_handles_modifier_attributes($definition, $modifier, $attributes)
Expand Down
2 changes: 2 additions & 0 deletions tests/Feature/Lexers/StatementLexerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,7 @@ public function it_returns_a_validate_statement()

/**
* @test
*
* @dataProvider eloquentTokensProvider
*/
public function it_returns_an_eloquent_statement($operation, $reference)
Expand Down Expand Up @@ -471,6 +472,7 @@ public function it_returns_an_update_eloquent_statement_with_columns()

/**
* @test
*
* @dataProvider sessionTokensProvider
*/
public function it_returns_a_session_statement($operation, $reference)
Expand Down
10 changes: 10 additions & 0 deletions tests/Feature/Translators/RulesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public function forColumn_returns_nullable_rule()

/**
* @test
*
* @dataProvider stringDataTypesProvider
*/
public function forColumn_returns_string_rule_for_string_data_types($data_type)
Expand All @@ -58,6 +59,7 @@ public function forColumn_returns_max_rule_for_string_attributes()

/**
* @test
*
* @dataProvider stringDataTypesProvider
*/
public function forColumn_uses_email_rule_for_columns_named_email_or_email_address($data_type)
Expand All @@ -75,6 +77,7 @@ public function forColumn_uses_email_rule_for_columns_named_email_or_email_addre

/**
* @test
*
* @dataProvider stringDataTypesProvider
*/
public function forColumn_uses_password_rule_for_columns_named_password($data_type)
Expand All @@ -87,6 +90,7 @@ public function forColumn_uses_password_rule_for_columns_named_password($data_ty

/**
* @test
*
* @dataProvider numericDataTypesProvider
*/
public function forColumn_returns_numeric_rule_for_numeric_types($data_type)
Expand All @@ -98,6 +102,7 @@ public function forColumn_returns_numeric_rule_for_numeric_types($data_type)

/**
* @test
*
* @dataProvider integerDataTypesProvider
*/
public function forColumn_returns_integer_rule_for_integer_types($data_type)
Expand Down Expand Up @@ -138,6 +143,7 @@ public function forColumn_return_exists_rule_for_the_unique_modifier()

/**
* @test
*
* @dataProvider relationshipColumnProvider
*/
public function forColumn_returns_exists_rule_for_foreign_keys($name, $table)
Expand Down Expand Up @@ -179,6 +185,7 @@ public function forColumn_returns_in_rule_for_enums_and_sets()

/**
* @test
*
* @dataProvider dateDataTypesProvider
*/
public function forColumn_returns_date_rule_for_date_types($data_type)
Expand Down Expand Up @@ -224,6 +231,7 @@ public function forColumn_does_not_return_between_rule_for_unsigned_decimal_with

/**
* @test
*
* @dataProvider noBetweenRuleDataProvider
*/
public function forColumn_does_not_return_between_rule_for_double_without_precision_and_scale($column)
Expand All @@ -233,6 +241,7 @@ public function forColumn_does_not_return_between_rule_for_double_without_precis

/**
* @test
*
* @dataProvider noBetweenRuleDataProvider
*/
public function forColumn_does_not_return_between_rule($column)
Expand All @@ -242,6 +251,7 @@ public function forColumn_does_not_return_between_rule($column)

/**
* @test
*
* @dataProvider betweenRuleDataProvider
*/
public function forColumn_returns_between_rule($column, $interval)
Expand Down
1 change: 1 addition & 0 deletions tests/Unit/EnumTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class EnumTypeTest extends TestCase
{
/**
* @test
*
* @dataProvider enumOptionsDataProvider
*/
public function it_returns_options_for_enum($definition, $expected)
Expand Down
90 changes: 90 additions & 0 deletions tests/fixtures/controllers/controller-returns-view-typehint.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<?php

namespace App\Http\Controllers;

use App\Http\Requests\UserStoreRequest;
use App\Http\Requests\UserUpdateRequest;
use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
/**
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\View
*/
public function index(Request $request): \Illuminate\View\View
{
$users = User::all();

return view('user.index', compact('users'));
}

/**
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\View
*/
public function create(Request $request): \Illuminate\View\View
{
return view('user.create');
}

/**
* @param \App\Http\Requests\UserStoreRequest $request
* @return \Illuminate\Routing\Redirector
*/
public function store(UserStoreRequest $request): \Illuminate\Routing\Redirector
{
$user = User::create($request->validated());

$request->session()->flash('user.id', $user->id);

return redirect()->route('user.index');
}

/**
* @param \Illuminate\Http\Request $request
* @param \App\Models\User $user
* @return \Illuminate\View\View
*/
public function show(Request $request, User $user): \Illuminate\View\View
{
return view('user.show', compact('user'));
}

/**
* @param \Illuminate\Http\Request $request
* @param \App\Models\User $user
* @return \Illuminate\View\View
*/
public function edit(Request $request, User $user): \Illuminate\View\View
{
return view('user.edit', compact('user'));
}

/**
* @param \App\Http\Requests\UserUpdateRequest $request
* @param \App\Models\User $user
* @return \Illuminate\Routing\Redirector
*/
public function update(UserUpdateRequest $request, User $user): \Illuminate\Routing\Redirector
{
$user->update($request->validated());

$request->session()->flash('user.id', $user->id);

return redirect()->route('user.index');
}

/**
* @param \Illuminate\Http\Request $request
* @param \App\Models\User $user
* @return \Illuminate\Routing\Redirector
*/
public function destroy(Request $request, User $user): \Illuminate\Routing\Redirector
{
$user->delete();

return redirect()->route('user.index');
}
}
Loading