2020-06-07 20:43:04 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Tests\Unit\Services;
|
|
|
|
|
|
|
|
use App\Exceptions\MediaPathNotSetException;
|
|
|
|
use App\Exceptions\SongUploadFailedException;
|
|
|
|
use App\Models\Setting;
|
|
|
|
use App\Models\Song;
|
|
|
|
use App\Services\FileSynchronizer;
|
|
|
|
use App\Services\UploadService;
|
|
|
|
use Illuminate\Http\UploadedFile;
|
|
|
|
use Mockery;
|
|
|
|
use Mockery\MockInterface;
|
|
|
|
use Tests\TestCase;
|
|
|
|
|
|
|
|
class UploadServiceTest extends TestCase
|
|
|
|
{
|
|
|
|
private $fileSynchronizer;
|
|
|
|
private $uploadService;
|
|
|
|
|
|
|
|
public function setUp(): void
|
|
|
|
{
|
|
|
|
parent::setUp();
|
2020-12-22 20:11:22 +00:00
|
|
|
|
2020-06-07 20:43:04 +00:00
|
|
|
$this->fileSynchronizer = Mockery::mock(FileSynchronizer::class);
|
|
|
|
$this->uploadService = new UploadService($this->fileSynchronizer);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testHandleUploadedFileWithMediaPathNotSet(): void
|
|
|
|
{
|
|
|
|
Setting::set('media_path', null);
|
|
|
|
self::expectException(MediaPathNotSetException::class);
|
|
|
|
$this->uploadService->handleUploadedFile(Mockery::mock(UploadedFile::class));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testHandleUploadedFileFails(): void
|
|
|
|
{
|
|
|
|
Setting::set('media_path', '/media/koel');
|
|
|
|
|
|
|
|
/** @var UploadedFile|MockInterface $file */
|
|
|
|
$file = Mockery::mock(UploadedFile::class);
|
|
|
|
|
|
|
|
$file->shouldReceive('getClientOriginalName')
|
|
|
|
->andReturn('foo.mp3');
|
|
|
|
|
|
|
|
$file->shouldReceive('move')
|
|
|
|
->once()
|
|
|
|
->with('/media/koel/__KOEL_UPLOADS__/', 'foo.mp3');
|
|
|
|
|
|
|
|
$this->fileSynchronizer
|
|
|
|
->shouldReceive('setFile')
|
|
|
|
->once()
|
|
|
|
->with('/media/koel/__KOEL_UPLOADS__/foo.mp3');
|
|
|
|
|
|
|
|
$this->fileSynchronizer
|
|
|
|
->shouldReceive('sync')
|
|
|
|
->once()
|
2022-07-05 13:47:26 +00:00
|
|
|
->with()
|
2020-06-07 20:43:04 +00:00
|
|
|
->andReturn(FileSynchronizer::SYNC_RESULT_BAD_FILE);
|
|
|
|
|
|
|
|
$this->fileSynchronizer
|
|
|
|
->shouldReceive('getSyncError')
|
|
|
|
->once()
|
|
|
|
->andReturn('A monkey ate your file oh no');
|
|
|
|
|
|
|
|
self::expectException(SongUploadFailedException::class);
|
|
|
|
self::expectExceptionMessage('A monkey ate your file oh no');
|
|
|
|
$this->uploadService->handleUploadedFile($file);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testHandleUploadedFile(): void
|
|
|
|
{
|
|
|
|
Setting::set('media_path', '/media/koel');
|
|
|
|
|
|
|
|
/** @var UploadedFile|MockInterface $file */
|
|
|
|
$file = Mockery::mock(UploadedFile::class);
|
|
|
|
|
|
|
|
$file->shouldReceive('getClientOriginalName')
|
|
|
|
->andReturn('foo.mp3');
|
|
|
|
|
|
|
|
$file->shouldReceive('move')
|
|
|
|
->once()
|
|
|
|
->with('/media/koel/__KOEL_UPLOADS__/', 'foo.mp3');
|
|
|
|
|
|
|
|
$this->fileSynchronizer
|
|
|
|
->shouldReceive('setFile')
|
|
|
|
->once()
|
|
|
|
->with('/media/koel/__KOEL_UPLOADS__/foo.mp3');
|
|
|
|
|
|
|
|
$this->fileSynchronizer
|
|
|
|
->shouldReceive('sync')
|
|
|
|
->once()
|
2022-07-05 13:47:26 +00:00
|
|
|
->with()
|
2020-06-07 20:43:04 +00:00
|
|
|
->andReturn(FileSynchronizer::SYNC_RESULT_SUCCESS);
|
|
|
|
|
|
|
|
$song = new Song();
|
|
|
|
|
|
|
|
$this->fileSynchronizer
|
|
|
|
->shouldReceive('getSong')
|
|
|
|
->once()
|
|
|
|
->andReturn($song);
|
|
|
|
|
|
|
|
self::assertSame($song, $this->uploadService->handleUploadedFile($file));
|
|
|
|
}
|
|
|
|
}
|