Validate per-image media alt_text (max 2000) in PostMediaRules
This commit is contained in:
parent
603ac84b5f
commit
521cfca724
2 changed files with 56 additions and 0 deletions
|
|
@ -35,6 +35,7 @@ public static function rules(bool $hosted): array
|
|||
'media.*.original_filename' => ['sometimes', 'nullable', 'string', 'max:500'],
|
||||
'media.*.size' => ['sometimes', 'nullable', 'integer'],
|
||||
'media.*.meta' => ['sometimes', 'nullable', 'array'],
|
||||
'media.*.meta.alt_text' => ['sometimes', 'nullable', 'string', 'max:2000'],
|
||||
'media.*.source' => ['sometimes', 'nullable', 'string', Rule::in(array_column(Source::cases(), 'value'))],
|
||||
'media.*.source_meta' => ['sometimes', 'nullable', 'array'],
|
||||
];
|
||||
|
|
|
|||
55
tests/Feature/PostMediaAltTextValidationTest.php
Normal file
55
tests/Feature/PostMediaAltTextValidationTest.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Enums\UserWorkspace\Role;
|
||||
use App\Models\Post;
|
||||
use App\Models\User;
|
||||
use App\Models\Workspace;
|
||||
|
||||
test('post update keeps media alt_text in meta', function () {
|
||||
$user = User::factory()->create();
|
||||
$workspace = Workspace::factory()->create(['user_id' => $user->id]);
|
||||
$workspace->members()->attach($user->id, ['role' => Role::Member->value]);
|
||||
$user->update(['current_workspace_id' => $workspace->id]);
|
||||
|
||||
$post = Post::factory()->create([
|
||||
'workspace_id' => $workspace->id,
|
||||
'user_id' => $user->id,
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($user)->put(route('app.posts.update', $post), [
|
||||
'status' => 'draft',
|
||||
'content' => 'hi',
|
||||
'media' => [[
|
||||
'id' => 'm1', 'path' => 'uploads/x.jpg', 'url' => 'https://cdn.test/x.jpg',
|
||||
'meta' => ['alt_text' => 'a golden retriever on a beach'],
|
||||
]],
|
||||
]);
|
||||
|
||||
$response->assertSessionDoesntHaveErrors();
|
||||
expect($post->fresh()->media[0]['meta']['alt_text'])->toBe('a golden retriever on a beach');
|
||||
});
|
||||
|
||||
test('media alt_text over 2000 chars is rejected', function () {
|
||||
$user = User::factory()->create();
|
||||
$workspace = Workspace::factory()->create(['user_id' => $user->id]);
|
||||
$workspace->members()->attach($user->id, ['role' => Role::Member->value]);
|
||||
$user->update(['current_workspace_id' => $workspace->id]);
|
||||
|
||||
$post = Post::factory()->create([
|
||||
'workspace_id' => $workspace->id,
|
||||
'user_id' => $user->id,
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($user)->put(route('app.posts.update', $post), [
|
||||
'status' => 'draft',
|
||||
'content' => 'hi',
|
||||
'media' => [[
|
||||
'id' => 'm1', 'path' => 'uploads/x.jpg', 'url' => 'https://cdn.test/x.jpg',
|
||||
'meta' => ['alt_text' => str_repeat('a', 2001)],
|
||||
]],
|
||||
]);
|
||||
|
||||
$response->assertSessionHasErrors('media.0.meta.alt_text');
|
||||
});
|
||||
Loading…
Reference in a new issue