teknolis / tests /Feature /SocialMediaStudioServiceTest.php
OpenAI Codex
Fix storage symlink and adapt cron status for Spaces
1501522
Raw
History Blame Contribute Delete
4.36 kB
<?php
namespace Tests\Feature;
use App\Services\FreepikAssetRemixService;
use App\Services\FreepikImageService;
use App\Services\FreepikVideoService;
use App\Services\MotionVideoService;
use App\Services\OpenAiImageService;
use App\Services\PollinationsImageService;
use App\Services\PosterImageService;
use App\Services\SocialMediaStudioService;
use App\Services\StoryImageNormalizerService;
use Mockery;
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
use Tests\TestCase;
class SocialMediaStudioServiceTest extends TestCase
{
use MockeryPHPUnitIntegration;
public function test_remix_from_asset_returns_normalized_image_payload(): void
{
$freepikRemix = Mockery::mock(FreepikAssetRemixService::class);
$storyNormalizer = Mockery::mock(StoryImageNormalizerService::class);
$freepikRemix->shouldReceive('remixImage')
->once()
->with([
'type' => 'image',
'url' => '/storage/social_assets/images/source.jpg',
'thumbnail_url' => '/storage/social_assets/images/source.jpg',
], 'Ubah jadi visual premium', 'restyle')
->andReturn([
'provider' => 'freepik-seedream-v45-edit',
'urls' => ['https://cdn.example.com/remix-image.jpg'],
]);
$storyNormalizer->shouldReceive('normalizeMany')
->once()
->with(['https://cdn.example.com/remix-image.jpg'])
->andReturn([[
'url' => '/storage/images/remix.jpg',
'thumbnail_url' => '/storage/images/remix-thumb.jpg',
'width' => 1080,
'height' => 1920,
]]);
$service = new SocialMediaStudioService(
Mockery::mock(FreepikImageService::class),
Mockery::mock(FreepikVideoService::class),
$freepikRemix,
Mockery::mock(OpenAiImageService::class),
Mockery::mock(PollinationsImageService::class),
Mockery::mock(PosterImageService::class),
$storyNormalizer,
Mockery::mock(MotionVideoService::class),
);
$result = $service->remixFromAsset([
'type' => 'image',
'url' => '/storage/social_assets/images/source.jpg',
'thumbnail_url' => '/storage/social_assets/images/source.jpg',
], 'Ubah jadi visual premium', 'restyle', 'image');
$this->assertSame('/storage/images/remix.jpg', $result['url']);
$this->assertSame('freepik-seedream-v45-edit', $result['provider']);
$this->assertSame('9:16', $result['aspect']);
}
public function test_remix_from_asset_returns_video_payload_for_story_output(): void
{
$freepikRemix = Mockery::mock(FreepikAssetRemixService::class);
$freepikRemix->shouldReceive('remixVideo')
->once()
->with([
'type' => 'video',
'url' => '/storage/social_assets/videos/source.mp4',
'thumbnail_url' => '/storage/social_assets/images/source-thumb.jpg',
], 'Bikin jadi video promo vertikal', 'mockup')
->andReturn([
'url' => '/storage/videos/remix.mp4',
'provider' => 'freepik-runway-i2v',
'duration_seconds' => 5,
]);
$service = new SocialMediaStudioService(
Mockery::mock(FreepikImageService::class),
Mockery::mock(FreepikVideoService::class),
$freepikRemix,
Mockery::mock(OpenAiImageService::class),
Mockery::mock(PollinationsImageService::class),
Mockery::mock(PosterImageService::class),
Mockery::mock(StoryImageNormalizerService::class),
Mockery::mock(MotionVideoService::class),
);
$result = $service->remixFromAsset([
'type' => 'video',
'url' => '/storage/social_assets/videos/source.mp4',
'thumbnail_url' => '/storage/social_assets/images/source-thumb.jpg',
], 'Bikin jadi video promo vertikal', 'mockup', 'video');
$this->assertSame('/storage/videos/remix.mp4', $result['url']);
$this->assertSame('freepik-runway-i2v', $result['provider']);
$this->assertSame('/storage/social_assets/images/source-thumb.jpg', $result['source_image_url']);
}
}