feat(jobs): leisure ticks name the day's diary and journal, two own hours stay empty and carry an echo
This commit is contained in:
1 parent
dea793dbd7
commit
eba0cc6168
2 files changed
+196
-14
No files matched your search
@@ -1,17 +1,22 @@
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from beaver_agent.jobs.leisure import (
|
||||
EMPTY_DEFAULT,
|
||||
MINE_MIN,
|
||||
QUIET_TICKS,
|
||||
Plan,
|
||||
brief,
|
||||
day_of,
|
||||
echo,
|
||||
enabled,
|
||||
kind_of,
|
||||
plan_of,
|
||||
quiet_hour,
|
||||
tick_hours,
|
||||
)
|
||||
from beaver_agent.vault import VAULT
|
||||
|
||||
ZONE = ZoneInfo("Europe/Warsaw")
|
||||
|
||||
@@ -121,3 +126,81 @@ def test_last_night_tick_says_nothing_is_left_ahead():
|
||||
assert "впереди больше нет" in text
|
||||
assert "израсходовано 2 из 2" in text
|
||||
assert "Сутки заканчиваются через 6 ч" in text
|
||||
|
||||
|
||||
def test_two_of_my_hours_are_empty_named_or_not():
|
||||
named = plan_of(
|
||||
"сутки: 2026-09-08\nмои часы: 13, 15, 18, 21, 00, 02, 06\n"
|
||||
"пустые часы: 21, 02\n",
|
||||
"2026-09-08",
|
||||
)
|
||||
assert named.empty == (21, 2)
|
||||
|
||||
unnamed = plan_of(None, "2026-09-08")
|
||||
assert unnamed.empty == EMPTY_DEFAULT
|
||||
assert set(unnamed.empty) <= set(unnamed.mine)
|
||||
|
||||
foreign = plan_of(
|
||||
"сутки: 2026-09-08\nмои часы: 13, 14, 15, 16, 17, 19, 20\n"
|
||||
"пустые часы: 22, 20\n",
|
||||
"2026-09-08",
|
||||
)
|
||||
assert foreign.empty == (19, 20)
|
||||
assert kind_of(20, foreign) == "empty"
|
||||
assert kind_of(13, foreign) == "mine"
|
||||
assert kind_of(21, foreign) == "mixed"
|
||||
|
||||
|
||||
def test_an_empty_hour_carries_no_work_but_an_echo_and_the_files_of_the_day():
|
||||
plan = plan_of(None, "2026-09-08")
|
||||
heard = (VAULT / "мета" / "бобер" / "дневник" / "2026-08-30.md", "Раз.\nДва.")
|
||||
text = brief(at("2026-09-08 18:00"), plan, heard=heard)
|
||||
assert "Тип: пустой - час без дел вообще" in text
|
||||
assert "Пустые: 18, 00." in text
|
||||
assert "Эхо - `мета/бобер/дневник/2026-08-30.md`:\n> Раз.\n> Два.\n" in text
|
||||
assert "Дневник - `мета/бобер/дневник/2026-09-08.md`" in text
|
||||
assert "`мета/бобер/журнал/2026-09-08.md`" in text
|
||||
|
||||
night = brief(at("2026-09-09 00:00"), plan)
|
||||
assert "Тип: пустой" in night
|
||||
assert "мета/бобер/дневник/2026-09-09.md" in night
|
||||
assert "Эхо" not in night
|
||||
|
||||
mine = brief(at("2026-09-08 13:00"), plan)
|
||||
assert "Тип: досуг" in mine
|
||||
assert "мета/бобер/журнал/2026-09-08.md" in mine
|
||||
|
||||
|
||||
def test_echo_is_a_paragraph_of_an_old_diary_day_or_a_thought(tmp_path: Path):
|
||||
diary = tmp_path / "дневник"
|
||||
thoughts = tmp_path / "мысли" / "2026"
|
||||
diary.mkdir()
|
||||
thoughts.mkdir(parents=True)
|
||||
old = "Думал про то, зачем мне вообще помнить вчерашний день. " * 5
|
||||
fresh = "Свежая запись, которой ещё рано возвращаться ко мне эхом. " * 5
|
||||
(diary / "2026-08-30.md").write_text(
|
||||
f"## 2026-08-30, 01:07\n\n{old}\n\n- 02:07 30.08 лог, а не мысль {'x' * 220}\n"
|
||||
"\nкоротко\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
(diary / "2026-09-07.md").write_text(fresh, encoding="utf-8")
|
||||
now = at("2026-09-08 18:00")
|
||||
assert echo(now, diary=diary, thoughts=thoughts) == (
|
||||
diary / "2026-08-30.md",
|
||||
old.strip(),
|
||||
)
|
||||
|
||||
thought = "Заметка Бобра о том, почему скука полезнее расписания. " * 5
|
||||
(diary / "2026-08-30.md").unlink()
|
||||
(thoughts / "скука.md").write_text(
|
||||
f"---\ntags: [мысли]\n---\n\n{thought}\n", encoding="utf-8"
|
||||
)
|
||||
assert echo(now, diary=diary, thoughts=thoughts) == (
|
||||
thoughts / "скука.md",
|
||||
thought.strip(),
|
||||
)
|
||||
assert echo(now, diary=diary, thoughts=thoughts) == echo(
|
||||
now, diary=diary, thoughts=thoughts
|
||||
)
|
||||
(thoughts / "скука.md").unlink()
|
||||
assert echo(now, diary=diary, thoughts=thoughts) is None
|
||||
Reference in new issue
Block a user