Skip to content

Commit 5d9e3f9

Browse files
author
Juno Woods
committed
MWE for #596: transition in a parent model doesn't change state in the nested model
1 parent d771d40 commit 5d9e3f9

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

tests/test_nesting.py

+36
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,42 @@ def to(self):
485485
self.assertTrue(mock.called)
486486
self.assertTrue(model2.is_B())
487487

488+
def test_nested_model(self):
489+
"""Transition into a nested state using a parent model also changes the state of the nested model"""
490+
class NestedModel:
491+
def __init__(self):
492+
self.machine = HierarchicalMachine(
493+
states=['a', 'b'],
494+
transitions=[{'trigger': 'subgo', 'source': 'a', 'dest': 'b'}],
495+
model=self
496+
)
497+
498+
class Model:
499+
def __init__(self, child):
500+
self.machine = HierarchicalMachine0(
501+
states=[
502+
{'name': 'A'},
503+
{'name': 'B', 'children': child.machine}
504+
],
505+
transitions=[
506+
{'trigger': 'go', 'source': 'A', 'dest': 'B_a'},
507+
{'trigger': 'go', 'source': 'B_b', 'dest': 'A'},
508+
],
509+
model=self,
510+
initial='A')
511+
512+
child = NestedModel()
513+
model = Model(child)
514+
assert model.is_A()
515+
model.go()
516+
assert model.is_B_a()
517+
assert child.is_a()
518+
model.subgo()
519+
assert model.is_B_b()
520+
assert child.is_b()
521+
model.go()
522+
assert model.is_A()
523+
488524
def test_trigger_parent(self):
489525
parent_mock = MagicMock()
490526
exit_mock = MagicMock()

0 commit comments

Comments
 (0)