fix(linkedin): cap image count at 10 to match platform standard

LinkedIn was the only multi-image platform allowing 20 images; align
maxMediaCount/maxImages/maxFiles to 10, consistent with Facebook,
Instagram and Threads. The AI generation cap (MAX_GENERATED_IMAGES)
was already 10 and is unaffected.
This commit is contained in:
Paulo Castellano 2026-06-25 11:45:11 -03:00
parent 65f66c8225
commit 10b8579079
5 changed files with 8 additions and 8 deletions

View file

@ -162,7 +162,7 @@ public function maxMediaCount(): int
return match ($this) {
self::InstagramFeed => 10,
self::InstagramReel, self::InstagramStory => 1,
self::LinkedInPost, self::LinkedInPagePost => 20,
self::LinkedInPost, self::LinkedInPagePost => 10,
self::FacebookPost => 10,
self::FacebookReel, self::FacebookStory => 1,
self::TikTokVideo => 1,

View file

@ -112,7 +112,7 @@ public function allowedMediaTypes(): array
public function maxImages(): int
{
return match ($this) {
self::LinkedIn, self::LinkedInPage => 20,
self::LinkedIn, self::LinkedInPage => 10,
self::X => 4,
self::TikTok => 0,
self::YouTube => 0,

View file

@ -62,14 +62,14 @@ const CONTENT_TYPE_RULES: Record<string, MediaRules> = {
// LinkedIn — one type per account kind; the publish format (single image,
// multi-image, video, or PDF document) is inferred from the attached media.
// Images (up to 20) XOR one video XOR one PDF, never mixed.
// Images (up to 10) XOR one video XOR one PDF, never mixed.
linkedin_post: {
maxFiles: 20, acceptImages: true, acceptVideos: true, acceptDocuments: true,
maxFiles: 10, acceptImages: true, acceptVideos: true, acceptDocuments: true,
requiresMedia: false, acceptsGif: false, forbidsMixedMedia: true,
maxImageBytes: 5 * MB, maxVideoBytes: 5 * GB, maxVideoDurationSec: 10 * 60, maxDocumentBytes: 100 * MB,
},
linkedin_page_post: {
maxFiles: 20, acceptImages: true, acceptVideos: true, acceptDocuments: true,
maxFiles: 10, acceptImages: true, acceptVideos: true, acceptDocuments: true,
requiresMedia: false, acceptsGif: false, forbidsMixedMedia: true,
maxImageBytes: 5 * MB, maxVideoBytes: 5 * GB, maxVideoDurationSec: 10 * 60, maxDocumentBytes: 100 * MB,
},

View file

@ -59,7 +59,7 @@
test('content type has correct max media count', function () {
expect(ContentType::InstagramFeed->maxMediaCount())->toBe(10);
expect(ContentType::InstagramReel->maxMediaCount())->toBe(1);
expect(ContentType::LinkedInPost->maxMediaCount())->toBe(20);
expect(ContentType::LinkedInPost->maxMediaCount())->toBe(10);
expect(ContentType::XPost->maxMediaCount())->toBe(4);
expect(ContentType::PinterestCarousel->maxMediaCount())->toBe(5);
expect(ContentType::BlueskyPost->maxMediaCount())->toBe(4);
@ -157,7 +157,7 @@
expect($type->supportsDocument())->toBeTrue();
expect($type->supportsMixedMedia())->toBeFalse();
expect($type->requiresMedia())->toBeFalse();
expect($type->maxMediaCount())->toBe(20);
expect($type->maxMediaCount())->toBe(10);
}
});

View file

@ -45,7 +45,7 @@
});
test('platform has correct max images', function () {
expect(Platform::LinkedIn->maxImages())->toBe(20);
expect(Platform::LinkedIn->maxImages())->toBe(10);
expect(Platform::X->maxImages())->toBe(4);
expect(Platform::TikTok->maxImages())->toBe(0);
expect(Platform::YouTube->maxImages())->toBe(0);