Skip to content

Commit

Permalink
test(profiles): add serializer tests for profiles app
Browse files Browse the repository at this point in the history
  • Loading branch information
tyronejosee committed Nov 27, 2024
1 parent a9a5de0 commit 4b6a6e9
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 9 deletions.
2 changes: 1 addition & 1 deletion apps/profiles/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
13 changes: 5 additions & 8 deletions apps/profiles/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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)))
82 changes: 82 additions & 0 deletions apps/profiles/tests/test_serializers.py
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 4b6a6e9

Please sign in to comment.