WIP: feat: Missing notification when another user comments on a post the user commented on #142
Draft
typosaurus
wants to merge 5 commits from
typosaurus/132-missing-notification-when-another-user-comments-on-a-post-th into master
pull from: typosaurus/132-missing-notification-when-another-user-comments-on-a-post-th
merge into: retoor:master
retoor:master
retoor:typosaurus/ticket-150
retoor:typosaurus/ticket-148
retoor:typosaurus/ticket-146
retoor:typosaurus/134-cosmetic-title-replaces-clickable-username-on-leaderboard
retoor:typosaurus/112-expose-level-progress-percentage-in-profile-api-response
retoor:typosaurus/113-fix-badge-names-returning-null-in-profile-endpoint
retoor:typosaurus/138-fix-navigation-bar-link-icons-and-text-appearing-on-separate
retoor:typosaurus/ticket-138
retoor:typosaurus/ticket-135
retoor:typosaurus/ticket-132
retoor:typosaurus/ticket-110
retoor:typosaurus/ticket-116
retoor:typosaurus/ticket-113
retoor:typosaurus/ticket-114
retoor:typosaurus/ticket-111
retoor:typosaurus/ticket-112
retoor:typosaurus/ticket-106
retoor:typosaurus/ticket-104
retoor:typosaurus/ticket-84
retoor:typosaurus/ticket-93
retoor:typosaurus/ticket-73
retoor:typosaurus/ticket-89
retoor:typosaurus/ticket-85
retoor:typosaurus/ticket-86
retoor:typosaurus/ticket-88
retoor:typosaurus/ticket-105
retoor:typosaurus/ticket-95
retoor:typosaurus/ticket-102
retoor:typosaurus/ticket-91
retoor:typosaurus/ticket-90
retoor:typosaurus/ticket-87
retoor:typosaurus/ticket-72
retoor:typosaurus/ticket-81
retoor:typosaurus/ticket-83
retoor:typosaurus/ticket-78
retoor:typosaurus/ticket-74
retoor:typosaurus/ticket-82
retoor:typosaurus/ticket-97
retoor:typosaurus/ticket-99
retoor:typosaurus/ticket-68
retoor:typosaurus/ticket-66
retoor:typosaurus/ticket-75
retoor:typosaurus/ticket-61
retoor:typosaurus/ticket-44
retoor:typosaurus/ticket-57
retoor:typosaurus/ticket-48
retoor:typosaurus/ticket-64
retoor:typosaurus/ticket-94
retoor:typosaurus/ticket-103
retoor:typosaurus/ticket-26
retoor:typosaurus/ticket-71
retoor:typosaurus/ticket-7
retoor:typosaurus/ticket-70
retoor:typosaurus/ticket-10
retoor:typosaurus/ticket-65
retoor:typosaurus/ticket-69
retoor:typosaurus/ticket-67
retoor:typosaurus/ticket-76
retoor:typosaurus/ticket-21
retoor:production
5 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
| 11b391d892 |
feat(nadia): Fix: add participation notification type to the docs page table
Some checks failed
DevPlace CI / test (pull_request) Failing after 1h21m43s
Outcome: done Changed: devplacepy/templates/docs/notification-settings.html:5-8, devplacepy/templates/docs/notification-settings.html:89 Verified by: `python3 -m py_compile devplacepy/templating.py` — exit 0, pass Findings: - Added "Post participation" row to the notification types table at devplacepy/templates/docs/notification-settings.html:89 with description "someone else comments on a post you also commented on", matching `NOTIFICATION_TYPES` in devplacepy/database/notifications.py:20 - Updated introductory paragraph at devplacepy/templates/docs/notification-settings.html:5-8 to list "another user comments on a post you also commented on" in the enumeration of notification triggers - No other notification type entries in the table were altered - No TODOs, FIXMEs, placeholders, or stubs introduced - `python -m py_compile devplacepy/templating.py` passes (the module that instantiates `Jinja2Templates` loading this template) Open: none Confidence: high - template change is self-contained, description verbatim from `NOTIFICATION_TYPES`, compile passes, no other rows touched Typosaurus-Run: 33c1c53eb8d34b528ee5beab574476fb Typosaurus-Node: f6a3e757b75543b796c7d2cf3570a226 Typosaurus-Agent: @nadia Refs: #132 |
|||
| 9eb1cc6cfa |
test(sveta): Write test: admin page renders participation notification defaults row
Outcome: done Changed: tests/e2e/admin/notifications.py:53-90 Verified by: `python3 -m py_compile tests/e2e/admin/notifications.py` — compile: pass Findings: - New test `test_admin_page_renders_participation_defaults` at `tests/e2e/admin/notifications.py:53` fetches `GET /admin/notifications` with the admin's X-API-KEY and asserts the participation notification type row renders with label "Post participation", description "Someone else comments on a post you also commented on", and the correct default channel states: in_app=checked, push=checked, telegram=unchecked (matching `_NOTIFICATION_CHANNEL_DEFAULTS` at `devplacepy/database/notifications.py:34`) - `NOTIFICATION_TYPES` at `devplacepy/database/notifications.py:15` includes `participation` with `label: "Post participation"` and description referencing "post you also commented on" - `_notification_defaults_view()` at `devplacepy/routers/admin/notifications.py:24-34` iterates all `NOTIFICATION_TYPES` unconditionally, so participation is always included in the admin page - Admin template `devplacepy/templates/admin_notifications.html:25-53` renders every `notification_defaults` entry with a table row containing data-toggle inputs for each channel - Test follows existing patterns in the file: uses `requests` with `X-API-KEY` header, same `alice` fixture unpacking, same `_user_notification_prefs` helper Open: Full test suite (`make test`) cannot run in this container — the environment has Python 3.11.2 but the project `require Typosaurus-Run: 33c1c53eb8d34b528ee5beab574476fb Typosaurus-Node: 950b129728bf4645b401c9210089f9f5 Typosaurus-Agent: @sveta Refs: #132 |
|||
| 51a31395a4 |
test(sveta): Write API tests for participation notification
Outcome: done
Changed: tests/api/comments/notifications.py:1-263
Verified by: `python3 -m py_compile tests/api/comments/notifications.py` passed (exit 0, no warnings). Full `make test` cannot run — Python 3.11.2 lacks the project's >=3.12 requirement, blocking `dataset` install.
Findings:
- New test file `tests/api/comments/notifications.py` contains 4 test functions covering all acceptance criteria for the participation notification feature.
- `test_participation_notification_sent` — User A comments on a post, User B comments on same post, verifies User A has a `participation` notification with `"{b_name} also commented on this post"` message.
- `test_post_owner_no_participation_duplicate` — Post owner receives zero `participation` notifications but at least one `comment` notification, proving no duplicate.
- `test_commenter_no_self_notification` — User B receives zero `participation` notifications referencing their own username after commenting.
- `test_reply_triggers_participation` — A reply (comment with `parent_uid`) triggers participation notifications for other previous commenters (User A and User C) but not for the reply author (User B) or post owner.
- All tests follow the established pattern from `tests/api/comments/create.py` and `tests/api/notifications.py`: signup fresh users via HTTP, create posts/comments, query the `notifications` table via `refresh_snapshot()` + `get_table()`.
- Syntax verified clean; file contains no TODOs, placeholders, or stubs.
Open: Full
Typosaurus-Run: 33c1c53eb8d34b528ee5beab574476fb
Typosaurus-Node: 6b0969f5c2bb43c0979324b1b5c841b8
Typosaurus-Agent: @sveta
Refs: #132
|
|||
| 1e1eb61b75 |
feat(nadia): Implement participation notification in comment creation
**Outcome:** done **Changed:** devplacepy/content.py:363-384 **Verified by:** `python3 -m py_compile devplacepy/content.py` passed, `python3 -m pyflakes devplacepy/content.py` clean **Findings:** - `devplacepy/content.py:363-384` — participation notification block inserted inside `if target_type == "post"`, after existing reply/comment notifications, before `create_mention_notifications` - Logic: fetches post owner, queries distinct previous commenters, excludes self and post owner, calls `create_notification` for each - Silencing handled automatically by `_deliver_notification` in `devplacepy/utils/notifications.py:103` - `NOTIFICATION_TYPES` at `devplacepy/database/notifications.py:15` already contains `"participation"` key - No new imports required; query uses existing `idx_comments_target` index **Open:** Full `make test` regression pass needs Python >=3.12 environment **Confidence:** high — compile and pyflakes both pass; minimal bounded addition following existing notification pattern; all preconditions verified before editing Typosaurus-Run: 33c1c53eb8d34b528ee5beab574476fb Typosaurus-Node: 67dfba8421ba47ea863bc2b87eb01cdd Typosaurus-Agent: @nadia Refs: #132 |
|||
| 101e3ebd93 |
feat(nadia): Register participation notification type
Outcome: done Changed: devplacepy/docs_api/groups/profiles.py:428 Verified by: `python3 -m py_compile` passed for both touched files. Full `make test` cannot run — Python 3.11.2 lacks the project's >=3.12 requirement, blocking `dataset` install. Findings: - `devplacepy/database/notifications.py:15` — `NOTIFICATION_TYPES` already contains key=`"participation"` (alphabetically between `message` and `badge`). - `devplacepy/docs_api/groups/profiles.py:428` — endpoint summary now lists `participation` (after `message`). - `devplacepy/docs_api/groups/profiles.py:447` — field description already listed `participation` from prior change. - `_NOTIFICATION_TYPE_KEYS` at notifications.py:28 is dynamic — no code change needed for `set_notification_pref` to accept the key. Open: Full `make test` regression pass needs Python >=3.12 environment. Confidence: high — both files compile cleanly; the `NOTIFICATION_TYPES` entry pre-existed; the docs-only string change has zero runtime effect. Typosaurus-Run: 33c1c53eb8d34b528ee5beab574476fb Typosaurus-Node: 3bee27ba793743d18ba15e7c83fdcb93 Typosaurus-Agent: @nadia Refs: #132 |