mirror of
https://github.com/koel/koel
synced 2024-12-20 17:43:36 +00:00
55 lines
1.7 KiB
PHP
55 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Integration\Values;
|
|
|
|
use App\Models\Song;
|
|
use App\Values\TranscodeResult;
|
|
use Illuminate\Process\PendingProcess;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Process;
|
|
use Tests\TestCase;
|
|
|
|
use function Tests\test_path;
|
|
|
|
class TranscodeResultTest extends TestCase
|
|
{
|
|
public function testCreateAndRetrieve(): void
|
|
{
|
|
config(['koel.streaming.ffmpeg_path' => '/usr/bin/ffmpeg']);
|
|
Process::fake();
|
|
|
|
/** @var Song $song */
|
|
$song = Song::factory()->create();
|
|
|
|
$result = TranscodeResult::getForSong($song, 128, test_path('songs/full.mp3'));
|
|
|
|
$closure = static function (PendingProcess $process) use ($song): bool {
|
|
return $process->command === [
|
|
'/usr/bin/ffmpeg',
|
|
'-i',
|
|
$song->storage_metadata->getPath(),
|
|
'-vn',
|
|
'-b:a',
|
|
'128k',
|
|
'-preset',
|
|
'ultrafast',
|
|
'-y',
|
|
test_path('songs/full.mp3'),
|
|
];
|
|
};
|
|
|
|
Process::assertRanTimes($closure, 1);
|
|
|
|
self::assertSame('3c7b4e187277e40f8ae793650336e03b', $result->checksum);
|
|
self::assertSame(test_path('songs/full.mp3'), $result->path);
|
|
|
|
self::assertTrue(Cache::has("transcoded.{$song->id}.128"));
|
|
|
|
$cached = TranscodeResult::getForSong($song, 128, test_path('songs/full.mp3'));
|
|
|
|
// No extra ffmpeg process should be run.
|
|
Process::assertRanTimes($closure, 1);
|
|
self::assertSame('3c7b4e187277e40f8ae793650336e03b', $cached->checksum);
|
|
self::assertSame(test_path('songs/full.mp3'), $cached->path);
|
|
}
|
|
}
|