From 7e54f858d3764d07bb17a2c3c737e8e1fd7af21b Mon Sep 17 00:00:00 2001 From: TLSM Date: Wed, 15 Jun 2022 16:29:25 -0400 Subject: [PATCH] Amend f8ae2a3d17c6: revert >= logic, fail loudly. First, the apparent errors with >= 9 and 99 in the Marseys and referrals code after the refactor are not actually bugs: they were bug fixes mixed in with the refactor to fix an off-by-one. Next, instead of failing silently on the `not user` branch in badge_grant, we throw a ValueError. This retains the current behavior where users get 500s to report while also enforcing the assertion near the edge of the function. --- files/helpers/actions.py | 4 +++- files/routes/comments.py | 3 ++- files/routes/login.py | 5 +++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/files/helpers/actions.py b/files/helpers/actions.py index 0cd7f10e1..b159b5449 100644 --- a/files/helpers/actions.py +++ b/files/helpers/actions.py @@ -3,7 +3,9 @@ from files.classes.badges import Badge from files.helpers.alerts import send_repeatable_notification def badge_grant(user, badge_id, description=None, url=None): - if not user or user.has_badge(badge_id): + if not user: + raise ValueError('badge_grant: expected user, not None') + if user.has_badge(badge_id): return badge = Badge( diff --git a/files/routes/comments.py b/files/routes/comments.py index 3d6d05493..82ab29cb5 100644 --- a/files/routes/comments.py +++ b/files/routes/comments.py @@ -279,7 +279,8 @@ def api_comment(v): all_by_author = g.db.query(Marsey).filter_by(author_id=user.id).count() - if all_by_author >= 10: + # off-by-one: newly added marsey isn't counted + if all_by_author >= 9: badge_grant(badge_id=16, user=user) else: badge_grant(badge_id=17, user=user) diff --git a/files/routes/login.py b/files/routes/login.py index 03c12c2a9..e69c63cbd 100644 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -338,9 +338,10 @@ def sign_up_post(v): if ref_user: badge_grant(user=ref_user, badge_id=10) - if ref_user.referral_count >= 10: + # off-by-one: newly referred user isn't counted + if ref_user.referral_count >= 9: badge_grant(user=ref_user, badge_id=11) - if ref_user.referral_count >= 100: + if ref_user.referral_count >= 99: badge_grant(user=ref_user, badge_id=12) if email: