Files
shanxia2.0/backend/tests/test_pl_plan_draft_save.py
zlwuandCursor f28e82c1b3 feat(backend): add draft save helpers for plan follow status drafting
Introduce min-field validation and follow_status resolution for saveMode draft/formal.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-02 11:39:04 +08:00

59 lines
1.9 KiB
Python

import pytest
from fastapi import HTTPException
from app.services.pl_plan_service import (
DRAFTABLE_FOLLOW_STATUSES,
assert_can_save_as_draft,
resolve_follow_status_on_save,
validate_draft_min_fields,
)
def test_validate_draft_min_fields_requires_belongs_company():
with pytest.raises(HTTPException) as exc:
validate_draft_min_fields(belongs_company="", create_date=None)
assert exc.value.status_code == 422
assert "归属公司" in str(exc.value.detail)
def test_validate_draft_min_fields_allows_missing_create_date():
validate_draft_min_fields(belongs_company="shanxia", create_date=None)
def test_resolve_follow_status_draft_always_drafting():
assert (
resolve_follow_status_on_save(
save_mode="draft", current="pending_arrange", is_create=False
)
== "drafting"
)
assert resolve_follow_status_on_save(save_mode="draft", current=None, is_create=True) == "drafting"
def test_resolve_follow_status_formal_promotes_drafting():
assert (
resolve_follow_status_on_save(save_mode="formal", current=None, is_create=True)
== "pending_arrange"
)
assert (
resolve_follow_status_on_save(save_mode="formal", current="drafting", is_create=False)
== "pending_arrange"
)
assert (
resolve_follow_status_on_save(save_mode="formal", current="arranged", is_create=False)
== "arranged"
)
assert (
resolve_follow_status_on_save(save_mode="formal", current="wait_notice", is_create=False)
== "wait_notice"
)
def test_assert_can_save_as_draft_rejects_arranged():
assert "drafting" in DRAFTABLE_FOLLOW_STATUSES
assert "pending_arrange" in DRAFTABLE_FOLLOW_STATUSES
with pytest.raises(HTTPException) as exc:
assert_can_save_as_draft("arranged")
assert exc.value.status_code == 400
assert "不可暂存" in str(exc.value.detail)