Files
cleveragents-core/robot/acms_budget_enforcement.robot
HAL9000 870a51bff8 fix(acms): resolve CI failures in budget enforcement PR #9673
- Fix BDD test state leakage by unconditionally resetting BudgetEnforcer
  in step_create_budget_enforcer_with_max_total_size instead of using
  conditional if/else reconstruction that skipped the first Background
  step's max_file_size from being preserved.
- Add explicit type annotations (context: object) to all Behave step
  function signatures for Pyright compliance.
- Fix ruff format compliance by standardizing decorator string
  formatting in acms_budget_enforcement_steps.py.
- Correct __init__.py exports: renamed _uks_exports -> _uko_exports
  typo and fixed the __all__ reference to use the corrected variable.
- Add Robot Framework integration test helper using inline imports
  (from cleveragents.acms.budget_enforcement import BudgetEnforcer)
  instead of sys.path manipulation, and update robot tests to use
  python3 and ${WORKSPACE} paths for CI compatibility.

ISSUES CLOSED: #9583
2026-06-17 19:54:20 -04:00

68 lines
3.8 KiB
Plaintext

*** Settings ***
Documentation Integration tests for ACMS BudgetEnforcer max_file_size and max_total_size constraints
Resource ${CURDIR}/common.resource
*** Variables ***
${HELPER_SCRIPT} robot/helper_acms_budget_enforcement.py
*** Test Cases ***
Budget Enforcer Includes File Within Max File Size
[Documentation] BudgetEnforcer includes a file within max_file_size limit
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} file-within-limit cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} file-within-limit-ok
Budget Enforcer Excludes File Exceeding Max File Size
[Documentation] BudgetEnforcer excludes a file that exceeds max_file_size
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} file-exceeds-limit cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} file-exceeds-limit-ok
Budget Enforcer Enforces Max Total Size
[Documentation] BudgetEnforcer cuts off files when max_total_size is reached
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} total-size-cutoff cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} total-size-cutoff-ok
Budget Enforcer Violation Message Is Clear
[Documentation] BudgetViolation message clearly describes the constraint exceeded
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} violation-message cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} violation-message-ok
Budget Enforcer Returns Defensive Copies
[Documentation] get_violations and get_included_files return defensive copies
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} defensive-copies cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} defensive-copies-ok
Budget Enforcer Validates Constructor Arguments
[Documentation] BudgetEnforcer raises ValueError for invalid budget values
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} constructor-validation cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} constructor-validation-ok
Budget Enforcer Validates Add File Arguments
[Documentation] add_file raises ValueError for empty name
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} add-file-validation cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} add-file-validation-ok
Budget Enforcer Handles Multi-Byte UTF-8 Content
[Documentation] BudgetEnforcer measures file size in bytes not characters
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} multibyte-utf8 cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} multibyte-utf8-ok
Budget Enforcer Reset Clears State
[Documentation] reset() clears all included files, violations, and total size
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} reset-state cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} reset-state-ok
Budget Enforcer Assembled Context Joins Files
[Documentation] get_assembled_context joins included file contents with newlines
${result}= Run Process python3 ${WORKSPACE}/${HELPER_SCRIPT} assembled-context cwd=${WORKSPACE}
Should Be Equal As Integers ${result.rc} 0
Should Contain ${result.stdout} assembled-context-ok