animetix-web / tests /backend /test_models.py
MissawB's picture
Upload folder using huggingface_hub (part 6)
4e19890 verified
Raw
History Blame Contribute Delete
3.81 kB
import pytest
from adapters.persistence.django_profile_adapter import DjangoProfileAdapter
from animetix.models import Profile
from core.domain.entities.user import UserProfile
from django.contrib.auth.models import User
@pytest.mark.django_db
class TestProfileModel:
def test_profile_tier_defaults_to_free(self):
user = User.objects.create_user(username="testuser")
# Profile is created via signal
assert user.profile.tier == "free"
def test_profile_api_key_is_none_by_default(self):
user = User.objects.create_user(username="testuser_key")
assert user.profile.api_key_hash is None
def test_profile_api_key_hashing(self):
user = User.objects.create_user(username="testuser_hash")
user.profile.set_api_key("my-secret-key")
user.profile.save()
assert user.profile.api_key_hash is not None
assert user.profile.api_key_hash != "my-secret-key"
assert user.profile.check_api_key("my-secret-key") is True
assert user.profile.check_api_key("wrong-key") is False
def test_profile_tier_choices(self):
user = User.objects.create_user(username="testuser_choices")
user.profile.tier = "premium"
user.profile.save()
# Reload from DB
profile = Profile.objects.get(id=user.profile.id)
assert profile.tier == "premium"
profile.tier = "pro"
profile.save()
assert Profile.objects.get(id=user.profile.id).tier == "pro"
def test_profile_api_key_uniqueness(self):
user1 = User.objects.create_user(username="user1")
user1.profile.api_key_hash = "same_hash_123"
user1.profile.save()
user2 = User.objects.create_user(username="user2")
user2.profile.api_key_hash = "same_hash_123"
from django.db import IntegrityError # noqa: E402
with pytest.raises(IntegrityError):
user2.profile.save()
@pytest.mark.django_db
class TestDjangoProfileAdapter:
def test_to_domain_mapping(self):
user = User.objects.create_user(username="adapter_user")
profile = user.profile
profile.xp = 100
profile.tier = "premium"
profile.set_api_key("test_api_key")
profile.save()
domain_profile = DjangoProfileAdapter.to_domain(profile)
assert isinstance(domain_profile, UserProfile)
assert domain_profile.username == "adapter_user"
assert domain_profile.xp == 100
assert domain_profile.tier == "premium"
# In domain, api_key now holds the hash when coming from DB
assert domain_profile.api_key == profile.api_key_hash
def test_update_django_mapping(self):
user = User.objects.create_user(username="update_user")
profile = user.profile
domain_profile = UserProfile(
id=user.id, username="update_user", xp=500, tier="pro", api_key="new_key"
)
DjangoProfileAdapter.update_django(profile, domain_profile)
# Reload from DB
updated_profile = Profile.objects.get(id=profile.id)
assert updated_profile.xp == 500
assert updated_profile.tier == "pro"
assert updated_profile.check_api_key("new_key") is True
@pytest.mark.django_db
def test_user_recommendation_creation():
from animetix.models import MediaItem, UserRecommendation # noqa: E402
user = User.objects.create_user(username="rec_tester", password="pwd")
media = MediaItem.objects.create(
external_id="123", media_type="Anime", title="Death Note"
)
rec = UserRecommendation.objects.create(
user=user, media_item=media, score=4.85, rank=1
)
assert rec.id is not None
assert rec.score == 4.85
assert rec.rank == 1
assert str(rec) == "Rec for rec_tester: Death Note (Rank 1)"