From 13406b944eedd25ce4f370f46c0f16d1e305ac26 Mon Sep 17 00:00:00 2001 From: Ricardo Mosselman Date: Wed, 26 Aug 2026 14:14:20 +0200 Subject: [PATCH 1/2] Fix: fully-qualify \Closure in docblock type hints for correct reflection-copy resolution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fully qualify the type inline as `\Closure` in all three docblocks. Because the qualification lives in the docblock text itself, it survives being copied verbatim into any consumer's generated actor class — resolving correctly regardless of that file's namespace or its own imports. --- src/Codeception/Module/Laravel/InteractsWithContainer.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Codeception/Module/Laravel/InteractsWithContainer.php b/src/Codeception/Module/Laravel/InteractsWithContainer.php index 8bbec1e..39a8e6b 100644 --- a/src/Codeception/Module/Laravel/InteractsWithContainer.php +++ b/src/Codeception/Module/Laravel/InteractsWithContainer.php @@ -84,7 +84,7 @@ public function haveApplicationHandler(callable $handler): void * ``` * * @param string $abstract - * @param Closure|string|null $concrete + * @param \Closure|string|null $concrete * @param bool $shared */ public function haveBinding(string $abstract, $concrete = null, bool $shared = false): void @@ -108,7 +108,7 @@ public function haveBinding(string $abstract, $concrete = null, bool $shared = f * * @param string $concrete * @param string $abstract - * @param Closure|string $implementation + * @param \Closure|string $implementation */ public function haveContextualBinding(string $concrete, string $abstract, $implementation): void { @@ -139,7 +139,7 @@ public function haveInstance(string $abstract, object $instance): void * ``` * * @param string $abstract - * @param Closure|string|null $concrete + * @param \Closure|string|null $concrete */ public function haveSingleton(string $abstract, $concrete): void { From 14bebbf1c86a7c643fa3d5bc4db95b3adb4f440b Mon Sep 17 00:00:00 2001 From: Ricardo Mosselman Date: Tue, 6 Oct 2026 09:24:32 +0200 Subject: [PATCH 2/2] Fix: fully-qualify Eloquent, RuntimeException and Authenticatable types in public docblocks Docblocks of public module methods are copied verbatim into consumers' generated actor classes, where aliased or unqualified imports (EloquentModel, EloquentCollection, RuntimeException, Authenticatable) do not resolve. Fully qualify them inline, and drop the now-unused EloquentCollection import. --- .../Module/Laravel/InteractsWithAuthentication.php | 2 +- .../Module/Laravel/InteractsWithEloquent.php | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Codeception/Module/Laravel/InteractsWithAuthentication.php b/src/Codeception/Module/Laravel/InteractsWithAuthentication.php index 70c965e..7ec8fb9 100644 --- a/src/Codeception/Module/Laravel/InteractsWithAuthentication.php +++ b/src/Codeception/Module/Laravel/InteractsWithAuthentication.php @@ -44,7 +44,7 @@ public function amActingAs(Authenticatable $user, ?string $guardName = null): vo * * // can be verified with $I->seeAuthentication(); * ``` - * @param Authenticatable|array $user + * @param \Illuminate\Contracts\Auth\Authenticatable|array $user * @param string|null $guardName */ public function amLoggedAs($user, ?string $guardName = null): void diff --git a/src/Codeception/Module/Laravel/InteractsWithEloquent.php b/src/Codeception/Module/Laravel/InteractsWithEloquent.php index b873760..1f4e304 100644 --- a/src/Codeception/Module/Laravel/InteractsWithEloquent.php +++ b/src/Codeception/Module/Laravel/InteractsWithEloquent.php @@ -6,7 +6,6 @@ use Illuminate\Database\ConnectionResolverInterface as Db; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; -use Illuminate\Database\Eloquent\Collection as EloquentCollection; use Illuminate\Database\Eloquent\Factories\Factory as EloquentFactory; use Illuminate\Database\Eloquent\FactoryBuilder; use Illuminate\Database\Eloquent\Model as EloquentModel; @@ -82,7 +81,7 @@ public function grabNumRecords(string $table, array $attributes = []): int * * @param string $table * @param array $attributes - * @return array|EloquentModel + * @return array|\Illuminate\Database\Eloquent\Model * @part orm */ public function grabRecord($table, $attributes = []) @@ -145,7 +144,7 @@ public function have(string $model, array $attributes = [], string $name = 'defa * * @see https://laravel.com/docs/7.x/database-testing#using-factories * - * @return EloquentModel|EloquentCollection + * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection * @part orm */ public function haveMultiple(string $model, int $times, array $attributes = [], string $name = 'default') @@ -170,8 +169,8 @@ public function haveMultiple(string $model, int $times, array $attributes = [], * * @param string $table * @param array $attributes - * @return EloquentModel|int - * @throws RuntimeException + * @return \Illuminate\Database\Eloquent\Model|int + * @throws \RuntimeException * @part orm */ public function haveRecord($table, $attributes = []) @@ -208,7 +207,7 @@ public function haveRecord($table, $attributes = []) * * @see https://laravel.com/docs/7.x/database-testing#using-factories * - * @return EloquentCollection|EloquentModel + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model * @part orm */ public function make(string $model, array $attributes = [], string $name = 'default') @@ -232,7 +231,7 @@ public function make(string $model, array $attributes = [], string $name = 'defa * * @see https://laravel.com/docs/7.x/database-testing#using-factories * - * @return EloquentCollection|EloquentModel + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model * @part orm */ public function makeMultiple(string $model, int $times, array $attributes = [], string $name = 'default')