Pyteryx/alteryx_runner/tests/test_parser.py

90 lines
3.0 KiB
Python

"""Tests for the XML parser."""
from __future__ import annotations
import sys
import textwrap
from pathlib import Path
import pytest
PKG = Path(__file__).parent.parent # alteryx_runner/
if str(PKG) not in sys.path:
sys.path.insert(0, str(PKG))
from engine.parser import parse_workflow
def _write_yxmd(tmp_path: Path, body: str) -> Path:
content = f'<AlteryxDocument yxmdVer="2022.1">{body}<Properties/></AlteryxDocument>'
p = tmp_path / "test.yxmd"
p.write_text(content)
return p
class TestParser:
def test_simple_nodes(self, tmp_path):
body = textwrap.dedent("""\
<Nodes>
<Node ToolID="1">
<GuiSettings Plugin="AlteryxBasePluginsGui.TextInput.TextInput">
<Position x="0" y="0"/>
</GuiSettings>
<Properties><Configuration/></Properties>
</Node>
<Node ToolID="2">
<GuiSettings Plugin="AlteryxBasePluginsGui.Filter.Filter">
<Position x="100" y="0"/>
</GuiSettings>
<Properties><Configuration><Expression>True</Expression></Configuration></Properties>
</Node>
</Nodes>
<Connections>
<Connection>
<Origin ToolID="1" Connection="Output"/>
<Destination ToolID="2" Connection="Input"/>
</Connection>
</Connections>
""")
path = _write_yxmd(tmp_path, body)
graph = parse_workflow(str(path))
assert 1 in graph.nodes
assert 2 in graph.nodes
assert len(graph.connections) == 1
assert graph.connections[0].origin_id == 1
assert graph.connections[0].dest_id == 2
def test_wireless_connection(self, tmp_path):
body = textwrap.dedent("""\
<Nodes>
<Node ToolID="10">
<GuiSettings Plugin="AlteryxBasePluginsGui.TextInput.TextInput">
<Position x="0" y="0"/>
</GuiSettings>
<Properties><Configuration/></Properties>
</Node>
</Nodes>
<Connections>
<Connection Wireless="True">
<Origin ToolID="10" Connection="Output"/>
<Destination ToolID="20" Connection="Input"/>
</Connection>
</Connections>
""")
path = _write_yxmd(tmp_path, body)
graph = parse_workflow(str(path))
assert graph.connections[0].wireless is True
def test_node_position(self, tmp_path):
body = textwrap.dedent("""\
<Nodes>
<Node ToolID="5">
<GuiSettings Plugin="AlteryxBasePluginsGui.Sort.Sort">
<Position x="42" y="99"/>
</GuiSettings>
<Properties><Configuration/></Properties>
</Node>
</Nodes>
<Connections/>
""")
path = _write_yxmd(tmp_path, body)
graph = parse_workflow(str(path))
assert graph.nodes[5].position == (42, 99)