To reduce bot traffic you must login to view /lordwelch/jellyfin-plugin-template/src/commit/cc20076fbd2deb86b88115cecaeec0a3ab2509b3/README.md.
The GitHub login only links via username.
Files

141 lines
3.7 KiB
Python

from __future__ import annotations
import json
import os
import subprocess
from pathlib import Path
from typing import Any
import pytest
import jprm
TEST_DATA_DIR = Path(os.path.dirname(os.path.realpath(__file__))) / 'data'
# datafiles is from pytest-datafiles
datafiles = pytest.mark.datafiles(
TEST_DATA_DIR / 'jprm.yaml',
TEST_DATA_DIR / 'jprm.json',
)
def json_load(path: Path, **kwargs: Any) -> Any:
with open(path, encoding='utf8') as handle:
return json.load(handle, **kwargs)
@datafiles # type: ignore[untyped-decorator]
def test_load_manifest(datafiles: Path) -> None:
assert jprm.load_build_config(datafiles / 'jprm.yaml') == json_load(datafiles / 'jprm.json')
@datafiles # type: ignore[untyped-decorator]
def test_get_config(datafiles: Path) -> None:
assert jprm.get_config(datafiles) == json_load(datafiles / 'jprm.json')
@datafiles # type: ignore[untyped-decorator]
def test_get_config_old(datafiles: Path) -> None:
(datafiles / 'jprm.yaml').replace(datafiles / 'build.yaml')
assert jprm.get_config(datafiles) == json_load(datafiles / 'jprm.json')
def test_invalid_manifest(tmp_path: Path) -> None:
with open(tmp_path / 'jprm.yaml', 'w', encoding='utf8') as fh:
fh.write(']]]')
assert jprm.get_config(tmp_path) is None
def test_no_manifest(tmp_path: Path) -> None:
assert jprm.get_config(tmp_path) is None
def test_version() -> None:
ver = jprm.Version('1.2.3.0')
assert ver.major == 1
assert ver.minor == 2
assert ver.build == 3
assert ver.revision == 0
assert str(ver) == '1.2.3.0'
assert ver.values() == (1, 2, 3, 0)
assert ver.keys() == ('major', 'minor', 'build', 'revision')
assert dict(ver.items()) == {'major': 1, 'minor': 2, 'build': 3, 'revision': 0}
assert 'major' in ver
assert len(ver) == 4
del ver['revision']
assert str(ver) == '1.2.3'
ver.major = 2
assert str(ver) == '2.2.3'
ver.minor = 0
assert str(ver) == '2.0.3'
ver.build = None
assert str(ver) == '2.0'
ver['major'] = 3
assert str(ver) == '3.0'
ver['minor'] = None
assert str(ver) == '3'
assert ver == jprm.Version(ver)
assert repr(ver) == "<Version('3')>"
assert [x for x in ver] == [3, None, None, None]
assert ver.get('foo', False) is False
assert ver.get('minor', False) is None
assert ver.get('major', False) == 3
assert ver == jprm.Version(3)
with pytest.raises(ValueError):
jprm.Version('1.2.3-beta.2')
with pytest.raises(TypeError):
jprm.Version(3.5)
with pytest.raises(KeyError):
print(ver['__len__'])
assert ver.full() == '3.0.0.0'
def test_find_git(tmp_path: Path) -> None:
subprocess.check_call(
('git', 'init', 'subpath'),
cwd=tmp_path,
)
repo_path = tmp_path / 'subpath'
subpath = repo_path / 'something/else'
subpath.mkdir(parents=True)
found = jprm.find_git(repo_path)
assert found == repo_path
found = jprm.find_git(subpath)
assert found == repo_path
found = jprm.find_git(tmp_path)
assert found == repo_path
@pytest.mark.parametrize(
'origin,expected',
(
('https://example.com/owner/project.git', ('example.com', 'owner', 'project')),
('https://example.com/owner/project', ('example.com', 'owner', 'project')),
),
) # type: ignore[untyped-decorator]
def test_get_repo_owner(tmp_path: Path, origin: str, expected: tuple[str, str, str]) -> None:
subprocess.check_call(
('git', 'init', '.'),
cwd=tmp_path,
)
subprocess.check_call(
('git', 'remote', 'add', 'origin', origin),
cwd=tmp_path,
)
found = jprm.get_repo_owner(tmp_path)
assert found == expected