You've already forked RekomenciBackend
230 lines
6.5 KiB
Python
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
|