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:
hh committed 2026-10-13 01:23:20 +02:00
1 parent dea793dbd7
commit eba0cc6168
2 files changed
+196 -14

No files matched your search

+83
View File
@@ -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