36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from apps.jobs.models import Feedback
|
|
from apps.jobs.services.feedback import record_feedback
|
|
|
|
|
|
def test_learning_signals_wait_for_min_samples(profile, job, user):
|
|
first = record_feedback(user=user, job=job, action=Feedback.Action.INTERESTING)
|
|
second = record_feedback(user=user, job=job, action=Feedback.Action.INTERESTING)
|
|
|
|
first_metadata = first.metadata.get("learning", {})
|
|
second_metadata = second.metadata.get("learning", {})
|
|
assert first_metadata.get("status") == "queued"
|
|
assert first_metadata.get("reason_code") == "positive_feedback"
|
|
assert second_metadata.get("status") == "applied"
|
|
profile.refresh_from_db()
|
|
assert profile.weights["content"] == 26.0
|
|
|
|
|
|
def test_learning_skip_for_implicit_hide(profile, job, user):
|
|
feedback = record_feedback(user=user, job=job, action=Feedback.Action.HIDE)
|
|
metadata = feedback.metadata.get("learning", {})
|
|
assert metadata["status"] == "queued"
|
|
assert metadata["reason_code"] == "implicit_hide_no_reason"
|
|
profile.refresh_from_db()
|
|
assert profile.weights["content"] == 25.0
|
|
|
|
|
|
def test_learning_marks_explicit_title_hide_as_nonlearning(profile, job, user):
|
|
feedback = record_feedback(
|
|
user=user, job=job, action=Feedback.Action.HIDE, reason="Titel past niet bij mij"
|
|
)
|
|
metadata = feedback.metadata.get("learning", {})
|
|
assert metadata["status"] == "queued"
|
|
assert metadata["reason_code"] == "non_learning_title"
|