mirror of
https://github.com/barkeser2002/offline-db.git
synced 2026-09-25 02:19:59 +03:00
* test: achieve 100% coverage for badge system and resolve db IDOR Co-authored-by: barkeser2002 <45911502+barkeser2002@users.noreply.github.com> * fix: include legacy ChatMessage stats in chat badge checks Co-authored-by: barkeser2002 <45911502+barkeser2002@users.noreply.github.com> --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
from django.test import TestCase
|
|
from users.models import User, Badge, UserBadge
|
|
from content.models import Anime, Season, Episode, VideoFile
|
|
from users.services import check_badges
|
|
|
|
class ContentCreatorBadgeTest(TestCase):
|
|
def setUp(self):
|
|
self.user = User.objects.create_user(username='uploader', password='password')
|
|
|
|
# Badge should be seeded by migration, but in tests we ensure it exists
|
|
self.badge, _ = Badge.objects.get_or_create(
|
|
slug='content-creator',
|
|
defaults={'name': 'Content Creator', 'description': 'Uploaded 5 videos.'}
|
|
)
|
|
|
|
self.anime = Anime.objects.create(title='Test Anime')
|
|
self.season = Season.objects.create(anime=self.anime, number=1)
|
|
self.episode = Episode.objects.create(season=self.season, number=1, title="Ep 1")
|
|
|
|
def test_content_creator_badge(self):
|
|
from django.core.cache import cache
|
|
cache.clear()
|
|
|
|
# Upload 4 videos
|
|
for i in range(4):
|
|
VideoFile.objects.create(
|
|
episode=self.episode,
|
|
uploader=self.user,
|
|
quality='1080p',
|
|
hls_path=f'path/to/video_{i}.m3u8',
|
|
encryption_key=f'key_{i}'
|
|
)
|
|
cache.delete(f'user_{self.user.id}_badges_checked')
|
|
|
|
# Verify no badge yet
|
|
# check_badges is called via signal, so we can verify directly
|
|
self.assertFalse(UserBadge.objects.filter(user=self.user, badge=self.badge).exists())
|
|
|
|
# Upload 5th video
|
|
VideoFile.objects.create(
|
|
episode=self.episode,
|
|
uploader=self.user,
|
|
quality='1080p',
|
|
hls_path='path/to/video_5.m3u8',
|
|
encryption_key='key_5'
|
|
)
|
|
cache.delete(f'user_{self.user.id}_badges_checked')
|
|
|
|
# Verify badge awarded
|
|
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())
|