Only Breeze's default auth/profile tests existed - nothing covered Workouts, Sessions, Exercises, Yoga, Favorites, Blog, or the Admin panel, which is the actual product. Adds factories for the domain models and 45 new feature tests covering the main flows plus authorization boundaries (owner-only access on workouts/sessions, admin-only access on /admin, drafts hidden from the public blog). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Models\Exercise;
|
|
use App\Models\User;
|
|
use App\Models\Workout;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class FavoriteTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_guest_cannot_favorite_an_exercise(): void
|
|
{
|
|
$exercise = Exercise::factory()->create();
|
|
|
|
$response = $this->post(route('exercises.favorite', $exercise));
|
|
|
|
$response->assertRedirect(route('login'));
|
|
}
|
|
|
|
public function test_user_can_toggle_exercise_favorite(): void
|
|
{
|
|
$user = User::factory()->create();
|
|
$exercise = Exercise::factory()->create();
|
|
|
|
$this->actingAs($user)->post(route('exercises.favorite', $exercise));
|
|
$this->assertTrue($user->favoriteExercises()->where('exercise_id', $exercise->id)->exists());
|
|
|
|
$this->actingAs($user)->post(route('exercises.favorite', $exercise));
|
|
$this->assertFalse($user->favoriteExercises()->where('exercise_id', $exercise->id)->exists());
|
|
}
|
|
|
|
public function test_user_can_toggle_workout_favorite(): void
|
|
{
|
|
$user = User::factory()->create();
|
|
$workout = Workout::factory()->create();
|
|
|
|
$this->actingAs($user)->post(route('workouts.favorite', $workout));
|
|
$this->assertTrue($user->favoriteWorkouts()->where('workout_id', $workout->id)->exists());
|
|
|
|
$this->actingAs($user)->post(route('workouts.favorite', $workout));
|
|
$this->assertFalse($user->favoriteWorkouts()->where('workout_id', $workout->id)->exists());
|
|
}
|
|
}
|