Files
NODEDC_1C/tests/test_mappers.py
T
2026-03-26 10:38:25 +03:00

102 lines
4.1 KiB
Python

from __future__ import annotations
from canonical_layer.mappers import map_record
def _find_link(entity, source_field: str):
for link in entity.links:
if link.source_field == source_field:
return link
return None
def test_map_record_keeps_explicit_identity_and_links() -> None:
row = {
"Ref_Key": "11111111-2222-3333-4444-555555555555",
"Description": "Документ тест",
"Counterparty_Key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
}
entity = map_record("DocumentSales", row)
assert entity.source_id == "11111111-2222-3333-4444-555555555555"
assert entity.display_name == "Документ тест"
link = _find_link(entity, "Counterparty_Key")
assert link is not None
assert link.target_entity == "Counterparty"
assert link.relation == "document_has_counterparty"
def test_map_record_builds_composite_source_id_for_registers() -> None:
row = {
"Recorder": "12345678-1111-2222-3333-123456789abc",
"Recorder_Type": "StandardODATA.Document_РеализацияТоваровУслуг",
"LineNumber": "7",
"Period": "2020-06-01T00:00:00",
}
entity = map_record("AccumulationRegister_НДСЗаписиКнигиПродаж_RecordType", row)
assert entity.source_id.startswith("cmp:")
recorder_link = _find_link(entity, "Recorder")
assert recorder_link is not None
assert recorder_link.target_entity == "Document"
assert recorder_link.relation == "register_recorded_by_document"
def test_map_record_journal_ref_points_to_document() -> None:
row = {
"Ref": "22222222-3333-4444-5555-666666666666",
"Ref_Type": "StandardODATA.Document_СписаниеСРасчетногоСчета",
"Description": "Журнал банковских выписок",
}
entity = map_record("DocumentJournal_БанковскиеВыписки", row)
assert entity.source_id == "22222222-3333-4444-5555-666666666666"
ref_link = _find_link(entity, "Ref")
assert ref_link is not None
assert ref_link.target_entity == "Document"
assert ref_link.relation == "journal_refers_to_document"
def test_map_record_supplier_and_buyer_are_typed_counterparties() -> None:
row = {
"Recorder": "44444444-1111-2222-3333-abcdefabcdef",
"Recorder_Type": "StandardODATA.Document_ПоступлениеТоваровУслуг",
"Поставщик_Key": "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb",
"Покупатель_Key": "cccccccc-1111-2222-3333-dddddddddddd",
}
entity = map_record("AccumulationRegister_НДСПредъявленный_RecordType", row)
supplier = _find_link(entity, "Поставщик_Key")
buyer = _find_link(entity, "Покупатель_Key")
assert supplier is not None
assert buyer is not None
assert supplier.target_entity == "Counterparty"
assert buyer.target_entity == "Counterparty"
assert supplier.relation == "register_relates_to_supplier"
assert buyer.relation == "register_relates_to_buyer"
def test_map_record_invoice_not_misclassified_as_account() -> None:
row = {
"Recorder": "99999999-1111-2222-3333-eeeeeeeeeeee",
"Recorder_Type": "StandardODATA.Document_ФормированиеЗаписейКнигиПокупок",
"СчетФактура": "11111111-aaaa-bbbb-cccc-222222222222",
"СчетФактура_Type": "StandardODATA.Document_СчетФактураПолученный",
}
entity = map_record("AccumulationRegister_НДСЗаписиКнигиПокупок_RecordType", row)
invoice = _find_link(entity, "СчетФактура")
assert invoice is not None
assert invoice.target_entity == "InvoiceDocument"
assert invoice.relation == "register_relates_to_invoice"
def test_map_record_zero_guid_links_are_filtered_out() -> None:
row = {
"Ref_Key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"Counterparty_Key": "00000000-0000-0000-0000-000000000000",
}
entity = map_record("Document_РеализацияТоваровУслуг", row)
assert _find_link(entity, "Counterparty_Key") is None