Files
2026-04-30 14:34:28 +08:00

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()