Initial import: Music_Server, MusicFree, catalog-sync
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import os
|
||||
import subprocess
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from musicdl.catalogsync.catalog_export import run_catalog_export_command
|
||||
|
||||
|
||||
def test_run_catalog_export_command_skips_when_command_missing() -> None:
|
||||
with patch.dict(os.environ, {}, clear=True):
|
||||
result = run_catalog_export_command({})
|
||||
|
||||
assert result.status == "skipped"
|
||||
assert result.returncode is None
|
||||
assert result.stdout == ""
|
||||
assert result.stderr == ""
|
||||
|
||||
|
||||
def test_run_catalog_export_command_succeeds_with_config_values() -> None:
|
||||
command = "python -c \"print('export ok')\""
|
||||
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir:
|
||||
workdir = str(Path(tmpdir))
|
||||
with patch.dict(
|
||||
os.environ,
|
||||
{
|
||||
"CATALOG_EXPORT_COMMAND": "python -c \"raise SystemExit(9)\"",
|
||||
"CATALOG_EXPORT_WORKDIR": "C:/ignored",
|
||||
},
|
||||
clear=False,
|
||||
):
|
||||
with patch(
|
||||
"musicdl.catalogsync.catalog_export.subprocess.run",
|
||||
return_value=subprocess.CompletedProcess(
|
||||
args=command,
|
||||
returncode=0,
|
||||
stdout="export ok\n",
|
||||
stderr="",
|
||||
),
|
||||
) as mocked_run:
|
||||
result = run_catalog_export_command(
|
||||
{
|
||||
"CATALOG_EXPORT_COMMAND": command,
|
||||
"CATALOG_EXPORT_WORKDIR": workdir,
|
||||
}
|
||||
)
|
||||
|
||||
mocked_run.assert_called_once_with(
|
||||
command,
|
||||
shell=True,
|
||||
cwd=workdir,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
assert result.status == "succeeded"
|
||||
assert result.returncode == 0
|
||||
assert result.stdout == "export ok\n"
|
||||
assert result.stderr == ""
|
||||
|
||||
|
||||
def test_run_catalog_export_command_fails_with_env_values() -> None:
|
||||
command = "python -c \"import sys; sys.stderr.write('boom')\""
|
||||
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir:
|
||||
workdir = str(Path(tmpdir))
|
||||
with patch.dict(
|
||||
os.environ,
|
||||
{
|
||||
"CATALOG_EXPORT_COMMAND": command,
|
||||
"CATALOG_EXPORT_WORKDIR": workdir,
|
||||
},
|
||||
clear=False,
|
||||
):
|
||||
with patch(
|
||||
"musicdl.catalogsync.catalog_export.subprocess.run",
|
||||
return_value=subprocess.CompletedProcess(
|
||||
args=command,
|
||||
returncode=5,
|
||||
stdout="",
|
||||
stderr="boom",
|
||||
),
|
||||
) as mocked_run:
|
||||
result = run_catalog_export_command({})
|
||||
|
||||
mocked_run.assert_called_once_with(
|
||||
command,
|
||||
shell=True,
|
||||
cwd=workdir,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
assert result.status == "failed"
|
||||
assert result.returncode == 5
|
||||
assert result.stdout == ""
|
||||
assert result.stderr == "boom"
|
||||
|
||||
|
||||
def test_run_catalog_export_command_fails_when_subprocess_raises() -> None:
|
||||
command = "python -c \"print('never runs')\""
|
||||
with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir:
|
||||
workdir = str(Path(tmpdir))
|
||||
with patch.dict(
|
||||
os.environ,
|
||||
{
|
||||
"CATALOG_EXPORT_COMMAND": command,
|
||||
"CATALOG_EXPORT_WORKDIR": workdir,
|
||||
},
|
||||
clear=False,
|
||||
):
|
||||
with patch(
|
||||
"musicdl.catalogsync.catalog_export.subprocess.run",
|
||||
side_effect=OSError("bad cwd"),
|
||||
) as mocked_run:
|
||||
result = run_catalog_export_command({})
|
||||
|
||||
mocked_run.assert_called_once_with(
|
||||
command,
|
||||
shell=True,
|
||||
cwd=workdir,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
assert result.status == "failed"
|
||||
assert result.command == command
|
||||
assert result.workdir == workdir
|
||||
assert result.returncode is None
|
||||
assert result.stdout == ""
|
||||
assert result.stderr == "bad cwd"
|
||||
Reference in New Issue
Block a user