NODEDC_1C/tests/test_mappers.py

102 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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