Add live show moderation queue

This commit is contained in:
Codex Agent
2026-01-05 14:04:05 +01:00
parent 7802bed394
commit e3b7271f69
16 changed files with 829 additions and 8 deletions

View File

@@ -0,0 +1,105 @@
<?php
namespace Tests\Feature;
use App\Enums\PhotoLiveStatus;
use App\Models\Event;
use App\Models\Photo;
use Tests\Feature\Tenant\TenantTestCase;
class LiveShowPhotoControllerTest extends TenantTestCase
{
public function test_live_show_queue_defaults_to_pending(): void
{
$event = Event::factory()->for($this->tenant)->create([
'slug' => 'live-show-queue',
]);
$pending = Photo::factory()->for($event)->create([
'status' => 'approved',
'live_status' => PhotoLiveStatus::PENDING,
]);
Photo::factory()->for($event)->create([
'status' => 'approved',
'live_status' => PhotoLiveStatus::APPROVED,
'live_approved_at' => now(),
]);
$response = $this->authenticatedRequest('GET', "/api/v1/tenant/events/{$event->slug}/live-show/photos");
$response->assertOk();
$response->assertJsonCount(1, 'data');
$response->assertJsonPath('data.0.id', $pending->id);
$response->assertJsonPath('data.0.live_status', PhotoLiveStatus::PENDING->value);
}
public function test_live_show_approve_requires_gallery_approval(): void
{
$event = Event::factory()->for($this->tenant)->create([
'slug' => 'live-show-approve-guard',
]);
$photo = Photo::factory()->for($event)->create([
'status' => 'pending',
'live_status' => PhotoLiveStatus::PENDING,
]);
$response = $this->authenticatedRequest(
'POST',
"/api/v1/tenant/events/{$event->slug}/live-show/photos/{$photo->id}/approve"
);
$response->assertStatus(422);
$response->assertJsonPath('error.code', 'photo_not_approved');
}
public function test_live_show_approve_reject_and_clear_workflow(): void
{
$event = Event::factory()->for($this->tenant)->create([
'slug' => 'live-show-workflow',
]);
$photo = Photo::factory()->for($event)->create([
'status' => 'approved',
'live_status' => PhotoLiveStatus::PENDING,
]);
$approve = $this->authenticatedRequest(
'POST',
"/api/v1/tenant/events/{$event->slug}/live-show/photos/{$photo->id}/approve",
['priority' => 12]
);
$approve->assertOk();
$this->assertDatabaseHas('photos', [
'id' => $photo->id,
'live_status' => PhotoLiveStatus::APPROVED->value,
'live_priority' => 12,
]);
$reject = $this->authenticatedRequest(
'POST',
"/api/v1/tenant/events/{$event->slug}/live-show/photos/{$photo->id}/reject",
['reason' => 'policy']
);
$reject->assertOk();
$this->assertDatabaseHas('photos', [
'id' => $photo->id,
'live_status' => PhotoLiveStatus::REJECTED->value,
'live_rejection_reason' => 'policy',
]);
$clear = $this->authenticatedRequest(
'POST',
"/api/v1/tenant/events/{$event->slug}/live-show/photos/{$photo->id}/clear"
);
$clear->assertOk();
$this->assertDatabaseHas('photos', [
'id' => $photo->id,
'live_status' => PhotoLiveStatus::NONE->value,
]);
}
}