diff --git a/src/Stubs/FactoryBuilder.stubphp b/src/Stubs/FactoryBuilder.stubphp new file mode 100644 index 00000000..e9db18a2 --- /dev/null +++ b/src/Stubs/FactoryBuilder.stubphp @@ -0,0 +1,56 @@ + $class + * @param string $name + * @param array $definitions + * @param array $states + * @param array $afterMaking + * @param array $afterCreating + * @param \Faker\Generator $faker + * @return void + */ + public function __construct($class, $name, array $definitions, array $states, + array $afterMaking, array $afterCreating, Faker $faker) + { + + } + + /** + * Create a collection of models and persist them to the database. + * + * @param array $attributes + * @return (TCount is 1 ? TModel : \Illuminate\Database\Eloquent\Collection) + */ + public function create(array $attributes = []) + { + + } + + /** + * Create a collection of models. + * + * @param array $attributes + * @return (TCount is 1 ? TModel : \Illuminate\Database\Eloquent\Collection) + */ + public function make(array $attributes = []) + { + + } +} diff --git a/src/Stubs/helpers.stubphp b/src/Stubs/helpers.stubphp new file mode 100644 index 00000000..0bf8b99d --- /dev/null +++ b/src/Stubs/helpers.stubphp @@ -0,0 +1,26 @@ + $modelClassName + * @param TNameOrCountOrNull $nameOrCount + * @param TCountOrNull $count + * + * @return ( + TCountOrNull is int + ? Illuminate\Database\Eloquent\FactoryBuilder + : ( + TNameOrCountOrNull is int + ? Illuminate\Database\Eloquent\FactoryBuilder + : Illuminate\Database\Eloquent\FactoryBuilder + ) + + ) + */ +function factory(string $modelClassName, $nameOrCount = null, $count = null) +{ + +} diff --git a/tests/acceptance/FactoryTypes.feature b/tests/acceptance/FactoryTypes.feature new file mode 100644 index 00000000..267b6486 --- /dev/null +++ b/tests/acceptance/FactoryTypes.feature @@ -0,0 +1,73 @@ +Feature: Factory Types + Model factories have type support + + Background: + Given I have the following config + """ + + + + + + + + + + + """ + + Scenario: + Given I have the following code + """ + + */ + public function getFactory(): \Illuminate\Database\Eloquent\FactoryBuilder + { + return factory(User::class); + } + + /** + * @return \Illuminate\Database\Eloquent\FactoryBuilder + */ + public function getFactoryForTwo(): \Illuminate\Database\Eloquent\FactoryBuilder + { + return factory(User::class, 2); + } + + public function makeUser(): User + { + return factory(User::class)->make(); + } + + public function createUser(): User + { + return factory(User::class)->create(); + } + + /** + * @return \Illuminate\Database\Eloquent\Collection + */ + public function createUsers(): \Illuminate\Database\Eloquent\Collection + { + return factory(User::class, 2)->create(); + } + + /** + * @return \Illuminate\Database\Eloquent\Collection + */ + public function createUsersWithNameAttribute(): \Illuminate\Database\Eloquent\Collection + { + return factory(User::class, 'new name', 2)->create(); + } + } + """ + When I run Psalm + Then I see no errors