diff --git a/features/steps/tui_persona_state_coverage_steps.py b/features/steps/tui_persona_state_coverage_steps.py index 381cea7d4..bc0fd4641 100644 --- a/features/steps/tui_persona_state_coverage_steps.py +++ b/features/steps/tui_persona_state_coverage_steps.py @@ -380,18 +380,27 @@ def step_verify_cycle_persona_result(context, expected): @given('cycleable personas "{names_csv}" are registered for session "{session_id}"') def step_register_cycleable_personas(context, names_csv, session_id): - """Register multiple cycleable personas with ascending cycle_order values.""" + """Register multiple cycleable personas with ascending cycle_order values. + + A non-cycleable "default" persona is used as the registry default so that + when no active persona has been set for the session, ``_resolve_default_name`` + returns "default" (not in the cycleable list). This means the first call to + ``cycle_persona`` starts from the beginning of the cycleable list (index 0). + """ names = [n.strip() for n in names_csv.split(",")] registry = MagicMock() personas = [ Persona(name=name, actor="ns/actor", cycle_order=idx + 1) for idx, name in enumerate(names) ] + # Non-cycleable default persona — ensures _resolve_default_name() returns a + # name that is NOT in the cycleable list, so cycling starts from index 0. + default_persona = Persona(name="default", actor="ns/actor", cycle_order=0) registry.list_personas.return_value = personas registry.get.side_effect = lambda name: next( (p for p in personas if p.name == name), None ) - registry.ensure_default.return_value = personas[0] + registry.ensure_default.return_value = default_persona registry.get_last_persona.return_value = None registry.set_last_persona = MagicMock() context.state = PersonaState(registry=registry)