*** Settings *** Documentation Core CLI Commands Integration Tests for Project, Context and Plan Management Library OperatingSystem Library Process Library String Library Collections Resource discovery_common.resource Suite Setup Setup Test Environment Suite Teardown Cleanup Test Environment Test Timeout 900 seconds *** Variables *** ${TEST_DIR} ${TEMPDIR}${/}cleveragents_core_cli_test ${PROJECT_NAME} test-project *** Test Cases *** Test CLI Help Shows All Commands [Documentation] Verify that CLI help displays all expected command groups ${result} = Run Process ${PYTHON} -m cleveragents --help timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} AI-powered development assistant Should Contain ${result.stdout} project Should Contain ${result.stdout} context Should Contain ${result.stdout} plan Should Contain ${result.stdout} init Should Contain ${result.stdout} apply Test Project Initialization [Documentation] Test initializing a new CleverAgents project Create Directory ${TEST_DIR}/project1 ${result} = Run Process ${PYTHON} -m cleveragents init ${PROJECT_NAME} ... cwd=${TEST_DIR}/project1 timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} Project '${PROJECT_NAME}' Should Contain ${result.stdout} initialized Directory Should Exist ${TEST_DIR}/project1/.cleveragents File Should Exist ${TEST_DIR}/project1/.cleveragents/db.sqlite File Should Exist ${TEST_DIR}/project1/.cleveragents/config.yaml File Should Exist ${TEST_DIR}/project1/.cleveragents/current ${current} = Get File ${TEST_DIR}/project1/.cleveragents/current Should Be Equal ${current} main Test Project Cannot Initialize Twice [Documentation] Verify project cannot be initialized twice without force Create Directory ${TEST_DIR}/project2 ${first_init}= Run Process ${PYTHON} -m cleveragents init first-project cwd=${TEST_DIR}/project2 timeout=120s Should Be Equal As Numbers ${first_init.rc} 0 ${result} = Run Process ${PYTHON} -m cleveragents init second-project ... cwd=${TEST_DIR}/project2 timeout=120s Should Not Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stderr} Project already initialized Should Contain ${result.stderr} --force Test Force Reinitialize Project [Documentation] Test force reinitialization of a project Create Directory ${TEST_DIR}/project3 ${first_init}= Run Process ${PYTHON} -m cleveragents init first-project cwd=${TEST_DIR}/project3 timeout=120s Should Be Equal As Numbers ${first_init.rc} 0 ${result} = Run Process ${PYTHON} -m cleveragents init second-project --force ... cwd=${TEST_DIR}/project3 timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} Project 'second-project' initialized successfully Test Context Add Files [Documentation] Test adding files to context Create Directory ${TEST_DIR}/project4 ${init_result}= Run Process ${PYTHON} -m cleveragents init ${PROJECT_NAME} cwd=${TEST_DIR}/project4 timeout=120s Should Be Equal As Numbers ${init_result.rc} 0 Create File ${TEST_DIR}/project4/test.py print('hello world') ${result} = Run Process ${PYTHON} -m cleveragents context add test.py ... cwd=${TEST_DIR}/project4 timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} Added 1 file(s) to context Test Context List Files [Documentation] Test listing context files ${unique_dir} = Set Variable ${TEST_DIR}/project5_${TEST NAME.replace(' ', '_')} Create Directory ${unique_dir} ${init_result} = Run Process ${PYTHON} -m cleveragents init ${PROJECT_NAME} ... cwd=${unique_dir} timeout=120s Should Be Equal As Numbers ${init_result.rc} 0 Create File ${unique_dir}/file1.py # File 1 Create File ${unique_dir}/file2.py # File 2 ${add_result} = Run Process ${PYTHON} -m cleveragents context add file1.py file2.py ... cwd=${unique_dir} timeout=120s Should Be Equal As Numbers ${add_result.rc} 0 Directory Should Exist ${unique_dir} ${result} = Run Process ${PYTHON} -m cleveragents context list ... cwd=${unique_dir} timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} file1.py Should Contain ${result.stdout} file2.py Test Context Clear [Documentation] Test clearing context files Create Directory ${TEST_DIR}/project6 ${init_result}= Run Process ${PYTHON} -m cleveragents init ${PROJECT_NAME} cwd=${TEST_DIR}/project6 timeout=120s Should Be Equal As Numbers ${init_result.rc} 0 Create File ${TEST_DIR}/project6/test.py # Test file ${add_result}= Run Process ${PYTHON} -m cleveragents context add test.py cwd=${TEST_DIR}/project6 timeout=120s Should Be Equal As Numbers ${add_result.rc} 0 ${result} = Run Process ${PYTHON} -m cleveragents context clear --yes ... cwd=${TEST_DIR}/project6 timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} Cleared all files from context Test Plan Apply [Documentation] Test v3 apply command help Create Directory ${TEST_DIR}/project9 ${init_result}= Run Process ${PYTHON} -m cleveragents init ${PROJECT_NAME} cwd=${TEST_DIR}/project9 timeout=120s Should Be Equal As Numbers ${init_result.rc} 0 # The v3 'apply' requires a lifecycle plan. # Verify the command help is accessible. ${result} = Run Process ${PYTHON} -m cleveragents apply --help cwd=${TEST_DIR}/project9 timeout=120s Should Be Equal As Numbers ${result.rc} 0 Test Shortcut Commands Work [Documentation] Test that shortcut commands work properly Create Directory ${TEST_DIR}/project11 ${init_result}= Run Process ${PYTHON} -m cleveragents init ${PROJECT_NAME} cwd=${TEST_DIR}/project11 timeout=120s Should Be Equal As Numbers ${init_result.rc} 0 Create File ${TEST_DIR}/project11/test.txt Test content # Test context-load shortcut ${result} = Run Process ${PYTHON} -m cleveragents context-load test.txt ... cwd=${TEST_DIR}/project11 timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} Added 1 file(s) to context Test Command Error Handling [Documentation] Test error handling for invalid commands ${result} = Run Process ${PYTHON} -m cleveragents invalid-command timeout=120s Should Not Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stderr} Invalid command Test Project Status Without Project [Documentation] Test project status command without initialized project Create Directory ${TEST_DIR}/no_project ${result} = Run Process ${PYTHON} -m cleveragents project status ... cwd=${TEST_DIR}/no_project timeout=120s Should Not Be Equal As Integers ${result.rc} 0 Should Contain ${result.stderr} No project found Test Project Status With Project [Documentation] Test project status command with initialized project Create Directory ${TEST_DIR}/with_project ${init_result}= Run Process ${PYTHON} -m cleveragents init status-test cwd=${TEST_DIR}/with_project timeout=120s Should Be Equal As Numbers ${init_result.rc} 0 ${result} = Run Process ${PYTHON} -m cleveragents project status ... cwd=${TEST_DIR}/with_project timeout=120s Should Be Equal As Numbers ${result.rc} 0 Should Contain ${result.stdout} Project: status-test Should Contain ${result.stdout} Plans: 1 Should Contain ${result.stdout} Context Files: 0 *** Keywords *** Setup Test Environment [Documentation] Setup the test environment ${run_id}= Evaluate __import__('uuid').uuid4().hex Set Suite Variable ${TEST_DIR} ${TEMPDIR}${/}cleveragents_core_cli_test_${run_id} Set Suite Variable ${PROJECT_NAME} test-project-${run_id} Set Environment Variable CLEVERAGENTS_TESTING_USE_MOCK_AI true Create Directory ${TEST_DIR} # Do NOT set CLEVERAGENTS_HOME here — individual test cases use # separate project directories (cwd=...) and expect database files # to be created relative to CWD, not a shared home directory. Remove Environment Variable CLEVERAGENTS_HOME Clean Core CLI Temp Dir Run Keyword And Ignore Error Remove Directory ${TEST_DIR} recursive=True Create Directory ${TEST_DIR} Cleanup Test Environment [Documentation] Clean up after tests # Clean up test directory Run Keyword And Ignore Error Remove Directory ${TEST_DIR} recursive=true