2026-06-28 23:43:09 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
use App\Support\PostMediaRules;
|
|
|
|
|
|
2026-06-28 23:59:21 +00:00
|
|
|
test('hosted media rules require id and path', function () {
|
2026-06-28 23:43:09 +00:00
|
|
|
$rules = PostMediaRules::rules(hosted: true);
|
|
|
|
|
|
|
|
|
|
expect($rules['media.*.id'])->toContain('required')
|
|
|
|
|
->and($rules['media.*.path'])->toContain('required')
|
2026-06-28 23:59:21 +00:00
|
|
|
->and($rules['media.*.url'])->not->toContain('url:http,https');
|
2026-06-28 23:43:09 +00:00
|
|
|
});
|
|
|
|
|
|
2026-06-28 23:59:21 +00:00
|
|
|
test('api media rules accept a bare external url with nullable id/path', function () {
|
2026-06-28 23:43:09 +00:00
|
|
|
$rules = PostMediaRules::rules(hosted: false);
|
|
|
|
|
|
|
|
|
|
expect($rules['media.*.id'])->toContain('nullable')
|
2026-06-28 23:59:21 +00:00
|
|
|
->and($rules['media.*.path'])->toContain('nullable')
|
|
|
|
|
->and($rules['media.*.url'])->toContain('url:http,https');
|
2026-06-28 23:43:09 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('both variants keep the shared item keys so validated() preserves them', function () {
|
|
|
|
|
foreach ([true, false] as $hosted) {
|
|
|
|
|
expect(PostMediaRules::rules(hosted: $hosted))->toHaveKeys([
|
|
|
|
|
'media.*.id',
|
|
|
|
|
'media.*.path',
|
|
|
|
|
'media.*.url',
|
|
|
|
|
'media.*.type',
|
|
|
|
|
'media.*.mime_type',
|
|
|
|
|
'media.*.original_filename',
|
|
|
|
|
'media.*.size',
|
|
|
|
|
'media.*.meta',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
});
|