Laravel Shaka
Testing
Don't run Shaka Packager in tests. Fake laravel-media with Media::fake(), and let FakeShaka answer Shaka Packager:
use Foxws\Media\Facades\Media;
use Foxws\Shaka\ShakaExecutable;
use Foxws\Shaka\Testing\FakeShaka;
use Illuminate\Support\Facades\Storage;
it('packages uploads into streams', function () {
Storage::fake('media');
$fake = FakeShaka::respond(Media::fake());
PackageVideo::dispatchSync($video);
$fake->assertRan(ShakaExecutable::Packager, fn (array $arguments) => in_array('--protection_scheme=cbcs', $arguments, true));
Storage::disk('media')->assertExists("streams/{$video->id}/master.m3u8");
});
FakeShaka writes a placeholder file for every stream output and manifest, so save() uploads them to the target disk like a real run.
To test failures, make the next run fail:
$fake->failNext(ShakaExecutable::Packager, 'Packaging Error: 5 (FILE_FAILURE)');
laravel-media's other assertions work too, such as assertNotRan(), assertRanTimes() and assertSaved(). command() on the builder returns the command line without running it.
