Skip to content

Commit 2420585

Browse files
fix: wrap model instantiation in expect closure for exception tests
The exception is thrown during model initialization (when using the trait), not during the create() call. This fix wraps the entire model class creation inside the expect closure so the exception can be properly caught. Co-authored-by: Vladislav Stoitsov <[email protected]>
1 parent f43a46a commit 2420585

File tree

1 file changed

+48
-44
lines changed

1 file changed

+48
-44
lines changed

tests/HasUniqueUrlsTest.php

Lines changed: 48 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -181,30 +181,32 @@
181181
});
182182

183183
// Create a model class that uses HasUniqueUrls trait
184-
$modelClass = new class () extends \Illuminate\Database\Eloquent\Model {
185-
use \Vlados\LaravelUniqueUrls\HasUniqueUrls;
186-
187-
protected $table = 'models_with_url_column';
188-
protected $guarded = [];
189-
public $timestamps = false;
190-
191-
public function urlHandler(): array
192-
{
193-
return [
194-
'controller' => \Vlados\LaravelUniqueUrls\Tests\TestUrlHandler::class,
195-
'method' => 'view',
196-
'arguments' => [],
197-
];
198-
}
184+
// The exception should be thrown during model instantiation
185+
expect(function () {
186+
$modelClass = new class () extends \Illuminate\Database\Eloquent\Model {
187+
use \Vlados\LaravelUniqueUrls\HasUniqueUrls;
188+
189+
protected $table = 'models_with_url_column';
190+
protected $guarded = [];
191+
public $timestamps = false;
192+
193+
public function urlHandler(): array
194+
{
195+
return [
196+
'controller' => \Vlados\LaravelUniqueUrls\Tests\TestUrlHandler::class,
197+
'method' => 'view',
198+
'arguments' => [],
199+
];
200+
}
199201

200-
public function urlStrategy($language, $locale): string
201-
{
202-
return \Illuminate\Support\Str::slug($this->name);
203-
}
204-
};
202+
public function urlStrategy($language, $locale): string
203+
{
204+
return \Illuminate\Support\Str::slug($this->name);
205+
}
206+
};
205207

206-
expect(fn () => $modelClass::create(['name' => 'test', 'url' => 'test-url']))
207-
->toThrow(Exception::class, "has a conflicting column 'url'");
208+
$modelClass::create(['name' => 'test', 'url' => 'test-url']);
209+
})->toThrow(Exception::class, "has a conflicting column 'url'");
208210

209211
Schema::dropIfExists('models_with_url_column');
210212
});
@@ -218,30 +220,32 @@ public function urlStrategy($language, $locale): string
218220
});
219221

220222
// Create a model class that uses HasUniqueUrls trait
221-
$modelClass = new class () extends \Illuminate\Database\Eloquent\Model {
222-
use \Vlados\LaravelUniqueUrls\HasUniqueUrls;
223-
224-
protected $table = 'models_with_urls_column';
225-
protected $guarded = [];
226-
public $timestamps = false;
227-
228-
public function urlHandler(): array
229-
{
230-
return [
231-
'controller' => \Vlados\LaravelUniqueUrls\Tests\TestUrlHandler::class,
232-
'method' => 'view',
233-
'arguments' => [],
234-
];
235-
}
223+
// The exception should be thrown during model instantiation
224+
expect(function () {
225+
$modelClass = new class () extends \Illuminate\Database\Eloquent\Model {
226+
use \Vlados\LaravelUniqueUrls\HasUniqueUrls;
227+
228+
protected $table = 'models_with_urls_column';
229+
protected $guarded = [];
230+
public $timestamps = false;
231+
232+
public function urlHandler(): array
233+
{
234+
return [
235+
'controller' => \Vlados\LaravelUniqueUrls\Tests\TestUrlHandler::class,
236+
'method' => 'view',
237+
'arguments' => [],
238+
];
239+
}
236240

237-
public function urlStrategy($language, $locale): string
238-
{
239-
return \Illuminate\Support\Str::slug($this->name);
240-
}
241-
};
241+
public function urlStrategy($language, $locale): string
242+
{
243+
return \Illuminate\Support\Str::slug($this->name);
244+
}
245+
};
242246

243-
expect(fn () => $modelClass::create(['name' => 'test', 'urls' => 'test-urls']))
244-
->toThrow(Exception::class, "has a conflicting column 'urls'");
247+
$modelClass::create(['name' => 'test', 'urls' => 'test-urls']);
248+
})->toThrow(Exception::class, "has a conflicting column 'urls'");
245249

246250
Schema::dropIfExists('models_with_urls_column');
247251
});

0 commit comments

Comments
 (0)