Skip to content

Commit d4d54cc

Browse files
authored
Fix duplicate and missing return type declarations (#433)
1 parent 9a02f2a commit d4d54cc

File tree

7 files changed

+114
-31
lines changed

7 files changed

+114
-31
lines changed

src/Generators/ControllerGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ protected function buildMethods(Controller $controller)
164164
}
165165

166166
if (Blueprint::supportsReturnTypeHits()) {
167-
$method = str_replace('request)', 'request): \Illuminate\Http\Response', $method);
167+
$method = str_replace(')'.PHP_EOL, '): \Illuminate\Http\Response'.PHP_EOL, $method);
168168
}
169169

170170
$methods .= PHP_EOL.$method;

src/Generators/ModelGenerator.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ protected function buildRelationships(Model $model)
184184
}
185185

186186
foreach ($model->relationships() as $type => $references) {
187-
$custom_template = $template;
188187
foreach ($references as $reference) {
188+
$custom_template = $template;
189189
$key = null;
190190
$class = null;
191191

@@ -230,6 +230,7 @@ protected function buildRelationships(Model $model)
230230
} elseif (in_array($type, ['hasMany', 'belongsToMany', 'morphMany'])) {
231231
$method_name = Str::plural($column_name);
232232
}
233+
233234
if (Blueprint::supportsReturnTypeHits()) {
234235
$custom_template = str_replace(
235236
'{{ method }}()',

tests/Feature/Generators/ControllerGeneratorTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,12 @@ public function output_using_return_types()
189189
->with('app/Http/Controllers', 0755, true);
190190

191191
$this->files->expects('put')
192-
->with('app/Http/Controllers/PostController.php', $this->fixture('controllers/return-type-declarations.php'));
192+
->with('app/Http/Controllers/TermController.php', $this->fixture('controllers/return-type-declarations.php'));
193193

194-
$tokens = $this->blueprint->parse($this->fixture('drafts/readme-example.yaml'));
194+
$tokens = $this->blueprint->parse($this->fixture('drafts/return-type-declarations.yaml'));
195195
$tree = $this->blueprint->analyze($tokens);
196196

197-
$this->assertEquals(['created' => ['app/Http/Controllers/PostController.php']], $this->subject->output($tree));
197+
$this->assertEquals(['created' => ['app/Http/Controllers/TermController.php']], $this->subject->output($tree));
198198
}
199199

200200
public function controllerTreeDataProvider()

tests/Feature/Generators/ModelGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ public function laravel8ModelTreeDataProvider()
692692
['drafts/resource-statements.yaml', 'app/User.php', 'models/resource-statements-laravel8.php'],
693693
['drafts/all-column-types.yaml', 'app/AllType.php', 'models/all-column-types-laravel8.php'],
694694
['drafts/alias-relationships.yaml', 'app/Salesman.php', 'models/alias-relationships-laravel8.php'],
695-
['drafts/alias-relationships.yaml', 'app/Salesman.php', 'models/return-type-declarations.php'],
695+
['drafts/return-type-declarations.yaml', 'app/Term.php', 'models/return-type-declarations.php'],
696696
['drafts/uuid-shorthand-invalid-relationship.yaml', 'app/AgeCohort.php', 'models/uuid-shorthand-invalid-relationship-laravel8.php'],
697697
];
698698
}

tests/fixtures/controllers/return-type-declarations.php

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,89 @@
22

33
namespace App\Http\Controllers;
44

5-
use App\Events\NewPost;
6-
use App\Http\Requests\PostStoreRequest;
7-
use App\Jobs\SyncMedia;
8-
use App\Mail\ReviewPost;
9-
use App\Post;
5+
use App\Http\Requests\TermStoreRequest;
6+
use App\Http\Requests\TermUpdateRequest;
7+
use App\Term;
108
use Illuminate\Http\Request;
11-
use Illuminate\Support\Facades\Mail;
129

13-
class PostController extends Controller
10+
class TermController extends Controller
1411
{
1512
/**
1613
* @param \Illuminate\Http\Request $request
1714
* @return \Illuminate\Http\Response
1815
*/
1916
public function index(Request $request): \Illuminate\Http\Response
2017
{
21-
$posts = Post::all();
18+
$terms = Term::all();
2219

23-
return view('post.index', compact('posts'));
20+
return view('term.index', compact('terms'));
2421
}
2522

2623
/**
27-
* @param \App\Http\Requests\PostStoreRequest $request
24+
* @param \Illuminate\Http\Request $request
25+
* @return \Illuminate\Http\Response
26+
*/
27+
public function create(Request $request): \Illuminate\Http\Response
28+
{
29+
return view('term.create');
30+
}
31+
32+
/**
33+
* @param \App\Http\Requests\TermStoreRequest $request
34+
* @return \Illuminate\Http\Response
35+
*/
36+
public function store(TermStoreRequest $request): \Illuminate\Http\Response
37+
{
38+
$term = Term::create($request->validated());
39+
40+
$request->session()->flash('term.id', $term->id);
41+
42+
return redirect()->route('term.index');
43+
}
44+
45+
/**
46+
* @param \Illuminate\Http\Request $request
47+
* @param \App\Term $term
48+
* @return \Illuminate\Http\Response
49+
*/
50+
public function show(Request $request, Term $term): \Illuminate\Http\Response
51+
{
52+
return view('term.show', compact('term'));
53+
}
54+
55+
/**
56+
* @param \Illuminate\Http\Request $request
57+
* @param \App\Term $term
2858
* @return \Illuminate\Http\Response
2959
*/
30-
public function store(PostStoreRequest $request): \Illuminate\Http\Response
60+
public function edit(Request $request, Term $term): \Illuminate\Http\Response
3161
{
32-
$post = Post::create($request->validated());
62+
return view('term.edit', compact('term'));
63+
}
3364

34-
Mail::to($post->author->email)->send(new ReviewPost($post));
65+
/**
66+
* @param \App\Http\Requests\TermUpdateRequest $request
67+
* @param \App\Term $term
68+
* @return \Illuminate\Http\Response
69+
*/
70+
public function update(TermUpdateRequest $request, Term $term): \Illuminate\Http\Response
71+
{
72+
$term->update($request->validated());
3573

36-
SyncMedia::dispatch($post);
74+
$request->session()->flash('term.id', $term->id);
3775

38-
event(new NewPost($post));
76+
return redirect()->route('term.index');
77+
}
3978

40-
$request->session()->flash('post.title', $post->title);
79+
/**
80+
* @param \Illuminate\Http\Request $request
81+
* @param \App\Term $term
82+
* @return \Illuminate\Http\Response
83+
*/
84+
public function destroy(Request $request, Term $term): \Illuminate\Http\Response
85+
{
86+
$term->delete();
4187

42-
return redirect()->route('post.index');
88+
return redirect()->route('term.index');
4389
}
4490
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
models:
2+
Term:
3+
uuid: string unique
4+
name: json
5+
description: json nullable
6+
meta: json nullable
7+
user_id: id nullable foreign onDelete:null onUpdate:cascade
8+
team_id: id foreign onDelete:cascade onUpdate:cascade
9+
published: boolean default:1
10+
type: string nullable default:booking
11+
softDeletes
12+
relationships:
13+
belongsToMany: Organizer, Event
14+
15+
controllers:
16+
Term:
17+
resource

tests/fixtures/models/return-type-declarations.php

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,26 @@
44

55
use Illuminate\Database\Eloquent\Factories\HasFactory;
66
use Illuminate\Database\Eloquent\Model;
7+
use Illuminate\Database\Eloquent\SoftDeletes;
78

8-
class Salesman extends Model
9+
class Term extends Model
910
{
10-
use HasFactory;
11+
use HasFactory, SoftDeletes;
1112

1213
/**
1314
* The attributes that are mass assignable.
1415
*
1516
* @var array
1617
*/
1718
protected $fillable = [
19+
'uuid',
1820
'name',
21+
'description',
22+
'meta',
23+
'user_id',
24+
'team_id',
25+
'published',
26+
'type',
1927
];
2028

2129
/**
@@ -25,21 +33,32 @@ class Salesman extends Model
2533
*/
2634
protected $casts = [
2735
'id' => 'integer',
36+
'name' => 'array',
37+
'description' => 'array',
38+
'meta' => 'array',
39+
'user_id' => 'integer',
40+
'team_id' => 'integer',
41+
'published' => 'boolean',
2842
];
2943

3044

31-
public function lead(): \Illuminate\Database\Eloquent\Relations\HasOne
45+
public function organizers(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
3246
{
33-
return $this->hasOne(\App\User::class);
47+
return $this->belongsToMany(\App\Organizer::class);
3448
}
3549

36-
public function methodNames(): \Illuminate\Database\Eloquent\Relations\HasMany
50+
public function events(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
3751
{
38-
return $this->hasMany(\App\ClassName::class);
52+
return $this->belongsToMany(\App\Event::class);
3953
}
4054

41-
public function methodName(): \Illuminate\Database\Eloquent\Relations\BelongsTo
55+
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo
4256
{
43-
return $this->belongsTo(\App\ClassName::class);
57+
return $this->belongsTo(\App\User::class);
58+
}
59+
60+
public function team(): \Illuminate\Database\Eloquent\Relations\BelongsTo
61+
{
62+
return $this->belongsTo(\App\Team::class);
4463
}
4564
}

0 commit comments

Comments
 (0)