Laravels test suite has an assertion called
$this->assertSoftDeleted()
But is there the inverse? To assert that something is not soft deleted?
I've tried assertDatabaseHas
but doesn't work.
I have done it this way $this->assertTrue(! $goal->fresh()->trashed());
Works perfect.
But is there another, better, more ---elegant--- and laravel's way?
Something not being soft deleted just means that the deleted_at
column is null. You could use the assertDatabaseHas
method where that column is empty:
$this->assertDatabaseHas('goals', [
'id' => $goal->id,
'deleted_at' => null
]);
If you wanted to make this a bit more dynamic, you could extend your base TestCase
class with a custom method that will do this for you and allow you to keep your tests with a readable assertion name, and additionally do things for you like find the appropriate table/column names automatically:
public function assertModelNotSoftDeleted(Model $model)
{
return $this->assertDatabaseHas($model->getTable(), [
$model->getKeyName() => $model->getKey(),
$model::DELETED_AT => null,
]);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With