76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import os
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from backend.app.scanner import probe_local_assets
|
|
|
|
|
|
class ScannerAssetProbeTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.temp_dir = tempfile.TemporaryDirectory()
|
|
self.library_dir = Path(self.temp_dir.name)
|
|
|
|
def tearDown(self):
|
|
self.temp_dir.cleanup()
|
|
|
|
def test_probe_local_assets_supports_cover_jpeg(self):
|
|
audio_path = self._create_file('album/track.flac')
|
|
cover_path = self._create_file('album/cover.jpeg')
|
|
|
|
assets = probe_local_assets(audio_path)
|
|
|
|
self.assertEqual(assets['local_cover'], str(cover_path.resolve()))
|
|
self.assertIsNone(assets['local_lyric'])
|
|
|
|
def test_probe_local_assets_supports_folder_webp(self):
|
|
audio_path = self._create_file('album/track.flac')
|
|
cover_path = self._create_file('album/folder.webp')
|
|
|
|
assets = probe_local_assets(audio_path)
|
|
|
|
self.assertEqual(assets['local_cover'], str(cover_path.resolve()))
|
|
|
|
def test_probe_local_assets_matches_track_name_case_insensitively(self):
|
|
audio_path = self._create_file('album/Track.FLAC')
|
|
cover_path = self._create_file('album/track.JPEG')
|
|
lyric_path = self._create_file('album/TRACK.LRC', '[00:00.00] lyric')
|
|
|
|
assets = probe_local_assets(audio_path)
|
|
|
|
self.assertEqual(assets['local_cover'], str(cover_path.resolve()))
|
|
self.assertEqual(assets['local_lyric'], str(lyric_path.resolve()))
|
|
|
|
def test_probe_local_assets_respects_cover_priority(self):
|
|
audio_path = self._create_file('album/song.flac')
|
|
self._create_file('album/song.jpg')
|
|
self._create_file('album/folder.jpg')
|
|
preferred_cover = self._create_file('album/cover.png')
|
|
self._create_file('album/cover.webp')
|
|
|
|
assets = probe_local_assets(audio_path)
|
|
|
|
self.assertEqual(assets['local_cover'], str(preferred_cover.resolve()))
|
|
|
|
def test_probe_local_assets_ignores_symlink_covers(self):
|
|
audio_path = self._create_file('album/song.flac')
|
|
fallback_cover = self._create_file('album/folder.webp')
|
|
target_path = self._create_file('targets/real-cover.jpeg')
|
|
symlink_path = self.library_dir / 'album' / 'cover.jpeg'
|
|
symlink_path.parent.mkdir(parents=True, exist_ok=True)
|
|
os.symlink(target_path, symlink_path)
|
|
|
|
assets = probe_local_assets(audio_path)
|
|
|
|
self.assertEqual(assets['local_cover'], str(fallback_cover.resolve()))
|
|
|
|
def _create_file(self, relative_path: str, content: str = '') -> Path:
|
|
path = self.library_dir / relative_path
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text(content, encoding='utf-8')
|
|
return path
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|