add test for dynamic config attributes (import my.cfg as config)

This commit is contained in:
Dima Gerasimov 2020-05-04 20:56:11 +01:00 committed by karlicoss
parent fe763c3c04
commit 4cceccd787
6 changed files with 72 additions and 4 deletions

1
lint
View file

@ -41,6 +41,7 @@ def core_modules() -> Iterable[str]:
'my.init',
'tests/misc.py',
'tests/get_files.py',
# 'tests/config.py', TODO hmm. unclear how to type check this module
]

View file

@ -29,16 +29,16 @@ def from_orgmode() -> Iterator[Result]:
orgs = orgmode.query()
for o in orgs.query_all(lambda o: o.with_tag('weight')):
try:
# TODO ?? Result type?
# TODO can it throw? not sure
created = o.created
heading = o.heading
assert created is not None
except Exception as e:
log.exception(e)
yield e
continue
try:
w = float(heading)
except ValueError as e:
w = float(o.heading)
except Exception as e:
log.exception(e)
yield e
continue
@ -69,3 +69,7 @@ def dataframe():
df.set_index('dt', inplace=True)
df.index = pd.to_datetime(df.index, utc=True)
return df
# TODO move to a submodule? e.g. my.body.weight.orgmode?
# so there could be more sources
# not sure about my.body thing though

View file

@ -26,6 +26,7 @@ def _org_files_in(ppp: Path, archived: bool=False) -> Iterator[Path]:
def org_files(roots=config.roots, archived: bool=False) -> Iterator[Path]:
# TODO rename to 'paths'? use get_files?
for p in config.roots:
yield from _org_files_in(Path(p), archived=archived)

View file

@ -50,6 +50,9 @@ def main():
'pytest',
'pylint',
'mypy',
# used in some tests
'pandas',
],
'optional': [
# TODO document these?

58
tests/config.py Normal file
View file

@ -0,0 +1,58 @@
from pathlib import Path
def setup_notes_path(notes: Path) -> None:
# TODO reuse doc from my.cfg?
from my.cfg import config
from types import SimpleNamespace
config.orgmode = SimpleNamespace( # type: ignore[misc,assignment]
roots=[notes],
)
def test_dynamic_configuration(notes: Path) -> None:
setup_notes_path(notes)
from my.body.weight import dataframe
weight_df = dataframe()
assert list(weight_df['weight'].fillna(0.0)) == [
0.0,
62.0,
0.0,
61.0,
62.0,
0.0,
]
import pytest # type: ignore
@pytest.fixture
def notes(tmp_path: Path):
ndir = tmp_path / 'notes'
ndir.mkdir()
logs = ndir / 'logs.org'
logs.write_text('''
#+TITLE: Stuff I'm logging
* Weight (org-capture) :weight:
** [2020-05-01 Fri 09:00] 62
** 63
this should be ignored, got no timestmap
** [2020-05-03 Sun 08:00] 61
** [2020-05-04 Mon 10:00] 62
''')
misc = ndir / 'misc.org'
misc.write_text('''
Some misc stuff
* unrelated note :weight:whatever:
''')
try:
yield ndir
finally:
pass
# TODO test set_repo?

View file

@ -14,6 +14,7 @@ commands =
python3 -c 'import my.init; from my.config import stub as config; print(config.key)'
python3 -c 'import my.init; import my.config; import my.config.repos' # shouldn't fail at least
python3 -m pytest tests/misc.py tests/get_files.py
# TODO add; once I figure out porg depdencency?? tests/config.py
# TODO run demo.py? just make sure with_my is a bit cleverer?
# TODO e.g. under CI, rely on installing