test_pl_plan_draft_save.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import pytest
  2. from fastapi import HTTPException
  3. from app.services.pl_plan_service import (
  4. DRAFTABLE_FOLLOW_STATUSES,
  5. assert_can_save_as_draft,
  6. resolve_follow_status_on_save,
  7. validate_draft_min_fields,
  8. )
  9. def test_validate_draft_min_fields_requires_belongs_company():
  10. with pytest.raises(HTTPException) as exc:
  11. validate_draft_min_fields(belongs_company="", create_date=None)
  12. assert exc.value.status_code == 422
  13. assert "归属公司" in str(exc.value.detail)
  14. def test_validate_draft_min_fields_allows_missing_create_date():
  15. validate_draft_min_fields(belongs_company="shanxia", create_date=None)
  16. def test_resolve_follow_status_draft_always_drafting():
  17. assert (
  18. resolve_follow_status_on_save(
  19. save_mode="draft", current="pending_arrange", is_create=False
  20. )
  21. == "drafting"
  22. )
  23. assert resolve_follow_status_on_save(save_mode="draft", current=None, is_create=True) == "drafting"
  24. def test_resolve_follow_status_formal_promotes_drafting():
  25. assert (
  26. resolve_follow_status_on_save(save_mode="formal", current=None, is_create=True)
  27. == "pending_arrange"
  28. )
  29. assert (
  30. resolve_follow_status_on_save(save_mode="formal", current="drafting", is_create=False)
  31. == "pending_arrange"
  32. )
  33. assert (
  34. resolve_follow_status_on_save(save_mode="formal", current="arranged", is_create=False)
  35. == "arranged"
  36. )
  37. assert (
  38. resolve_follow_status_on_save(save_mode="formal", current="wait_notice", is_create=False)
  39. == "wait_notice"
  40. )
  41. def test_assert_can_save_as_draft_rejects_arranged():
  42. assert "drafting" in DRAFTABLE_FOLLOW_STATUSES
  43. assert "pending_arrange" in DRAFTABLE_FOLLOW_STATUSES
  44. with pytest.raises(HTTPException) as exc:
  45. assert_can_save_as_draft("arranged")
  46. assert exc.value.status_code == 400
  47. assert "不可暂存" in str(exc.value.detail)