fix(tests): fix fasting custom threshold tests using Django ORM cache

The user_with_custom_thresholds fixture used UserProfile.objects.get_or_create()
which returns a separate Python instance from the one cached in
user._state.fields_cache['profile']. When the fixture modified and saved
the get_or_create instance, the cached instance on the user object still
held default values (periodic=16, full=24). compute_fasting() accessed
u.profile which returned the stale cached object.

Fixed by modifying through u.profile directly, which operates on the
same cached instance. Also applied black formatting to fasting.py.
This commit is contained in:
2026-07-19 13:50:54 -04:00
parent 29fc493cc2
commit c21d6f5668
3 changed files with 4 additions and 10 deletions

View File

@ -1,7 +1,6 @@
import pytest
from django.contrib.auth import get_user_model
from django.utils import timezone
from foods.models import Food
from profiles.models import UserProfile
from scrobbles.models import Scrobble
@ -23,10 +22,9 @@ def user_with_custom_thresholds(db):
u = User.objects.create_user(
username="custom", email="custom@example.com", password="testpass"
)
profile, _ = UserProfile.objects.get_or_create(user=u)
profile.fasting_periodic_hours = 12
profile.fasting_full_hours = 20
profile.save()
u.profile.fasting_periodic_hours = 12
u.profile.fasting_full_hours = 20
u.profile.save()
return u

View File

@ -2,7 +2,6 @@ from datetime import timedelta
import time_machine
from django.utils import timezone
from drinks.models import Drink
from lifeevents.models import LifeEvent
from scrobbles.models import Scrobble

View File

@ -4,7 +4,6 @@ from django.db.models import Q
from django.utils import timezone
from scrobbles.models import Scrobble
DRINK_MEDIA_TYPES = [
Scrobble.MediaType.DRINK,
Scrobble.MediaType.BEER,
@ -68,9 +67,7 @@ def _classify_gap(gap_hours, periodic_hours, full_hours):
def _add_fasting_entry(fasting_by_date, day, entry, fasting_type):
existing = fasting_by_date.get(day)
if existing is None or (
fasting_type == "full" and existing["type"] == "periodic"
):
if existing is None or (fasting_type == "full" and existing["type"] == "periodic"):
fasting_by_date[day] = entry