Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions language/dsl/python/src/__tests__/test_auto_id.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,14 +83,14 @@ def test_asset_with_explicit_id(self):
assert asset.id == "my_custom_id"

def test_asset_with_explicit_id_in_slot(self):
"""Test that explicit ID is overridden when asset is placed in a slot"""
"""Test that explicit ID isn't overridden when asset is placed in a slot"""
parent = Collection(id="parent")
child = Text(id="explicit_id")

parent.withContent(child)

# The ID should be regenerated based on parent context
assert child.id == "parent-content-text"
assert child.id == "explicit_id"


def test_single_child_without_parent_id(self):
Expand Down Expand Up @@ -417,7 +417,7 @@ def test_mixed_explicit_and_auto_ids(self):
"""Test mixing explicit and auto-generated IDs in hierarchy"""
root = Collection(id="root")
middle = Collection() # Auto-generated
leaf1 = Text(id="explicit_leaf") # Will be overridden
leaf1 = Text(id="explicit_leaf") # Explicit
leaf2 = Action() # Auto-generated

root.withContent(middle)
Expand All @@ -426,7 +426,8 @@ def test_mixed_explicit_and_auto_ids(self):
assert root.id == "root"
assert middle.id == "root-content-collection"
# Even though leaf1 had explicit ID, it gets overridden
assert leaf1.id == "root-content-collection-items-0-text"
assert leaf1.id == "explicit_leaf"
assert leaf2.id == "root-content-collection-items-1-action"



32 changes: 16 additions & 16 deletions language/dsl/python/src/__tests__/test_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class TestFlow:

def test_instantiation_minimal(self):
"""Test Flow can be instantiated with minimal required parameters"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test_flow", navigation=navigation)
assert flow is not None
assert flow.id == "test_flow"
Expand All @@ -92,7 +92,7 @@ def test_instantiation_minimal(self):

def test_instantiation_full(self):
"""Test Flow can be instantiated with all parameters"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
views = [View(id="view1", type="text")]
schema = Schema(root=SchemaNode())
data = {"initial": "data"}
Expand All @@ -116,79 +116,79 @@ def test_instantiation_full(self):

def test_id_property_getter(self):
"""Test id property getter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test_id", navigation=navigation)
assert flow.id == "test_id"

def test_id_property_setter(self):
"""Test id property setter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="initial_id", navigation=navigation)
flow.id = "new_id"
assert flow.id == "new_id"

def test_views_property_getter(self):
"""Test views property getter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
views = [View(id="view1", type="text"), View(id="view2", type="input")]
flow = Flow(id="test", navigation=navigation, views=views)
assert flow.views == views

def test_views_property_setter(self):
"""Test views property setter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test", navigation=navigation)
new_views = [View(id="new_view", type="button")]
flow.views = new_views
assert flow.views == new_views

def test_schema_property_getter(self):
"""Test schema property getter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
schema = Schema(root=SchemaNode())
flow = Flow(id="test", navigation=navigation, schema=schema)
assert flow.schema == schema

def test_schema_property_setter(self):
"""Test schema property setter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test", navigation=navigation)
new_schema = Schema(root=SchemaNode())
flow.schema = new_schema
assert flow.schema == new_schema

def test_data_property_getter(self):
"""Test data property getter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
data = {"test": "data"}
flow = Flow(id="test", navigation=navigation, data=data)
assert flow.data == data

def test_data_property_setter(self):
"""Test data property setter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test", navigation=navigation)
new_data = {"new": "data"}
flow.data = new_data
assert flow.data == new_data

def test_navigation_property_getter(self):
"""Test navigation property getter"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test", navigation=navigation)
assert flow.navigation == navigation

def test_navigation_property_setter(self):
"""Test navigation property setter"""
initial_nav = Navigation(begin="start")
new_nav = Navigation(begin="end")
initial_nav = Navigation(BEGIN="start")
new_nav = Navigation(BEGIN="end")
flow = Flow(id="test", navigation=initial_nav)
flow.navigation = new_nav
assert flow.navigation == new_nav

def test_additional_props_methods(self):
"""Test additional properties methods"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test", navigation=navigation, custom="value", number=42)

assert flow.get_additional_prop("custom") == "value"
Expand All @@ -205,7 +205,7 @@ def test_additional_props_methods(self):

def test_json_serialization_minimal(self):
"""Test JSON serialization with minimal setup"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
flow = Flow(id="test_flow", navigation=navigation)

json_str = json.dumps(flow.__dict__, default=lambda o: o.__dict__)
Expand All @@ -221,7 +221,7 @@ def test_json_serialization_minimal(self):

def test_json_serialization_full(self):
"""Test JSON serialization with all properties"""
navigation = Navigation(begin="start")
navigation = Navigation(BEGIN="start")
views = [View(id="view1", type="text")]
schema = Schema(root=SchemaNode())
data = {"test": "data"}
Expand Down
107 changes: 23 additions & 84 deletions language/dsl/python/src/__tests__/test_navigation.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,33 @@ class TestNavigation:

def test_instantiation_minimal(self):
"""Test Navigation can be instantiated with minimal parameters"""
nav = Navigation(begin="start")
nav = Navigation(BEGIN="start")
assert nav is not None
assert nav.begin == "start"
assert nav.flows == {}

def test_instantiation_with_flows(self):
"""Test Navigation can be instantiated with flows"""
flow1 = NavigationFlow(start_state="state1")
nav = Navigation(begin="start", flow1=flow1, flow2="simple_flow")
nav = Navigation(BEGIN="start", flow1=flow1, flow2="simple_flow")
assert nav.begin == "start"
assert nav.get_flow("flow1") == flow1
assert nav.get_flow("flow2") == "simple_flow"

def test_begin_property_getter(self):
"""Test begin property getter"""
nav = Navigation(begin="initial_state")
nav = Navigation(BEGIN="initial_state")
assert nav.begin == "initial_state"

def test_begin_property_setter(self):
"""Test begin property setter"""
nav = Navigation(begin="start")
nav = Navigation(BEGIN="start")
nav.begin = "new_start"
assert nav.begin == "new_start"

def test_flow_methods(self):
"""Test flow getter and setter methods"""
nav = Navigation(begin="start")
nav = Navigation(BEGIN="start")
flow = NavigationFlow(start_state="state1")

# Test getting non-existent flow
Expand All @@ -64,71 +64,12 @@ def test_flow_methods(self):
def test_json_serialization(self):
"""Test JSON serialization"""
flow = NavigationFlow(start_state="state1")
nav = Navigation(begin="start", test_flow=flow)
nav = Navigation(BEGIN="start", test_flow=flow)

json_str = json.dumps(nav.__dict__, default=lambda o: o.__dict__)
json_str = nav.serialize()
assert json_str is not None
data = json.loads(json_str)
assert data["_begin"] == "start"
assert "_flows" in data

class TestNavigationBaseState:
"""Test cases for NavigationBaseState class"""

def test_instantiation_minimal(self):
"""Test NavigationBaseState can be instantiated with minimal parameters"""
state = NavigationBaseState(state_type="TEST")
assert state is not None
assert state.state_type == "TEST"
assert state.on_start is None
assert state.on_end is None

def test_instantiation_full(self):
"""Test NavigationBaseState can be instantiated with all parameters"""
exp_obj = ExpressionObject(exp="test_expression")
state = NavigationBaseState(
state_type="FULL",
on_start="start_expr",
on_end=exp_obj,
custom_prop="custom_value"
)

assert state.state_type == "FULL"
assert state.on_start == "start_expr"
assert state.on_end == exp_obj

def test_properties_getters_setters(self):
"""Test all property getters and setters"""
state = NavigationBaseState(state_type="TEST")

# Test state_type
new_type = "NEW_TYPE"
state.state_type = new_type
assert state.state_type == new_type

# Test on_start
start_expr = ["expr1", "expr2"]
state.on_start = start_expr
assert state.on_start == start_expr

# Test on_end
end_expr = ExpressionObject(exp="end_expression")
state.on_end = end_expr
assert state.on_end == end_expr

def test_json_serialization(self):
"""Test JSON serialization"""
state = NavigationBaseState(
state_type="TEST",
on_start="start_expr",
)

json_str = json.dumps(state.__dict__, default=lambda o: o.__dict__)
assert json_str is not None
data = json.loads(json_str)
assert data["_state_type"] == "TEST"
assert data["_on_start"] == "start_expr"

assert data["BEGIN"] == "start"

class TestNavigationFlowTransitionableState:
"""Test cases for NavigationFlowTransitionableState class"""
Expand Down Expand Up @@ -460,9 +401,9 @@ def test_instantiation_minimal(self):
flow = NavigationFlow(start_state="initial")

assert flow is not None
assert flow.start_state == "initial"
assert flow.on_start is None
assert flow.on_end is None
assert flow.startState == "initial"
assert flow.onStart is None
assert flow.onEnd is None
assert flow.states == {}

def test_instantiation_with_states(self):
Expand All @@ -480,8 +421,8 @@ def test_instantiation_with_states(self):
end=end_state
)

assert flow.start_state == "view"
assert flow.on_start == "initFlow()"
assert flow.startState == "view"
assert flow.onStart == "initFlow()"
assert flow.get_state("view") == view_state
assert flow.get_state("end") == end_state

Expand All @@ -490,18 +431,18 @@ def test_properties(self):
flow = NavigationFlow(start_state="start")

# Test start_state
flow.start_state = "new_start"
assert flow.start_state == "new_start"
flow.startState = "new_start"
assert flow.startState == "new_start"

# Test on_start
start_exp = ExpressionObject(exp="startExpression")
flow.on_start = start_exp
assert flow.on_start == start_exp
flow.onStart = start_exp
assert flow.onStart == start_exp

# Test on_end
end_exp = ["endExpr1", "endExpr2"]
flow.on_end = end_exp
assert flow.on_end == end_exp
flow.onEnd = end_exp
assert flow.onEnd == end_exp

def test_state_methods(self):
"""Test state getter and setter methods"""
Expand Down Expand Up @@ -535,12 +476,10 @@ def test_json_serialization(self):
end=end_state
)

json_str = json.dumps(flow.__dict__, default=lambda o: o.__dict__)
json_str = flow.serialize()
assert json_str is not None
data = json.loads(json_str)

assert data["_start_state"] == "view"
assert data["_on_start"] == "init()"
assert "_states" in data
assert len(data["_states"]) == 2
print(data)
assert data["startState"] == "view"
assert data["onStart"] == "init()"

4 changes: 2 additions & 2 deletions language/dsl/python/src/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"""

from typing import List, Optional, Union, TypeVar

from .utils import Serializable
T = TypeVar('T', bound=str)

# Future: Build out Expression/Binding template functionality once PEP 750 is available
Expand All @@ -12,7 +12,7 @@
Binding = str
BindingRef = str

class ExpressionObject:
class ExpressionObject(Serializable):
"""An object with an expression in it"""

def __init__(self, exp: Optional[Union[str, List[str]]] = None):
Expand Down
6 changes: 3 additions & 3 deletions language/dsl/python/src/flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
from .navigation import Navigation, NavigationFlowEndState
from .schema import Schema
from .view import View

from .utils import Serializable

DataModel = Dict[Any, Any]

class FlowResult:
class FlowResult(Serializable):
"""The data at the end of a flow"""

def __init__(
Expand Down Expand Up @@ -40,7 +40,7 @@ def data(self, value: Optional[Any]) -> None:
self._data = value


class Flow():
class Flow(Serializable):
"""
The JSON payload for running Player
"""
Expand Down
Loading