Files
resume-agent/backend/tests/test_resume_models.py
T

56 lines
1.8 KiB
Python

"""Contract tests for resume editing API request and response models."""
from datetime import UTC, datetime
import pytest
from pydantic import ValidationError
from app.models import (
ActionResponse,
BusinessResume,
OptimizeEntryRequest,
OptimizeRequest,
ResumePatchOperation,
ResumePatchRequest,
TimelineResponse,
)
def test_resume_patch_request_validates_revision_and_extra_fields() -> None:
request = ResumePatchRequest(
expected_revision=2,
operation={"type": "update_entry", "entry_id": "entry_1", "fields": {"major": "AI"}},
)
assert request.operation.type == "update_entry"
with pytest.raises(ValidationError):
ResumePatchRequest(
expected_revision=0,
operation={"type": "delete_entry", "entry_id": "entry_1"},
)
with pytest.raises(ValidationError):
ResumePatchOperation(type="delete_entry", entry_id="entry_1", unexpected=True)
def test_optimize_requests_require_entry_id() -> None:
assert OptimizeRequest(entry_id="entry_1", instruction="更量化").entry_id == "entry_1"
assert OptimizeEntryRequest(entry_id="entry_1").entry_id == "entry_1"
with pytest.raises(ValidationError):
OptimizeRequest(entry_id="")
def test_action_and_timeline_responses_expose_optional_resume_field() -> None:
assert "resume" in ActionResponse.model_fields
assert "resume" in TimelineResponse.model_fields
assert ActionResponse.model_fields["resume"].default is None
assert TimelineResponse.model_fields["resume"].default is None
now = datetime.now(UTC)
resume = BusinessResume(
id="resume_1",
session_id="session_1",
revision=1,
content={"schema_version": 2},
created_at=now,
updated_at=now,
)
assert resume.content["schema_version"] == 2