Files
contracts-flask/tests/test_grouping.py
T

84 lines
3.0 KiB
Python

"""Unit-тесты services/grouping.py — нормализация + группировка (mock db)."""
from services import grouping
class TestNormalizeNumber:
def test_basic(self):
assert grouping.normalize_number("МЭС-123-2024") == "МЭС1232024"
def test_spaces_slashes(self):
assert grouping.normalize_number("МЭС 123/2024") == "МЭС1232024"
def test_case(self):
assert grouping.normalize_number("мэс-123") == "МЭС123"
def test_empty(self):
assert grouping.normalize_number("") == ""
assert grouping.normalize_number(None) == ""
class _FakeDocs:
def __init__(self, docs):
self.docs = docs
def list_by_batch(self, batch_id):
return self.docs
class TestGroupDocuments:
def _doc(self, id, doc_type, own, parent, date, cp):
return {
"id": id, "filename": f"{id}.docx", "doc_type": doc_type,
"own_number": own, "parent_number": parent, "doc_date": date,
"counterparty": cp, "classify_status": "classified",
}
def test_contract_plus_supplement(self, monkeypatch):
docs = [
self._doc("d1", "contract", "03700_1", None, "2025-01-01", "ЗАО X"),
self._doc("d2", "supplement", "1", "03700_1", "2025-02-01", "ЗАО X"),
]
monkeypatch.setattr(grouping, "db_docs", _FakeDocs(docs))
r = grouping.group_documents("b1")
assert r["ok"] is True
assert r["total_docs"] == 2
groups = [g for g in r["groups"] if g["contract_number"] != "__unresolved__"]
assert len(groups) == 1
assert groups[0]["contract_number"] == "03700_1"
assert len(groups[0]["documents"]) == 2
def test_unmatched_goes_unresolved(self, monkeypatch):
docs = [self._doc("d1", "other", None, None, None, "")]
monkeypatch.setattr(grouping, "db_docs", _FakeDocs(docs))
r = grouping.group_documents("b1")
unresolved = [g for g in r["groups"] if g["contract_number"] == "__unresolved__"]
assert len(unresolved) == 1
class TestApplyGroups:
def test_apply(self, monkeypatch):
created = []
class FakeContracts:
def insert(self, number, client=""):
return {"id": f"c_{number}"}
class FakeSupps:
def insert(self, cid, did, stype):
created.append((cid, did, stype))
return {"id": "s"}
monkeypatch.setattr(grouping, "db_contracts", FakeContracts())
monkeypatch.setattr(grouping, "db_supplements", FakeSupps())
groups = [
{"contract_number": "03700_1", "counterparty": "X",
"documents": [{"id": "d1"}, {"id": "d2"}]},
{"contract_number": "__unresolved__", "counterparty": "",
"documents": [{"id": "d3"}]},
]
r = grouping.apply_groups("b1", groups)
assert r["ok"] is True
assert r["created"] == 2
assert created == [("c_03700_1", "d1", "initial"), ("c_03700_1", "d2", "additional")]