Files
VacatureRadar/tests/unit/test_profiles.py
T
Jens b8091e59bd
deploy / deploy (push) Canceled after 0s
Initial deploy setup
2026-07-21 14:00:00 +02:00

72 lines
2.2 KiB
Python

from decimal import Decimal
import pytest
from django.core.exceptions import ValidationError
from apps.profiles.models import ProfileRevision, SearchProfile
from apps.profiles.services import apply_feedback_delta, save_profile_revision
@pytest.mark.django_db
def test_profile_validation_snapshot_activation_and_revisions(user, profile):
profile.full_clean()
snapshot = profile.snapshot()
assert snapshot["home_municipality"] == "Hasselt"
assert snapshot["home_latitude"] == pytest.approx(50.9307)
other = SearchProfile.objects.create(user=user, name="Tweede", is_active=False)
other.activate()
profile.refresh_from_db()
other.refresh_from_db()
assert other.is_active is True
assert profile.is_active is False
revision = save_profile_revision(other, reason="test")
assert revision.version == 1
assert ProfileRevision.objects.filter(profile=other).count() == 1
second = save_profile_revision(other, reason="test-2")
assert second.version == 2
other.refresh_from_db()
assert other.version == 2
@pytest.mark.django_db
def test_feedback_delta_is_bounded_and_can_be_disabled(profile):
apply_feedback_delta(profile, "content", 100)
profile.refresh_from_db()
assert profile.weights["content"] == 40.0
apply_feedback_delta(profile, "content", -100)
profile.refresh_from_db()
assert profile.weights["content"] == 0.0
profile.learning_enabled = False
profile.weights["skills"] = 20.0
profile.save()
apply_feedback_delta(profile, "skills", 5)
profile.refresh_from_db()
assert profile.weights["skills"] == 20.0
@pytest.mark.parametrize(
("field", "value"),
[
("weights", {"content": "not-a-number"}),
("weights", {"content": -1}),
("home_latitude", Decimal("91")),
("home_longitude", Decimal("181")),
],
)
@pytest.mark.django_db
def test_profile_rejects_invalid_values(profile, field, value):
setattr(profile, field, value)
with pytest.raises(ValidationError):
profile.full_clean()
@pytest.mark.django_db
def test_profile_rejects_inverted_thresholds(profile):
profile.recommendation_threshold = 91
profile.top_match_threshold = 90
with pytest.raises(ValidationError):
profile.full_clean()