Files
offline-db/users/tests/test_genre_savant_badge.py
1679d766c9 Fix badge system tests, validate_image_mimetype, and user bio migrations (#345)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Senpai-YoloBot <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-19 21:07:24 +00:00

50 lines
2.2 KiB
Python

from django.test import TestCase
from users.models import User, Badge, UserBadge, WatchLog
from content.models import Anime, Genre, Season, Episode
from users.services import check_badges
from django.utils import timezone
from django.core.cache import cache
class GenreSavantBadgeTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='password')
# Ensure badge exists (seeded via migration, but we can double check/create)
self.badge, _ = Badge.objects.get_or_create(slug='genre-savant', defaults={'name': 'Genre Savant'})
self.genre = Genre.objects.create(name='Action', slug='action')
self.anime = Anime.objects.create(title='Test Anime')
self.anime.genres.add(self.genre)
self.season = Season.objects.create(anime=self.anime, number=1)
self.episodes = []
for i in range(50):
self.episodes.append(Episode.objects.create(season=self.season, number=i+1, title=f'Ep {i+1}'))
def test_genre_savant_badge_awarded(self):
# Watch 49 episodes
for i in range(49):
WatchLog.objects.create(user=self.user, episode=self.episodes[i], duration=100)
from django.core.cache import cache
cache.delete(f'user_{self.user.id}_badges_checked')
from users.services import check_badges
check_badges(self.user)
self.assertFalse(UserBadge.objects.filter(user=self.user, badge=self.badge).exists())
# Clear the cache before triggering the 50th log to allow re-checking badges
cache.delete(f'user_{self.user.id}_badges_checked')
# Watch 50th episode
WatchLog.objects.create(user=self.user, episode=self.episodes[49], duration=100)
from django.core.cache import cache
cache.delete(f'user_{self.user.id}_badges_checked')
from users.services import check_badges
check_badges(self.user)
from django.core.cache import cache
cache.delete(f'user_{self.user.id}_badges_checked')
from users.services import check_badges
check_badges(self.user)
self.assertTrue(UserBadge.objects.filter(user=self.user, badge=self.badge).exists())