74 lines
2.1 KiB
PHP
74 lines
2.1 KiB
PHP
<?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]);
|
||
|
|
}
|
||
|
|
}
|