Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel - assert not soft deleted? Inverse? - Laravel Tests

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?

like image 980
krystian2160 Avatar asked May 14 '18 10:05

krystian2160


1 Answers

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,
    ]);
}
like image 148
Liam Hammett Avatar answered Nov 12 '22 21:11

Liam Hammett