Files
roboco/tests/unit/api/test_task_update_completeness.py
T

44 lines
1.4 KiB
Python
Raw Normal View History

2026-05-11 02:15:47 +02:00
"""TaskUpdate (PATCH /tasks/{id}) must reject blanking acceptance_criteria.
The Golden Rule "no task without acceptance criteria" applies to every
mutation, not just creation. Setting acceptance_criteria to [] or None
in a PATCH is a Golden Rule violation.
"""
from __future__ import annotations
import pytest
from pydantic import ValidationError
from roboco.api.schemas.tasks import TaskUpdate
def test_task_update_accepts_omitting_acceptance_criteria() -> None:
"""Omitting the field is fine — caller isn't touching it."""
upd = TaskUpdate(title="new title")
assert upd.acceptance_criteria is None
def test_task_update_accepts_replacing_acceptance_criteria_with_non_empty_list() -> (
None
):
upd = TaskUpdate(acceptance_criteria=["new criterion"])
assert upd.acceptance_criteria == ["new criterion"]
def test_task_update_rejects_empty_acceptance_criteria() -> None:
"""Empty list = "blank the criteria" = Golden Rule violation."""
with pytest.raises(ValidationError):
TaskUpdate(acceptance_criteria=[])
def test_task_update_rejects_explicit_none_when_present() -> None:
"""Pydantic differentiates omitted (default) from explicitly None."""
with pytest.raises(ValidationError):
TaskUpdate(**{"acceptance_criteria": None})
def test_task_update_rejects_short_description() -> None:
"""min_length applies on PATCH too."""
with pytest.raises(ValidationError):
TaskUpdate(description="x")