Skip to content

Commit e22ec12

Browse files
committed
Add additional type checks for calling factories with a closure
1 parent 368fabc commit e22ec12

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

types/Database/Eloquent/Factories/Factory.php

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ public function definition()
2828
}
2929
}
3030

31-
$factory = UserFactory::new();
32-
assertType('UserFactory', $factory);
31+
assertType('UserFactory', $factory = UserFactory::new());
32+
assertType('UserFactory', UserFactory::new(['string' => 'string']));
33+
assertType('UserFactory', UserFactory::new(function ($attributes) {
34+
// assertType('array<string, mixed>', $attributes);
35+
return ['string' => 'string'];
36+
}));
3337

3438
assertType('array<string, mixed>', $factory->definition());
3539

@@ -39,16 +43,28 @@ public function definition()
3943

4044
assertType('array<int|string, mixed>', $factory->raw());
4145
assertType('array<int|string, mixed>', $factory->raw(['string' => 'string']));
46+
assertType('array<int|string, mixed>', $factory->raw(function ($attributes) {
47+
// assert('array<string, mixed>', $attributes);
48+
return ['string' => 'string'];
49+
}));
4250

4351
// assertType('User', $factory->createOne());
4452
// assertType('User', $factory->createOne(['string' => 'string']));
4553
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne());
4654
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne(['string' => 'string']));
55+
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne(function ($attributes) {
56+
// assertType('array<string, mixed>', $attributes);
57+
return ['string' => 'string'];
58+
}));
4759

4860
// assertType('User', $factory->createOneQuietly());
4961
// assertType('User', $factory->createOneQuietly(['string' => 'string']));
5062
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly());
5163
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly(['string' => 'string']));
64+
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly(function ($attributes) {
65+
// assertType('array<string, mixed>', $attributes);
66+
return ['string' => 'string'];
67+
}));
5268

5369
// assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createMany([['string' => 'string']]));
5470
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createMany(
@@ -68,6 +84,10 @@ public function definition()
6884
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create([
6985
'string' => 'string',
7086
]));
87+
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create(function ($attributes) {
88+
// assertType('array<string, mixed>', $attributes);
89+
return ['string' => 'string'];
90+
}));
7191

7292
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly());
7393
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly([
@@ -95,6 +115,10 @@ public function definition()
95115
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne([
96116
'string' => 'string',
97117
]));
118+
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne(function ($attributes) {
119+
// assert('array<string, mixed>', $attributes);
120+
return ['string' => 'string'];
121+
}));
98122

99123
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make());
100124
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make([
@@ -104,6 +128,10 @@ public function definition()
104128
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make([
105129
'string' => 'string',
106130
]));
131+
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make(function ($attributes) {
132+
// assert('array<string, mixed>', $attributes);
133+
return ['string' => 'string'];
134+
}));
107135

108136
assertType('UserFactory', $factory->state(['string' => 'string']));
109137
assertType('UserFactory', $factory->state(function () {

0 commit comments

Comments
 (0)