Files
alrahma_sunday_school_api/tests/Feature/Api/V1/Public/PublicWinnersControllerTest.php
T
2026-06-08 22:06:30 -04:00

83 lines
2.7 KiB
PHP

<?php
namespace Tests\Feature\Api\V1\Public;
use App\Models\Competition;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class PublicWinnersControllerTest extends TestCase
{
use RefreshDatabase;
public function test_competition_index_is_public_and_returns_published_competitions(): void
{
Competition::query()->create([
'title' => 'Published Quiz Bowl',
'school_year' => '2025-2026',
'is_published' => 1,
'published_at' => now(),
]);
Competition::query()->create([
'title' => 'Hidden Draft',
'school_year' => '2025-2026',
'is_published' => 0,
]);
$response = $this->getJson('/api/winners/competitions');
$response->assertOk()
->assertJsonPath('status', true)
->assertJsonStructure(['status', 'data' => ['competitions']]);
$titles = array_column($response->json('data.competitions'), 'title');
$this->assertContains('Published Quiz Bowl', $titles);
$this->assertNotContains('Hidden Draft', $titles);
}
public function test_competition_index_returns_empty_collection_when_none_published(): void
{
$this->getJson('/api/winners/competitions')
->assertOk()
->assertJsonPath('status', true)
->assertJsonPath('data.competitions', []);
}
public function test_competition_show_returns_payload_for_published_competition(): void
{
$competition = Competition::query()->create([
'title' => 'Spelling Bee',
'school_year' => '2025-2026',
'is_published' => 1,
'published_at' => now(),
]);
$this->getJson('/api/winners/competitions/' . $competition->id)
->assertOk()
->assertJsonPath('status', true)
->assertJsonPath('data.competition.id', $competition->id)
->assertJsonStructure(['data' => ['competition', 'winners_by_class', 'section_map', 'question_counts']]);
}
public function test_competition_show_returns_404_for_unknown_competition(): void
{
$this->getJson('/api/winners/competitions/999999')
->assertNotFound()
->assertJsonPath('status', false);
}
public function test_competition_show_returns_404_for_unpublished_competition(): void
{
$competition = Competition::query()->create([
'title' => 'Unpublished',
'school_year' => '2025-2026',
'is_published' => 0,
]);
$this->getJson('/api/winners/competitions/' . $competition->id)
->assertNotFound()
->assertJsonPath('status', false);
}
}