Files

230 lines
6.5 KiB
Python

from datetime import UTC
from decimal import Decimal
from uuid import UUID, uuid4
from template_project.application.common.enums import EducationGrade, ExperienceType
from template_project.application.resume.entity import (
Resume,
ResumeEducation,
ResumeEmbedding,
ResumeExperience,
ResumeId,
ResumePrediction,
ResumeProject,
)
from template_project.application.user.entity import UserId
def test_resume_factory_creates_valid_resume() -> None:
user_id = UserId(uuid4())
resume = Resume.factory(
user_id=user_id,
position="Python Developer",
location="Moscow",
about_me="Experienced developer",
key_skills=["Python", "FastAPI"],
experience_type=ExperienceType.BETWEEN_3_AND_6,
)
assert isinstance(resume.id, UUID)
assert resume.user_id == user_id
assert resume.position == "Python Developer"
assert resume.location == "Moscow"
assert resume.about_me == "Experienced developer"
assert resume.key_skills == ["Python", "FastAPI"]
assert resume.experience_type == ExperienceType.BETWEEN_3_AND_6
assert resume.down_resume_id is None
assert resume.up_resume_id is None
assert resume.deleted_at is None
assert resume.created_at.tzinfo == UTC
def test_resume_factory_with_history_links() -> None:
user_id = UserId(uuid4())
old_resume_id = ResumeId(uuid4())
resume = Resume.factory(
user_id=user_id,
position="Python Developer",
location="Moscow",
about_me="Updated",
key_skills=["Python"],
experience_type=ExperienceType.BETWEEN_3_AND_6,
down_resume_id=old_resume_id,
)
assert resume.down_resume_id == old_resume_id
def test_resume_embedding_factory_creates_valid_embedding() -> None:
resume_id = ResumeId(uuid4())
vector = [0.1, 0.2, 0.3, 0.4, 0.5]
embedding = ResumeEmbedding.factory(
resume_id=resume_id,
vector=vector,
)
assert isinstance(embedding.id, UUID)
assert embedding.resume_id == resume_id
assert embedding.vector == vector
assert embedding.deleted_at is None
assert embedding.created_at.tzinfo == UTC
def test_resume_embedding_vector_dimension() -> None:
resume_id = ResumeId(uuid4())
vector = [0.1] * 384
embedding = ResumeEmbedding.factory(
resume_id=resume_id,
vector=vector,
)
assert len(embedding.vector) == 384
assert all(isinstance(x, float) for x in embedding.vector)
def test_resume_prediction_factory_creates_valid_prediction() -> None:
resume_id = ResumeId(uuid4())
prediction = ResumePrediction.factory(
resume_id=resume_id,
from_salary=Decimal(100000),
to_salary=Decimal(150000),
recommended_skills=["Kubernetes", "Docker"],
)
assert isinstance(prediction.id, UUID)
assert prediction.resume_id == resume_id
assert prediction.from_salary == Decimal(100000)
assert prediction.to_salary == Decimal(150000)
assert prediction.recommended_skills == ["Kubernetes", "Docker"]
assert prediction.deleted_at is None
assert prediction.created_at.tzinfo == UTC
def test_resume_prediction_salary_order() -> None:
resume_id = ResumeId(uuid4())
prediction = ResumePrediction.factory(
resume_id=resume_id,
from_salary=Decimal(100000),
to_salary=Decimal(150000),
recommended_skills=[],
)
assert prediction.from_salary <= prediction.to_salary
def test_resume_prediction_empty_recommended_skills() -> None:
resume_id = ResumeId(uuid4())
prediction = ResumePrediction.factory(
resume_id=resume_id,
from_salary=Decimal(100000),
to_salary=Decimal(150000),
recommended_skills=[],
)
assert prediction.recommended_skills == []
def test_resume_experience_positive_duration() -> None:
resume_id = ResumeId(uuid4())
experience = ResumeExperience.factory(
resume_id=resume_id,
place="Company",
description="Work",
months_duration=12,
)
assert experience.months_duration > 0
def test_resume_key_skills_empty_list() -> None:
user_id = UserId(uuid4())
resume = Resume.factory(
user_id=user_id,
position="Developer",
location="Moscow",
about_me="Test",
key_skills=[],
experience_type=ExperienceType.NO_EXPERIENCE,
)
assert resume.key_skills == []
def test_resume_experience_factory_creates_valid_experience() -> None:
resume_id = ResumeId(uuid4())
experience = ResumeExperience.factory(
resume_id=resume_id,
place="T-bank",
description="Backend development",
months_duration=24,
)
assert isinstance(experience.id, UUID)
assert experience.resume_id == resume_id
assert experience.place == "T-bank"
assert experience.description == "Backend development"
assert experience.months_duration == 24
assert experience.months_duration > 0
assert experience.deleted_at is None
assert experience.created_at.tzinfo == UTC
def test_resume_education_factory_creates_valid_education() -> None:
resume_id = ResumeId(uuid4())
education = ResumeEducation.factory(
resume_id=resume_id,
place="University",
grade=EducationGrade.BACHELOR,
specialization="Computer Science",
description="Optional description",
)
assert isinstance(education.id, UUID)
assert education.resume_id == resume_id
assert education.place == "University"
assert education.grade == EducationGrade.BACHELOR
assert education.specialization == "Computer Science"
assert education.description == "Optional description"
assert education.deleted_at is None
assert education.created_at.tzinfo == UTC
def test_resume_education_factory_without_description() -> None:
resume_id = ResumeId(uuid4())
education = ResumeEducation.factory(
resume_id=resume_id,
place="University",
grade=EducationGrade.MASTER,
specialization="Data Science",
)
assert education.description is None
def test_resume_project_factory_creates_valid_project() -> None:
resume_id = ResumeId(uuid4())
project = ResumeProject.factory(
resume_id=resume_id,
name="ML Service",
description="Machine learning service",
)
assert isinstance(project.id, UUID)
assert project.resume_id == resume_id
assert project.name == "ML Service"
assert project.description == "Machine learning service"
assert project.deleted_at is None
assert project.created_at.tzinfo == UTC