*** 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
