tests and bug fixes
This commit is contained in:
parent
af33e91232
commit
228d44ce98
|
@ -44,7 +44,7 @@ def static_root():
|
||||||
dirname = os.environ.get('STATIC_PATH', 'static')
|
dirname = os.environ.get('STATIC_PATH', 'static')
|
||||||
path = root() / Path(dirname)
|
path = root() / Path(dirname)
|
||||||
if not path.exists() or not path.is_dir():
|
if not path.exists() or not path.is_dir():
|
||||||
raise ConfigurationError(
|
raise ConfigurationError( # pragma: no cover
|
||||||
f"The static assets directory {dirname} (STATIC_PATH) "
|
f"The static assets directory {dirname} (STATIC_PATH) "
|
||||||
f"doesn't exist, or isn't a directory.\n\n{_reinstall_hint}"
|
f"doesn't exist, or isn't a directory.\n\n{_reinstall_hint}"
|
||||||
)
|
)
|
||||||
|
@ -56,7 +56,7 @@ def static(relpath, theme=None):
|
||||||
if theme:
|
if theme:
|
||||||
root = theme.path / Path('static')
|
root = theme.path / Path('static')
|
||||||
if not root.is_dir():
|
if not root.is_dir():
|
||||||
raise ThemeConfigurationError(
|
raise ThemeConfigurationError( # pragma: no cover
|
||||||
f"The themes directory {relpath} (THEMES_PATH) "
|
f"The themes directory {relpath} (THEMES_PATH) "
|
||||||
f"doesn't contain a 'static' directory."
|
f"doesn't contain a 'static' directory."
|
||||||
)
|
)
|
||||||
|
@ -73,7 +73,7 @@ def themes_root():
|
||||||
dirname = os.environ.get('THEMES_PATH', 'themes')
|
dirname = os.environ.get('THEMES_PATH', 'themes')
|
||||||
path = root() / Path(dirname)
|
path = root() / Path(dirname)
|
||||||
if not path.exists() or not path.is_dir():
|
if not path.exists() or not path.is_dir():
|
||||||
raise ConfigurationError(
|
raise ConfigurationError( # pragma: no cover
|
||||||
f"The themes directory {dirname} (THEMES_PATH) "
|
f"The themes directory {dirname} (THEMES_PATH) "
|
||||||
f"doesn't exist, or isn't a directory.\n\n{_reinstall_hint}"
|
f"doesn't exist, or isn't a directory.\n\n{_reinstall_hint}"
|
||||||
)
|
)
|
||||||
|
@ -84,7 +84,7 @@ def themes_root():
|
||||||
def theme(name):
|
def theme(name):
|
||||||
path = themes_root() / Path(name)
|
path = themes_root() / Path(name)
|
||||||
if not path.exists() or not path.is_dir():
|
if not path.exists() or not path.is_dir():
|
||||||
available = ','.join(available_themes)
|
available = ','.join(available_themes())
|
||||||
raise ThemeMissingException(
|
raise ThemeMissingException(
|
||||||
f"A theme directory named {name} does not exist or isn't a directory. "
|
f"A theme directory named {name} does not exist or isn't a directory. "
|
||||||
"Perhaps there is a typo in the name?\n"
|
"Perhaps there is a typo in the name?\n"
|
||||||
|
|
|
@ -7,7 +7,7 @@ class BasePrompt(Completer):
|
||||||
def __init__(self, manager=None, parent=None):
|
def __init__(self, manager=None, parent=None):
|
||||||
super(BasePrompt, self).__init__()
|
super(BasePrompt, self).__init__()
|
||||||
|
|
||||||
if (not manager and not parent):
|
if (not manager and not parent): # pragma: no cover
|
||||||
raise RuntimeError("Must define either a database manager or a parent object.")
|
raise RuntimeError("Must define either a database manager or a parent object.")
|
||||||
|
|
||||||
self._prompt = ''
|
self._prompt = ''
|
||||||
|
|
|
@ -33,7 +33,7 @@ class CommandPrompt(BasePrompt):
|
||||||
def values(self):
|
def values(self):
|
||||||
return [k for k in self.commands.keys() if not k.startswith('_')]
|
return [k for k in self.commands.keys() if not k.startswith('_')]
|
||||||
|
|
||||||
def default_completer(self, document, complete_event):
|
def default_completer(self, document, complete_event): # pragma: no cover
|
||||||
def _formatter(row):
|
def _formatter(row):
|
||||||
self._playlist = Playlist.from_row(row, self.manager.session)
|
self._playlist = Playlist.from_row(row, self.manager.session)
|
||||||
return self.playlist.record.name
|
return self.playlist.record.name
|
||||||
|
@ -47,19 +47,17 @@ class CommandPrompt(BasePrompt):
|
||||||
name = cmd + ' ' + ' '.join(parts)
|
name = cmd + ' ' + ' '.join(parts)
|
||||||
if cmd in self.commands:
|
if cmd in self.commands:
|
||||||
self.commands[cmd].start(name)
|
self.commands[cmd].start(name)
|
||||||
else:
|
return True
|
||||||
self._playlist = Playlist(
|
self._playlist = Playlist(
|
||||||
slug=slugify(name),
|
slug=slugify(name),
|
||||||
name=name,
|
name=name,
|
||||||
session=self.manager.session,
|
session=self.manager.session,
|
||||||
create_ok=True
|
create_ok=True
|
||||||
)
|
)
|
||||||
res = self.commands['_playlist'].start()
|
res = self.commands['_playlist'].start()
|
||||||
if res is False:
|
return True and res
|
||||||
return res
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def start():
|
def start(): # pragma: no cover
|
||||||
with database_manager() as manager:
|
with database_manager() as manager:
|
||||||
CommandPrompt(manager).start()
|
CommandPrompt(manager).start()
|
||||||
|
|
|
@ -2,12 +2,35 @@ import pytest
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from groove import path
|
from groove import path
|
||||||
from groove.exceptions import ConfigurationError
|
from groove.exceptions import ConfigurationError, ThemeMissingException
|
||||||
|
from groove.webserver import themes
|
||||||
|
|
||||||
|
|
||||||
def test_missing_theme_root(monkeypatch):
|
@pytest.mark.parametrize('root', ['/dev/null/missing', None])
|
||||||
|
def test_missing_media_root(monkeypatch, root):
|
||||||
broken_env = {k: v for (k, v) in os.environ.items()}
|
broken_env = {k: v for (k, v) in os.environ.items()}
|
||||||
broken_env['GROOVE_ON_DEMAND_ROOT'] = '/dev/null/missing'
|
broken_env['MEDIA_ROOT'] = root
|
||||||
|
monkeypatch.setattr(os, 'environ', broken_env)
|
||||||
|
with pytest.raises(ConfigurationError):
|
||||||
|
path.media_root()
|
||||||
|
|
||||||
|
def test_static(monkeypatch):
|
||||||
|
assert path.static('foo')
|
||||||
|
assert path.static('foo', theme=themes.load_theme('default_theme'))
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('root', ['/dev/null/missing', None])
|
||||||
|
def test_missing_theme_root(monkeypatch, root):
|
||||||
|
broken_env = {k: v for (k, v) in os.environ.items()}
|
||||||
|
broken_env['GROOVE_ON_DEMAND_ROOT'] = root
|
||||||
monkeypatch.setattr(os, 'environ', broken_env)
|
monkeypatch.setattr(os, 'environ', broken_env)
|
||||||
with pytest.raises(ConfigurationError):
|
with pytest.raises(ConfigurationError):
|
||||||
path.themes_root()
|
path.themes_root()
|
||||||
|
|
||||||
|
|
||||||
|
def test_theme_no_path():
|
||||||
|
with pytest.raises(ThemeMissingException):
|
||||||
|
path.theme('nope')
|
||||||
|
|
||||||
|
|
||||||
|
def test_database(env):
|
||||||
|
assert env['DATABASE_PATH'] in path.database().name
|
||||||
|
|
|
@ -6,8 +6,6 @@ from unittest.mock import MagicMock
|
||||||
from groove import playlist, editor
|
from groove import playlist, editor
|
||||||
from groove.exceptions import PlaylistValidationError, TrackNotFoundError
|
from groove.exceptions import PlaylistValidationError, TrackNotFoundError
|
||||||
|
|
||||||
# 166-167, 200, 203-204, 227-228, 253->255, 255->exit, 270, 346-347
|
|
||||||
|
|
||||||
|
|
||||||
def test_create(empty_playlist):
|
def test_create(empty_playlist):
|
||||||
assert empty_playlist.record.id
|
assert empty_playlist.record.id
|
||||||
|
|
|
@ -58,6 +58,7 @@ def test_help(monkeypatch, capsys, cmd_prompt, inputs, expected):
|
||||||
output = capsys.readouterr()
|
output = capsys.readouterr()
|
||||||
for txt in expected:
|
for txt in expected:
|
||||||
assert txt in output.out
|
assert txt in output.out
|
||||||
|
assert cmd_prompt.__doc__ == cmd_prompt.help_text
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('inputs, expected', [
|
@pytest.mark.parametrize('inputs, expected', [
|
||||||
|
@ -69,3 +70,8 @@ def test_load(monkeypatch, caplog, cmd_prompt, inputs, expected):
|
||||||
monkeypatch.setattr('groove.shell.base.prompt', response_factory([inputs]))
|
monkeypatch.setattr('groove.shell.base.prompt', response_factory([inputs]))
|
||||||
cmd_prompt.start()
|
cmd_prompt.start()
|
||||||
assert expected in caplog.text
|
assert expected in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
def test_values(cmd_prompt):
|
||||||
|
for cmd in [cmd for cmd in cmd_prompt.commands.keys() if not cmd.startswith('_')]:
|
||||||
|
assert cmd in cmd_prompt.values
|
||||||
|
|
Loading…
Reference in New Issue
Block a user