2021-08-30 21:23:48 +02:00
|
|
|
from datetime import timedelta
|
2021-09-07 12:31:37 +02:00
|
|
|
from unittest import mock
|
2021-06-03 15:20:39 +02:00
|
|
|
|
2021-06-04 22:43:52 +02:00
|
|
|
import mutagen
|
2021-06-04 14:06:37 +02:00
|
|
|
import pytest
|
2021-10-17 16:24:37 +02:00
|
|
|
|
2022-01-17 20:31:43 +01:00
|
|
|
from libretime_analyzer.steps.analyze_metadata import analyze_metadata
|
2021-05-27 16:23:02 +02:00
|
|
|
|
2022-01-17 20:31:43 +01:00
|
|
|
from ..fixtures import FILE_INVALID_DRM, FILE_INVALID_TXT, FILES_TAGGED, FixtureMeta
|
2021-08-30 21:23:48 +02:00
|
|
|
|
2014-03-10 21:32:23 +01:00
|
|
|
|
2021-06-04 14:06:37 +02:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"params,exception",
|
|
|
|
[
|
|
|
|
((42, dict()), TypeError),
|
|
|
|
(("foo", 3), TypeError),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
def test_analyze_wrong_params(params, exception):
|
|
|
|
with pytest.raises(exception):
|
2022-01-17 20:31:43 +01:00
|
|
|
analyze_metadata(*params)
|
2021-06-04 14:06:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize(
|
2021-08-30 21:23:48 +02:00
|
|
|
"filepath,metadata",
|
|
|
|
map(lambda i: (str(i.path), i.metadata), FILES_TAGGED),
|
2021-06-04 14:06:37 +02:00
|
|
|
)
|
2021-08-30 21:23:48 +02:00
|
|
|
def test_analyze(filepath: str, metadata: dict):
|
2022-01-17 20:31:43 +01:00
|
|
|
found = analyze_metadata(filepath, dict())
|
2021-05-27 16:23:02 +02:00
|
|
|
|
2021-08-30 21:23:48 +02:00
|
|
|
# Mutagen does not support wav files yet
|
|
|
|
if filepath.endswith("wav"):
|
|
|
|
return
|
2014-03-10 21:32:23 +01:00
|
|
|
|
2021-08-30 21:23:48 +02:00
|
|
|
assert len(found["md5"]) == 32
|
|
|
|
del found["md5"]
|
2021-05-27 16:23:02 +02:00
|
|
|
|
2021-08-30 21:23:48 +02:00
|
|
|
# Handle track formatted length/cueout
|
|
|
|
assert metadata["length"] in found["length"]
|
|
|
|
assert metadata["length"] in found["cueout"]
|
|
|
|
del metadata["length"]
|
|
|
|
del found["length"]
|
|
|
|
del found["cueout"]
|
2014-12-11 00:44:35 +01:00
|
|
|
|
2021-08-30 21:23:48 +02:00
|
|
|
# mp3,ogg,flac files does not support comments yet
|
|
|
|
if not filepath.endswith("m4a"):
|
|
|
|
del metadata["comment"]
|
2014-12-11 00:44:35 +01:00
|
|
|
|
2021-08-30 21:23:48 +02:00
|
|
|
assert found == metadata
|
2014-03-26 20:06:48 +01:00
|
|
|
|
|
|
|
|
2021-08-30 21:23:48 +02:00
|
|
|
def test_invalid_wma():
|
2022-01-17 20:31:43 +01:00
|
|
|
metadata = analyze_metadata(str(FILE_INVALID_DRM), dict())
|
2021-08-30 21:23:48 +02:00
|
|
|
assert metadata["mime"] == "audio/x-ms-wma"
|
2021-05-27 16:23:02 +02:00
|
|
|
|
2014-04-16 22:42:37 +02:00
|
|
|
|
|
|
|
def test_unparsable_file():
|
2022-01-17 20:31:43 +01:00
|
|
|
metadata = analyze_metadata(str(FILE_INVALID_TXT), dict())
|
2021-06-08 14:21:35 +02:00
|
|
|
assert metadata == {
|
|
|
|
"filesize": 10,
|
|
|
|
"ftype": "audioclip",
|
|
|
|
"hidden": False,
|
|
|
|
"md5": "4d5e4b1c8e8febbd31fa9ce7f088beae",
|
|
|
|
"mime": "text/plain",
|
|
|
|
}
|