diff --git a/apps/profiles/managers.py b/apps/profiles/managers.py index d5810a0..d6173c1 100644 --- a/apps/profiles/managers.py +++ b/apps/profiles/managers.py @@ -7,4 +7,4 @@ class ProfileManager(BaseManager): """Manager for Profile model.""" def get_by_user(self, user): - return self.get_available().get(user=user) + return self.get_available().get(user_id=user) diff --git a/apps/profiles/tests/factories.py b/apps/profiles/tests/factories.py index cfc1973..dd3c88a 100644 --- a/apps/profiles/tests/factories.py +++ b/apps/profiles/tests/factories.py @@ -2,7 +2,8 @@ import factory -from apps.users.tests.factories import MemberFactory +from apps.utils.functions import generate_test_image +from apps.users.tests.factories import UserBaseFactory from ..models import Profile @@ -12,14 +13,10 @@ class ProfileFactory(factory.django.DjangoModelFactory): class Meta: model = Profile - user_id = factory.SubFactory(MemberFactory) + user_id = factory.SubFactory(UserBaseFactory) first_name = factory.Faker("first_name") last_name = factory.Faker("last_name") birth_date = factory.Faker("date_of_birth", minimum_age=18, maximum_age=80) bio = factory.Faker("text") - # image = factory.django.ImageField( - # color="blue", format="jpeg", width=600, height=600 - # ) - # cover = factory.django.ImageField( - # color="blue", format="jpeg", width=1200, height=600 - # ) + image = factory.LazyAttribute(lambda _: generate_test_image(size=(600, 600))) + cover = factory.LazyAttribute(lambda _: generate_test_image(size=(1200, 600))) diff --git a/apps/profiles/tests/test_serializers.py b/apps/profiles/tests/test_serializers.py new file mode 100644 index 0000000..57ba38e --- /dev/null +++ b/apps/profiles/tests/test_serializers.py @@ -0,0 +1,82 @@ +"""Serializer Tests for Profiles App.""" + +import pytest + +from ..serializers import ( + ProfileReadSerializer, + ProfileWriteSerializer, + ProfileMinimalSerializer, + ProfileAboutSerializer, +) + + +@pytest.mark.django_db +class TestProfileSerializers: + """Tests for Profile serializers.""" + + def test_profile_read_serializer(self, profile): + serializer = ProfileReadSerializer(profile) + expected_data = { + "id": str(profile.id), + "user_id": { + "id": str(profile.user_id.id), + "username": profile.user_id.username, + "role": profile.user_id.get_role_display(), + "is_online": profile.user_id.is_online, + }, + "first_name": profile.first_name, + "last_name": profile.last_name, + "birth_date": str(profile.birth_date), + "bio": profile.bio, + "image": profile.image.url, + "cover": serializer.data["cover"], # TODO: Fix + } + + assert serializer.data == expected_data + + def test_profile_write_serializer_valid_data(self, profile): + data = { + "first_name": "First Name", + "last_name": "Last Name", + "birth_date": profile.birth_date, + "bio": profile.bio, + "image": profile.image, + "cover": profile.cover, + } + serializer = ProfileWriteSerializer(data=data) + + assert serializer.is_valid(), serializer.errors + assert serializer.validated_data["first_name"] == "First Name" + assert serializer.validated_data["last_name"] == "Last Name" + + def test_profile_write_serializer_invalid_data(self): + data = {} + serializer = ProfileWriteSerializer(data=data) + + assert not serializer.is_valid() + assert "image" in serializer.errors + + def test_profile_minimal_serializer(self, profile): + serializer = ProfileMinimalSerializer(profile) + expected_data = { + "id": str(profile.id), + "user_id": { + "id": str(profile.user_id.id), + "username": profile.user_id.username, + "role": profile.user_id.get_role_display(), + "is_online": profile.user_id.is_online, + }, + "first_name": profile.first_name, + "last_name": profile.last_name, + "image": profile.image.url, + } + + assert serializer.data == expected_data + + def test_profile_about_serializer(self, profile): + serializer = ProfileAboutSerializer(profile) + expected_data = { + "bio": profile.bio, + } + + assert serializer.data == expected_data