mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
"""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")
|