Files
fitness/tests/Feature/Admin/ExerciseCrudTest.php
T

74 lines
2.1 KiB
PHP
Raw Normal View History

<?php
namespace Tests\Feature\Admin;
use App\Models\Exercise;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class ExerciseCrudTest extends TestCase
{
use RefreshDatabase;
protected function admin(): User
{
$admin = User::factory()->create();
$admin->is_admin = true;
$admin->save();
return $admin;
}
public function test_regular_user_cannot_access_exercise_admin(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)->get(route('admin.exercises.index'));
$response->assertForbidden();
}
public function test_admin_can_create_an_exercise(): void
{
$response = $this->actingAs($this->admin())->post(route('admin.exercises.store'), [
'name' => 'Barbell Deadlift',
'gif_url' => 'https://example.com/deadlift.gif',
'instructions' => 'Lift the bar.',
]);
$response->assertRedirect(route('admin.exercises.index'));
$this->assertDatabaseHas('exercises', [
'name' => 'Barbell Deadlift',
'slug' => 'barbell-deadlift',
]);
}
public function test_admin_can_update_an_exercise(): void
{
$exercise = Exercise::factory()->create(['name' => 'Old Name']);
$response = $this->actingAs($this->admin())->patch(route('admin.exercises.update', $exercise), [
'name' => 'New Name',
'gif_url' => $exercise->gif_url,
'instructions' => $exercise->instructions,
]);
$response->assertRedirect(route('admin.exercises.index'));
$this->assertDatabaseHas('exercises', [
'id' => $exercise->id,
'name' => 'New Name',
]);
}
public function test_admin_can_delete_an_exercise(): void
{
$exercise = Exercise::factory()->create();
$response = $this->actingAs($this->admin())->delete(route('admin.exercises.destroy', $exercise));
$response->assertRedirect(route('admin.exercises.index'));
$this->assertDatabaseMissing('exercises', ['id' => $exercise->id]);
}
}