forked from laravel/framework
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Factory.php
229 lines (185 loc) · 9.56 KB
/
Factory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<?php
use Illuminate\Database\Eloquent\Factories\Factory;
use function PHPStan\Testing\assertType;
/**
* @extends Illuminate\Database\Eloquent\Factories\Factory<User>
*/
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var class-string<User>
*/
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition()
{
return [
//
];
}
}
assertType('UserFactory', $factory = UserFactory::new());
assertType('UserFactory', UserFactory::new(['string' => 'string']));
assertType('UserFactory', UserFactory::new(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
assertType('array<string, mixed>', $factory->definition());
assertType('UserFactory', $factory::times(10));
assertType('UserFactory', $factory->configure());
assertType('array<int|string, mixed>', $factory->raw());
assertType('array<int|string, mixed>', $factory->raw(['string' => 'string']));
assertType('array<int|string, mixed>', $factory->raw(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
// assertType('User', $factory->createOne());
// assertType('User', $factory->createOne(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne());
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOne(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
// assertType('User', $factory->createOneQuietly());
// assertType('User', $factory->createOneQuietly(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly());
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->createOneQuietly(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
// assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createMany([['string' => 'string']]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createMany(
[['string' => 'string']]
));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createMany(3));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createMany());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>', $factory->createManyQuietly([['string' => 'string']]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createManyQuietly(
[['string' => 'string']]
));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createManyQuietly(3));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>', $factory->createManyQuietly());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->create([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create());
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->create(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->createQuietly([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->createQuietly());
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->createQuietly([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->createQuietly(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
// assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->lazy());
// assertType('Closure(): Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->lazy([
// 'string' => 'string',
// ]));
assertType('Closure(): (Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model)', $factory->lazy());
assertType('Closure(): (Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model)', $factory->lazy([
'string' => 'string',
]));
// assertType('User', $factory->makeOne());
// assertType('User', $factory->makeOne([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne());
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Model', $factory->makeOne(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make());
// assertType('Illuminate\Database\Eloquent\Collection<int, User>|User', $factory->make([
// 'string' => 'string',
// ]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make());
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make([
'string' => 'string',
]));
assertType('Illuminate\Database\Eloquent\Collection<int, Illuminate\Database\Eloquent\Model>|Illuminate\Database\Eloquent\Model', $factory->make(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
assertType('UserFactory', $factory->state(['string' => 'string']));
assertType('UserFactory', $factory->state(function ($attributes) {
assertType('array<string, mixed>', $attributes);
return ['string' => 'string'];
}));
assertType('UserFactory', $factory->state(function ($attributes, $model) {
assertType('array<string, mixed>', $attributes);
assertType('Illuminate\Database\Eloquent\Model|null', $model);
return ['string' => 'string'];
}));
assertType('UserFactory', $factory->sequence([['string' => 'string']]));
assertType('UserFactory', $factory->has($factory));
assertType('UserFactory', $factory->hasAttached($factory, ['string' => 'string']));
assertType('UserFactory', $factory->hasAttached($factory->createOne(), ['string' => 'string']));
assertType('UserFactory', $factory->hasAttached($factory->createOne(), function () {
return ['string' => 'string'];
}));
assertType('UserFactory', $factory->for($factory));
assertType('UserFactory', $factory->for($factory->createOne()));
// assertType('UserFactory', $factory->afterMaking(function ($user) {
// assertType('User', $user);
// }));
assertType('UserFactory', $factory->afterMaking(function ($user) {
assertType('Illuminate\Database\Eloquent\Model', $user);
}));
assertType('UserFactory', $factory->afterMaking(function ($user) {
return 'string';
}));
// assertType('UserFactory', $factory->afterCreating(function ($user) {
// assertType('User', $user);
// }));
assertType('UserFactory', $factory->afterCreating(function ($user) {
assertType('Illuminate\Database\Eloquent\Model', $user);
}));
assertType('UserFactory', $factory->afterCreating(function ($user) {
return 'string';
}));
assertType('UserFactory', $factory->count(10));
assertType('UserFactory', $factory->connection('string'));
// assertType('User', $factory->newModel());
// assertType('User', $factory->newModel(['string' => 'string']));
assertType('Illuminate\Database\Eloquent\Model', $factory->newModel());
assertType('Illuminate\Database\Eloquent\Model', $factory->newModel(['string' => 'string']));
// assertType('class-string<User>', $factory->modelName());
assertType('class-string<Illuminate\Database\Eloquent\Model>', $factory->modelName());
Factory::guessModelNamesUsing(function (Factory $factory) {
return match (true) {
$factory instanceof UserFactory => User::class,
default => throw new LogicException('Unknown factory'),
};
});
$factory->useNamespace('string');
assertType(Factory::class, $factory::factoryForModel(User::class));
assertType('class-string<Illuminate\Database\Eloquent\Factories\Factory>', $factory->resolveFactoryName(User::class));
Factory::guessFactoryNamesUsing(function (string $modelName) {
return match ($modelName) {
User::class => UserFactory::class,
default => throw new LogicException('Unknown factory'),
};
});