signal-bot/tests
Krzysztof kuhy Rudnicki 77795ee6f8
Some checks are pending
CI / check (push) Waiting to run
CI / web (push) Waiting to run
Today's food and workout logs, read from where diet_guard and screen_locker keep them
Two commands, food_today and workout_today, each printing the current
Warsaw day out of a log another program owns: every meal with its time,
calories and source plus the day's total and macros; every workout with
every field it carries. Three workout fields are withheld (a reservation
phone number, a screenshot path, the sync record id), and the food budget
is never printed -- diet_guard keeps that number on the machine on purpose.

The spellings the group uses carry a surname, so they are custom aliases in
the state directory; aliases.json ships only plain words. The suite points
both logs at absent temp files so it can never read the operator's own,
and the e2e run writes one invented entry of each under today's date.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-04 22:07:46 +02:00
..
__init__.py feat: rewrite the bot so it runs, and gate it like the other repos 2026-08-29 13:05:42 +02:00
analytics_seed.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
conftest.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
gate_helpers.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
manage_fixture.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
pack_add_fixture.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
pack_fixture.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
stats_seed.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
test_allowlist.py feat: refuse to look healthy while deaf, and heal the container by itself 2026-08-29 19:01:55 +02:00
test_analytics_backfill.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_behaviour.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_command.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_analytics_health.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_hours.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_journal.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_polish.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_probe.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_analytics_usage.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_animals.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_announce_render.py release: 0.1.7 «Callistus I» — a version now says which pope, and when 2026-08-30 22:12:09 +02:00
test_announce.py fix: a refused attachment no longer costs a group its release notes 2026-08-30 21:33:56 +02:00
test_app_commands.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_app.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_art_command.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
test_bot_catchup.py fix: the evening report is one message, not one per thing it has to say 2026-08-30 22:49:51 +02:00
test_bot_listen.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_bot_report.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
test_bot.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_changelog.py release: 0.1.7 «Callistus I» — a version now says which pope, and when 2026-08-30 22:12:09 +02:00
test_cli.py fix: green CI, and a page that has actually been looked at 2026-08-31 15:38:24 +02:00
test_command_events.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_command_settings.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_command_switch.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_commons.py feat: a word with two meanings gets the one made of steel 2026-08-31 18:01:27 +02:00
test_config_pack.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_config.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
test_cooldown_gate.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_counting.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_custom_aliases.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
test_day_log.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
test_decorators.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_discovery.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_dispatcher_concurrency.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_dispatcher_gates.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_dispatcher_mute.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
test_dispatcher_outcomes.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_dispatcher_recording.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_dispatcher_unknown.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_dispatcher.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_envelope_shape.py fix: the operator's uuid was still a fixture in the envelope-shape test 2026-08-30 23:04:42 +02:00
test_external.py feat: python tool/tagger.py sets up .venv too, not just tag.sh 2026-08-31 13:34:27 +02:00
test_fake_account.py feat: refuse to look healthy while deaf, and heal the container by itself 2026-08-29 19:01:55 +02:00
test_fake_groups.py feat: discover groups from the account, so adding the bot is the whole setup 2026-08-29 15:30:08 +02:00
test_fake_server.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
test_folding.py fix: commands resolve when typed on another alphabet's keyboard 2026-08-30 14:22:43 +02:00
test_food_command.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
test_good_bot_command.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
test_healthz.py release: 0.1.7 «Callistus I» — a version now says which pope, and when 2026-08-30 22:12:09 +02:00
test_help_album.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
test_help_command.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
test_http_client.py feat: !gekon posts a research-grade gecko photo 2026-08-29 23:26:40 +02:00
test_inflight.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_latency.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_liveness.py feat: refuse to look healthy while deaf, and heal the container by itself 2026-08-29 19:01:55 +02:00
test_logging_setup.py feat: the bot can describe an envelope without quoting anybody 2026-08-30 19:29:06 +02:00
test_main.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_manage_album.py feat: the management backend, absorbing the tagger 2026-08-31 14:38:24 +02:00
test_manage_aliases.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
test_manage_assets.py feat: the management backend, absorbing the tagger 2026-08-31 14:38:24 +02:00
test_manage_commands.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_manage_envfile.py feat: the .env layer the management page will write through 2026-08-31 14:31:29 +02:00
test_manage_envkeys.py feat: the .env layer the management page will write through 2026-08-31 14:31:29 +02:00
test_manage_guard.py feat: the management backend, absorbing the tagger 2026-08-31 14:38:24 +02:00
test_manage_routes.py feat: the management backend, absorbing the tagger 2026-08-31 14:38:24 +02:00
test_media_sniff.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_media_strip.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
test_media_tags.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_media_tracks.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
test_membership.py feat: discover groups from the account, so adding the bot is the whole setup 2026-08-29 15:30:08 +02:00
test_models.py feat: weekly, monthly and year-in-review posts, keyed off the day reported 2026-08-30 19:56:25 +02:00
test_multiple_albums.py feat: no photo reaches the album from the chat until somebody approves it 2026-09-04 09:47:42 +02:00
test_mute_command.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
test_mute.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
test_nearest.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
test_pack_add_invariants.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_pack_add.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_pack_album.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
test_pack_command.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_pack_custom.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_pack_holder.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_pack_import.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
test_pack_ledger.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
test_pack_load.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_pack_people.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
test_pack_random.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_pack_store.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_pack.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_personal_data_sources.py feat: no photo reaches the album from the chat until somebody approves it 2026-09-04 09:47:42 +02:00
test_poem_command.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
test_popes_command.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_portcheck.py feat: make the bot actually reply on Signal, and gate every way it went silent 2026-08-29 14:37:27 +02:00
test_portraits.py release: 0.0.7 «Telesfor» — !papież, and the bot can test itself 2026-08-30 17:06:25 +02:00
test_quoting.py feat: answer the message that asked, not just the room 2026-08-29 23:01:01 +02:00
test_registry_holder.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
test_registry.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
test_routes_analytics.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_routes_suggestions.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
test_scenario.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
test_scheduler.py feat: rewrite the bot so it runs, and gate it like the other repos 2026-08-29 13:05:42 +02:00
test_schema_tables.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_selftest_attachments.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
test_selftest.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_served.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_startup.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_stats_backfill.py fix: !ja told everybody their favourite hour was noon 2026-08-30 20:15:20 +02:00
test_stats_commands.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
test_stats_curiosities.py Funny numbers: 69 (nice), 2137 🙏 and five more on every count the stats print 2026-09-04 21:55:33 +02:00
test_stats_events.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_stats_nightly.py release: 0.1.6 «Zephyrinus» — 21:37 reports today, not yesterday 2026-08-30 22:09:13 +02:00
test_stats_periods.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_stats_queries_period.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
test_stats_records.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
test_stats_render_day.py Funny numbers: 69 (nice), 2137 🙏 and five more on every count the stats print 2026-09-04 21:55:33 +02:00
test_stats_render_period.py Funny numbers: 69 (nice), 2137 🙏 and five more on every count the stats print 2026-09-04 21:55:33 +02:00
test_stats_streaks.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
test_stats_text.py Funny numbers: 69 (nice), 2137 🙏 and five more on every count the stats print 2026-09-04 21:55:33 +02:00
test_store.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_suggest_command.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
test_suggestions_store.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_tool_imports.py feat: one page to manage the bot, and the tagger folded into it 2026-08-31 14:54:49 +02:00
test_transport_attachments.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_transport_base.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
test_transport_fake.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
test_transport_media.py release: 0.2.0 «Urbanus I» — a private photo album, and a tagger for it 2026-08-30 22:35:41 +02:00
test_transport_rest.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
test_traps_command.py feat: a word with two meanings gets the one made of steel 2026-08-31 18:01:27 +02:00
test_trust.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
test_unknown.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
test_upstream_timing.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
test_user_lock.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
test_versioning.py release: 0.1.7 «Callistus I» — a version now says which pope, and when 2026-08-30 22:12:09 +02:00
test_wiring_aliases.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
test_wiring_ungated.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
test_wolnelektury.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
test_workout_command.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00