name: CLI Tests

on:
  workflow_call:
    inputs:
      python-version:
        required: false
        type: string
        default: '3.11.x'
    secrets:
      LLM_PROVIDER:
        required: true
      LLM_MODEL:
        required: true
      LLM_ENDPOINT:
        required: true
      LLM_API_KEY:
        required: true
      LLM_API_VERSION:
        required: true
      EMBEDDING_PROVIDER:
        required: true
      EMBEDDING_MODEL:
        required: true
      EMBEDDING_ENDPOINT:
        required: true
      EMBEDDING_API_KEY:
        required: true
      EMBEDDING_API_VERSION:
        required: true


env:
  RUNTIME__LOG_LEVEL: ERROR
  ENV: 'dev'

jobs:
  cli-unit-tests:
    name: CLI Unit Tests
    runs-on: ubuntu-22.04
    env:
      ENV: 'dev'
      LLM_PROVIDER: openai
      LLM_MODEL: ${{ secrets.LLM_MODEL }}
      LLM_ENDPOINT: ${{ secrets.LLM_ENDPOINT }}
      LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
      LLM_API_VERSION: ${{ secrets.LLM_API_VERSION }}
      EMBEDDING_MODEL: ${{ secrets.EMBEDDING_MODEL }}
      EMBEDDING_ENDPOINT: ${{ secrets.EMBEDDING_ENDPOINT }}
      EMBEDDING_API_KEY: ${{ secrets.EMBEDDING_API_KEY }}
      EMBEDDING_API_VERSION: ${{ secrets.EMBEDDING_API_VERSION }}
    steps:
      - name: Check out repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Cognee Setup
        uses: ./.github/actions/cognee_setup
        with:
          python-version: ${{ inputs.python-version }}

      - name: Run CLI Unit Tests
        run: uv run pytest cognee/tests/cli_tests/cli_unit_tests/ -v

  cli-integration-tests:
    name: CLI Integration Tests
    runs-on: ubuntu-22.04
    env:
      ENV: 'dev'
      LLM_PROVIDER: openai
      LLM_MODEL: ${{ secrets.LLM_MODEL }}
      LLM_ENDPOINT: ${{ secrets.LLM_ENDPOINT }}
      LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
      LLM_API_VERSION: ${{ secrets.LLM_API_VERSION }}
      EMBEDDING_MODEL: ${{ secrets.EMBEDDING_MODEL }}
      EMBEDDING_ENDPOINT: ${{ secrets.EMBEDDING_ENDPOINT }}
      EMBEDDING_API_KEY: ${{ secrets.EMBEDDING_API_KEY }}
      EMBEDDING_API_VERSION: ${{ secrets.EMBEDDING_API_VERSION }}
    steps:
      - name: Check out repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Cognee Setup
        uses: ./.github/actions/cognee_setup
        with:
          python-version: ${{ inputs.python-version }}

      - name: Run CLI Integration Tests
        run: uv run pytest cognee/tests/cli_tests/cli_integration_tests/ -v

  cli-functionality-tests:
    name: CLI Functionality Tests
    runs-on: ubuntu-22.04
    env:
      ENV: 'dev'
      LLM_PROVIDER: openai
      LLM_MODEL: ${{ secrets.LLM_MODEL }}
      LLM_ENDPOINT: ${{ secrets.LLM_ENDPOINT }}
      LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
      LLM_API_VERSION: ${{ secrets.LLM_API_VERSION }}
      EMBEDDING_MODEL: ${{ secrets.EMBEDDING_MODEL }}
      EMBEDDING_ENDPOINT: ${{ secrets.EMBEDDING_ENDPOINT }}
      EMBEDDING_API_KEY: ${{ secrets.EMBEDDING_API_KEY }}
      EMBEDDING_API_VERSION: ${{ secrets.EMBEDDING_API_VERSION }}
    steps:
      - name: Check out repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Cognee Setup
        uses: ./.github/actions/cognee_setup
        with:
          python-version: ${{ inputs.python-version }}

      - name: Test CLI Help Commands
        run: |
          uv run python -m cognee.cli._cognee --help
          uv run python -m cognee.cli._cognee --version
          uv run python -m cognee.cli._cognee add --help
          uv run python -m cognee.cli._cognee search --help
          uv run python -m cognee.cli._cognee cognify --help
          uv run python -m cognee.cli._cognee delete --help
          uv run python -m cognee.cli._cognee config --help

      - name: Test CLI Config Subcommands
        run: |
          uv run python -m cognee.cli._cognee config get --help
          uv run python -m cognee.cli._cognee config set --help
          uv run python -m cognee.cli._cognee config list --help
          uv run python -m cognee.cli._cognee config unset --help
          uv run python -m cognee.cli._cognee config reset --help

      - name: Test CLI Error Handling
        run: |
          # Test invalid command (should fail gracefully)
          ! uv run python -m cognee.cli._cognee invalid_command

          # Test missing required arguments (should fail gracefully)
          ! uv run python -m cognee.cli._cognee search

          # Test invalid search type (should fail gracefully)
          ! uv run python -m cognee.cli._cognee search "test" --query-type INVALID_TYPE

          # Test invalid chunker (should fail gracefully)
          ! uv run python -m cognee.cli._cognee cognify --chunker InvalidChunker
