test_biz_no_generator.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """biz_no_generator 单元测试"""
  2. import unittest
  3. from unittest.mock import MagicMock
  4. from app.crud.biz_no_generator import (
  5. MAX_SEQ,
  6. PREFIX_COLLECTION,
  7. PREFIX_DONATION,
  8. _format_biz_no,
  9. _prefix_for,
  10. )
  11. class TestBizNoGenerator(unittest.TestCase):
  12. def test_prefix_for(self):
  13. self.assertEqual(_prefix_for("collection"), PREFIX_COLLECTION)
  14. self.assertEqual(_prefix_for("donation"), PREFIX_DONATION)
  15. def test_format_biz_no(self):
  16. self.assertEqual(_format_biz_no("XBCC", "20260527", 1), "XBCC20260527000001")
  17. self.assertEqual(_format_biz_no("JZCC", "20260527", 42), "JZCC20260527000042")
  18. def test_max_seq(self):
  19. self.assertEqual(MAX_SEQ, 999999)
  20. class TestAllocateNextBizNo(unittest.TestCase):
  21. def test_allocate_raises_when_seq_exhausted(self):
  22. from app.crud import biz_no_generator as gen
  23. db = MagicMock()
  24. db.execute.side_effect = [
  25. None,
  26. MagicMock(scalar=lambda: MAX_SEQ + 1),
  27. ]
  28. with self.assertRaises(ValueError) as ctx:
  29. gen.allocate_next_biz_no(db, tenant_no="zkxw", kind="collection")
  30. self.assertIn("序号已用尽", str(ctx.exception))
  31. if __name__ == "__main__":
  32. unittest.main()