mirror of
https://github.com/koel/koel
synced 2024-12-19 00:53:05 +00:00
110 lines
3.5 KiB
PHP
110 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Integration\Services;
|
|
|
|
use App\Services\FileScanner;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Str;
|
|
use Tests\TestCase;
|
|
|
|
class FileScannerTest extends TestCase
|
|
{
|
|
private FileScanner $scanner;
|
|
|
|
public function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->scanner = app(FileScanner::class);
|
|
}
|
|
|
|
public function testGetFileInfo(): void
|
|
{
|
|
$info = $this->scanner->setFile(__DIR__ . '/../../songs/full.mp3')->getFileScanInformation();
|
|
|
|
$expectedData = [
|
|
'artist' => 'Koel',
|
|
'album' => 'Koel Testing Vol. 1',
|
|
'title' => 'Amet',
|
|
'track' => 5,
|
|
'disc' => 3,
|
|
'lyrics' => "Foo\rbar",
|
|
'cover' => [
|
|
'data' => File::get(__DIR__ . '/../../blobs/cover.png'),
|
|
'image_mime' => 'image/png',
|
|
'image_width' => 512,
|
|
'image_height' => 512,
|
|
'imagetype' => 'PNG',
|
|
'picturetype' => 'Other',
|
|
'description' => '',
|
|
'datalength' => 7627,
|
|
],
|
|
'path' => realpath(__DIR__ . '/../../songs/full.mp3'),
|
|
'mtime' => filemtime(__DIR__ . '/../../songs/full.mp3'),
|
|
'albumartist' => '',
|
|
];
|
|
|
|
self::assertArraySubset($expectedData, $info->toArray());
|
|
self::assertEqualsWithDelta(10, $info->length, 0.1);
|
|
}
|
|
|
|
public function testGetFileInfoVorbisCommentsFlac(): void
|
|
{
|
|
$flacPath = __DIR__ . '/../../songs/full-vorbis-comments.flac';
|
|
$info = $this->scanner->setFile($flacPath)->getFileScanInformation();
|
|
|
|
$expectedData = [
|
|
'artist' => 'Koel',
|
|
'album' => 'Koel Testing Vol. 1',
|
|
'albumartist' => 'Koel',
|
|
'title' => 'Amet',
|
|
'track' => 5,
|
|
'disc' => 3,
|
|
'lyrics' => "Foo\r\nbar",
|
|
'cover' => [
|
|
'data' => File::get(__DIR__ . '/../../blobs/cover.png'),
|
|
'image_mime' => 'image/png',
|
|
'image_width' => 512,
|
|
'image_height' => 512,
|
|
'picturetype' => 'Other',
|
|
'datalength' => 7627,
|
|
],
|
|
'path' => realpath($flacPath),
|
|
'mtime' => filemtime($flacPath),
|
|
];
|
|
|
|
self::assertArraySubset($expectedData, $info->toArray());
|
|
self::assertEqualsWithDelta(10, $info->length, 0.1);
|
|
}
|
|
|
|
public function testSongWithoutTitleHasFileNameAsTitle(): void
|
|
{
|
|
$this->scanner->setFile(__DIR__ . '/../../songs/blank.mp3');
|
|
|
|
self::assertSame('blank', $this->scanner->getFileScanInformation()->title);
|
|
}
|
|
|
|
public function testIgnoreLrcFileIfEmbeddedLyricsAvailable(): void
|
|
{
|
|
$base = sys_get_temp_dir() . '/' . Str::uuid();
|
|
$mediaFile = $base . '.mp3';
|
|
$lrcFile = $base . '.lrc';
|
|
copy(__DIR__ . '/../../songs/full.mp3', $mediaFile);
|
|
copy(__DIR__ . '/../../blobs/simple.lrc', $lrcFile);
|
|
|
|
self::assertSame("Foo\rbar", $this->scanner->setFile($mediaFile)->getFileScanInformation()->lyrics);
|
|
}
|
|
|
|
public function testReadLrcFileIfEmbeddedLyricsNotAvailable(): void
|
|
{
|
|
$base = sys_get_temp_dir() . '/' . Str::uuid();
|
|
$mediaFile = $base . '.mp3';
|
|
$lrcFile = $base . '.lrc';
|
|
copy(__DIR__ . '/../../songs/blank.mp3', $mediaFile);
|
|
copy(__DIR__ . '/../../blobs/simple.lrc', $lrcFile);
|
|
|
|
$info = $this->scanner->setFile($mediaFile)->getFileScanInformation();
|
|
|
|
self::assertSame("Line 1\nLine 2\nLine 3", $info->lyrics);
|
|
}
|
|
}
|