Send new artwork uploads through a trust-based review policy.
Require review for untrusted accounts, add admin artwork review APIs, and keep queued or auto-trusted publishes from counting as established history.
This commit is contained in:
@@ -76,13 +76,41 @@ it('admin sees pending uploads', function () {
|
||||
$owner = User::factory()->create();
|
||||
$categoryId = createModerationCategory();
|
||||
|
||||
createModerationDraft($owner->id, $categoryId, ['title' => 'First Pending']);
|
||||
createModerationDraft($owner->id, $categoryId, [
|
||||
'title' => 'First Pending',
|
||||
'description' => 'A spring garden scene.',
|
||||
'tags' => json_encode(['tulip', 'garden']),
|
||||
]);
|
||||
createModerationDraft($owner->id, $categoryId, ['title' => 'Second Pending']);
|
||||
|
||||
$response = $this->actingAs($admin)->getJson('/api/admin/uploads/pending');
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertJsonCount(2, 'data');
|
||||
$response->assertJsonPath('data.0.title', 'First Pending');
|
||||
$response->assertJsonPath('data.0.description', 'A spring garden scene.');
|
||||
$response->assertJsonPath('data.0.tags.0', 'tulip');
|
||||
expect($response->json('data.0.preview_url'))->toContain('/api/admin/uploads/');
|
||||
});
|
||||
|
||||
it('streams a signed preview for a pending upload', function () {
|
||||
Storage::fake('local');
|
||||
|
||||
$admin = User::factory()->create(['role' => 'admin']);
|
||||
$owner = User::factory()->create();
|
||||
$categoryId = createModerationCategory();
|
||||
$uploadId = createModerationDraft($owner->id, $categoryId);
|
||||
Storage::disk('local')->put("tmp/drafts/{$uploadId}/preview.webp", 'preview-bytes');
|
||||
|
||||
$pending = $this->actingAs($admin)->getJson('/api/admin/uploads/pending');
|
||||
$pending->assertOk();
|
||||
$previewUrl = (string) $pending->json('data.0.preview_url');
|
||||
|
||||
$response = $this->actingAs($admin)->get($previewUrl);
|
||||
|
||||
$response->assertOk();
|
||||
expect($response->headers->get('content-type'))->toStartWith('image/webp');
|
||||
expect($response->streamedContent())->toBe('preview-bytes');
|
||||
});
|
||||
|
||||
it('non-admin is denied moderation API access', function () {
|
||||
|
||||
Reference in New Issue
Block a user