Files
ticcat/tests/Feature/ToDoTest.php
2024-02-10 14:59:46 +01:00

109 lines
2.6 KiB
PHP

<?php
use App\Models\ToDo;
use App\Models\User;
use Laravel\Sanctum\Sanctum;
beforeEach(function () {
$this->user = User::factory()->create();
});
test('an user can add todo', function () {
Sanctum::actingAs($this->user);
$response = $this->post('api/todos', [
'name' => 'Test',
]);
$response->assertStatus(201)
->assertJson([
'user_id' => $this->user->id,
'name' => 'Test',
'checked' => false,
]);
expect($this->user->toDos)
->toHaveCount(1)
->first()->name->toBe('Test')
->first()->checked->toBeNull();
});
test('an user can retrieve his to dos', function () {
Sanctum::actingAs($this->user);
ToDo::factory()->count(10)->create([
'user_id' => $this->user->id,
'checked' => false,
]);
$response = $this->get('api/todos');
$toDos = $this->user->toDos->map(fn ($toDo) => [
'id' => $toDo->id,
'user_id' => $toDo->user_id,
'name' => $toDo->name,
'checked' => false,
])->toArray();
$response->assertOk()
->assertJson($toDos);
});
test('an user can retrieve a to do', function () {
Sanctum::actingAs($this->user);
$toDos = ToDo::factory()->count(10)->create([
'user_id' => $this->user->id,
'checked' => false,
]);
$toDo = $toDos[rand(0, 9)];
$response = $this->get('api/todos/'.$toDo->id);
$response->assertOk()
->assertJson([
'id' => $toDo->id,
'user_id' => $toDo->user_id,
'name' => $toDo->name,
'checked' => false,
]);
});
test('an user can update a to do', function () {
Sanctum::actingAs($this->user);
$toDos = ToDo::factory()->count(10)->create([
'user_id' => $this->user->id,
'checked' => false,
]);
$toDo = $toDos[rand(0, 9)];
$response = $this->put('api/todos/'.$toDo->id, ['name' => 'update test']);
$response->assertOk()
->assertJson([
'id' => $toDo->id,
'user_id' => $toDo->user_id,
'name' => 'update test',
'checked' => false,
]);
expect(ToDo::find($toDo->id))
->name->toBe('update test');
});
test('an user can delete a to do', function () {
Sanctum::actingAs($this->user);
$toDos = ToDo::factory()->count(10)->create([
'user_id' => $this->user->id,
'checked' => false,
]);
$toDo = $toDos[rand(0, 9)];
$response = $this->delete('api/todos/'.$toDo->id);
$response->assertNoContent();
expect(ToDo::all())->toHaveCount(9);
});