Files
dxfmakros/tests/test_export_sivas_omniflo.py

130 lines
4.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
test_export_sivas_omniflo.py - Omniflo-Zeilen im Sivas-Export.
Laeuft komplett ohne BricsCAD (reine Python-Logik).
Omniflo-Elemente werden ueber das TEILEART-Attribut erkannt, ihre Sivas-
Nummern kommen - wie beim Geruest - ausschliesslich aus dem ARTINR-Attribut
(kommagetrennt, TEF-Teile dort bereits aufgeloest). Kein Katalog-Lookup.
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "lib"))
import export_sivas # noqa: E402
def _block(block_name, teileid, teileart=None, artinr=None, **extra):
attribs = {"ID": teileid}
if teileart is not None:
attribs["TEILEART"] = teileart
if artinr is not None:
attribs["ARTINR"] = artinr
attribs.update(extra)
return {"block_name": block_name, "x": 0.0, "y": 0.0, "z": 0.0,
"rotation": 0.0, "attribs": attribs}
def _zeilen(blocks):
items, _ = export_sivas.process_blocks(blocks)
return {it["sivasnr"]: it for it in items}
def test_einfache_teile_je_nummer_eine_zeile():
zeilen = _zeilen([
_block("834372027", "0001", "Omniflo Einzelweiche", "834372027"),
_block("834372027", "0002", "Omniflo Einzelweiche", "834372027"),
_block("821104033", "0003", "Omniflo Bogen", "821104033"),
])
assert zeilen["834372027"]["teileart"] == "Omniflo Einzelweiche"
assert zeilen["834372027"]["anzahl"] == 2
assert zeilen["834372027"]["ids"] == ["0001", "0002"]
assert zeilen["821104033"]["teileart"] == "Omniflo Bogen"
assert zeilen["821104033"]["anzahl"] == 1
def test_mehrteilige_weiche_mit_tef():
zeilen = _zeilen([
_block("834372002+0_BG090090", "0010", "Omniflo Einzelweiche",
"834372002, 0_B10090, 0_B10090"),
])
assert zeilen["834372002"]["anzahl"] == 1
assert zeilen["834372002"]["ids"] == ["0010.t1"]
assert zeilen["0_B10090"]["teileart"] == "Omniflo TEF"
assert zeilen["0_B10090"]["anzahl"] == 2
assert zeilen["0_B10090"]["ids"] == ["0010.t2", "0010.t3"]
def test_tef_teil_aus_bogen_und_weiche_in_einer_zeile():
items, _ = export_sivas.process_blocks([
_block("821104025+0_B10090", "0020", "Omniflo Bogen", "821104025, 0_B10090"),
_block("834372002+0_BG090090", "0021", "Omniflo Einzelweiche",
"834372002, 0_B10090, 0_B10090"),
])
tef = [it for it in items if it["sivasnr"] == "0_B10090"]
assert len(tef) == 1
assert tef[0]["anzahl"] == 3
def test_ladeschleife_wird_exportiert():
zeilen = _zeilen([
_block("824331125", "0030", "Omniflo Ladeschleife", "824331125"),
])
assert zeilen["824331125"]["teileart"] == "Omniflo Ladeschleife"
def test_omniflo_ohne_artinr_warnt_und_fehlt(capsys):
items, _ = export_sivas.process_blocks([
_block("834372027", "0040", "Omniflo Einzelweiche", ""),
])
assert items == []
assert "ohne ARTINR" in capsys.readouterr().err
def test_block_ohne_teileart_wird_ignoriert():
items, _ = export_sivas.process_blocks([
_block("Scanner", "0050", artinr=""),
_block("827064041", "0051", artinr="827064041"),
])
assert items == []
def test_geruest_unveraendert():
zeilen = _zeilen([
_block("GR_Saeulen_20260928112449", "0060", "Geruest Saeule 2 Zoll",
"821006051,821004201,825002022,825002022", LAENGE="2500"),
])
assert zeilen["825002022"]["anzahl"] == 2
assert zeilen["825002022"]["teileart"] == "Geruest Saeule 2 Zoll"
assert zeilen["825002022"]["ids"] == ["0060"]
assert zeilen["825002022"]["dispgruppe"] == 20
# Ohne TEILEFARBE kein Farb-Merkmal
assert zeilen["825002022"]["details"] == {}
def test_geruest_teilefarbe_je_artikelnummer():
zeilen = _zeilen([
_block("GR_Saeulen_20260929100000", "0061", "Geruest Saeule 2 Zoll",
"821006051,821004201,825002022,825002022",
TEILEFARBE=",RAL7030,RAL7030,RAL7030"),
])
merkmal = export_sivas.MERKMAL_TEILEFARBE
assert merkmal == "108"
assert zeilen["821006051"]["details"] == {}
assert zeilen["821004201"]["details"] == {merkmal: "RAL7030"}
assert zeilen["825002022"]["details"] == {merkmal: "RAL7030"}
assert zeilen["825002022"]["anzahl"] == 2
def test_geruest_teilefarbe_laenge_passt_nicht(capsys):
zeilen = _zeilen([
_block("GR_Saeulen_20260929100001", "0062", "Geruest Saeule 2 Zoll",
"821006051,821004201", TEILEFARBE="RAL7030"),
])
assert zeilen["821006051"]["details"] == {}
assert zeilen["821004201"]["details"] == {}
assert "TEILEFARBE" in capsys.readouterr().err