diff --git a/features/steps/budget_enforcement_plan_executor_steps.py b/features/steps/budget_enforcement_plan_executor_steps.py index 285fd5cdc..f64e4f637 100644 --- a/features/steps/budget_enforcement_plan_executor_steps.py +++ b/features/steps/budget_enforcement_plan_executor_steps.py @@ -117,36 +117,35 @@ def step_create_budget_exceeded_error( @then('the BudgetExceededError plan_id should be "{expected}"') def step_check_budget_exc_plan_id(context: Context, expected: str) -> None: """Verify BudgetExceededError plan_id.""" - assert context.budget_exc.plan_id == expected, ( - f"Expected plan_id={expected!r}, got {context.budget_exc.plan_id!r}" - ) + assert ( + context.budget_exc.plan_id == expected + ), f"Expected plan_id={expected!r}, got {context.budget_exc.plan_id!r}" @then('the BudgetExceededError budget_type should be "{expected}"') def step_check_budget_exc_budget_type(context: Context, expected: str) -> None: """Verify BudgetExceededError budget_type.""" assert context.budget_exc.budget_type == expected, ( - f"Expected budget_type={expected!r}, got {context.budget_exc.budget_type!r}" + f"Expected budget_type={expected!r}, " + f"got {context.budget_exc.budget_type!r}" ) @then("the BudgetExceededError used should be {expected:f}") def step_check_budget_exc_used(context: Context, expected: float) -> None: """Verify BudgetExceededError used.""" - assert context.budget_exc.used == expected, ( - f"Expected used={expected}, got {context.budget_exc.used}" + assert context.budget_exc.used == expected, ( + f"Expected used={expected!r}, got {context.budget_exc.used!r}" ) - -@then("the BudgetExceededError limit should be {expected:f}") + @then("the BudgetExceededError limit should be {expected:f}") def step_check_budget_exc_limit(context: Context, expected: float) -> None: """Verify BudgetExceededError limit.""" assert context.budget_exc.limit == expected, ( - f"Expected limit={expected}, got {context.budget_exc.limit}" + f"Expected limit={expected!r}, got {context.budget_exc.limit!r}" ) - -@then('the BudgetExceededError message should contain "{text}"') + @then('the BudgetExceededError message should contain "{text}"') def step_check_budget_exc_message(context: Context, text: str) -> None: """Verify BudgetExceededError message contains text.""" assert text in str(context.budget_exc), ( @@ -444,7 +443,8 @@ def step_no_budget_exception(context: Context) -> None: @when( - 'I call _save_plan_state_on_budget_halt with plan_id "{plan_id}" budget_type "{btype}" used {used:f} limit {limit:f}' + 'I call _save_plan_state_on_budget_halt with plan_id "{plan_id}" ' + 'budget_type "{btype}" used {used:f} limit {limit:f}' ) def step_call_save_plan_state( context: Context, plan_id: str, btype: str, used: float, limit: float diff --git a/features/steps/tui_multi_session_tabs_steps.py b/features/steps/tui_multi_session_tabs_steps.py index eb053e373..f02dd03e3 100644 --- a/features/steps/tui_multi_session_tabs_steps.py +++ b/features/steps/tui_multi_session_tabs_steps.py @@ -48,7 +48,8 @@ def step_create_tui_app(context: object) -> None: @then("the app should have exactly {count:d} session") @then("the app should still have exactly {count:d} session") def step_check_session_count(context: object, count: int) -> None: - """Check the number of sessions (matches both "should have" and "should still have").""" + """Check session count. Works with both 'should have' and 'should + still have' step patterns.""" assert len(context.app._sessions) == count # type: ignore @@ -154,8 +155,10 @@ def step_close_session(context: object, session_id: str) -> None: for idx, session in enumerate(context.app._sessions): # type: ignore if session.session_id == session_id: context.app._sessions.pop(idx) # type: ignore - if context.app._active_session_index >= len(context.app._sessions): # type: ignore - context.app._active_session_index = len(context.app._sessions) - 1 # type: ignore + idx_ = context.app._active_session_index # type: ignore + max_idx_ = len(context.app._sessions) - 1 # type: ignore + if idx_ >= max_idx_: + context.app._active_session_index = max_idx_ # type: ignore context.close_failed = False # type: ignore return raise ValueError(f"Session {session_id} not found") @@ -171,8 +174,10 @@ def step_try_close_session(context: object, session_id: str) -> None: for idx, session in enumerate(context.app._sessions): # type: ignore if session.session_id == session_id: context.app._sessions.pop(idx) # type: ignore - if context.app._active_session_index >= len(context.app._sessions): # type: ignore - context.app._active_session_index = len(context.app._sessions) - 1 # type: ignore + idx_ = context.app._active_session_index # type: ignore + max_idx_ = len(context.app._sessions) - 1 # type: ignore + if idx_ >= max_idx_: + context.app._active_session_index = max_idx_ # type: ignore return @@ -226,14 +231,16 @@ def step_switch_back_to_first(context: object) -> None: def step_check_first_session_persona(context: object, persona_name: str) -> None: """Check the first session's active persona.""" session_id = context.app._sessions[0].session_id # type: ignore - assert context.persona_state.active_by_session.get(session_id) == persona_name # type: ignore + first = context.persona_state.active_by_session.get(session_id) # type: ignore + assert first == persona_name @then("the second session should have active persona {persona_name}") def step_check_second_session_persona(context: object, persona_name: str) -> None: """Check the second session's active persona.""" session_id = context.app._sessions[1].session_id # type: ignore - assert context.persona_state.active_by_session.get(session_id) == persona_name # type: ignore + second = context.persona_state.active_by_session.get(session_id) # type: ignore + assert second == persona_name @when("I add message {message} to the first session")