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 User = get_user_model() @pytest.fixture def user(db): u = User.objects.create_user( username="fasting", email="fasting@example.com", password="testpass" ) UserProfile.objects.get_or_create(user=u) return u @pytest.fixture def user_with_custom_thresholds(db): u = User.objects.create_user( username="custom", email="custom@example.com", password="testpass" ) u.profile.fasting_periodic_hours = 12 u.profile.fasting_full_hours = 20 u.profile.save() return u @pytest.fixture def food(user): return Food.objects.create(title="Test Food", base_run_time_seconds=1200) @pytest.fixture def drink(user): from drinks.models import Drink return Drink.objects.create( title="Test Drink", base_run_time_seconds=120, calories=50 ) @pytest.fixture def beer(user): from drinks.models import Beer, BeerStyle style = BeerStyle.objects.create(name="IPA") b = Beer.objects.create(title="Test Beer", base_run_time_seconds=120) b.styles.add(style) return b def make_food_scrobble(user, food, ts): return Scrobble.objects.create( user=user, food=food, media_type=Scrobble.MediaType.FOOD, timestamp=ts, played_to_completion=True, ) def make_drink_scrobble(user, drink, ts, media_type=Scrobble.MediaType.DRINK): kwargs = {"drink": drink} if media_type == Scrobble.MediaType.DRINK else {} if media_type == Scrobble.MediaType.BEER: kwargs = {"beer": drink} return Scrobble.objects.create( user=user, media_type=media_type, timestamp=ts, played_to_completion=True, **kwargs, )