#!/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