name: Weighted Edges Tests

on:
  push:
    branches: [ main, dev, weighted_edges ]
    paths:
      - 'cognee/modules/graph/utils/get_graph_from_model.py'
      - 'cognee/infrastructure/engine/models/Edge.py'
      - 'cognee/tests/unit/interfaces/graph/test_weighted_edges.py'
      - 'examples/python/weighted_edges_example.py'
      - '.github/workflows/weighted_edges_tests.yml'
  pull_request:
    branches: [ main, dev ]
    paths:
      - 'cognee/modules/graph/utils/get_graph_from_model.py'
      - 'cognee/infrastructure/engine/models/Edge.py'
      - 'cognee/tests/unit/interfaces/graph/test_weighted_edges.py'
      - 'examples/python/weighted_edges_example.py'
      - '.github/workflows/weighted_edges_tests.yml'

env:
  RUNTIME__LOG_LEVEL: ERROR
  ENV: 'dev'

jobs:
  test-weighted-edges-functionality:
    name: Test Weighted Edges Core Functionality
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        python-version: ['3.11', '3.12']
    env:
      LLM_PROVIDER: openai
      LLM_MODEL: gpt-5-mini
      LLM_API_KEY: ${{ secrets.OPENAI_API_KEY }}

    steps:
      - name: Check out repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

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

      - name: Run Weighted Edges Unit Tests
        run: |
          uv run pytest cognee/tests/unit/interfaces/graph/test_weighted_edges.py -v --tb=short

      - name: Run Standard Graph Tests (Regression)
        run: |
          uv run pytest cognee/tests/unit/interfaces/graph/get_graph_from_model_unit_test.py -v --tb=short

  test-with-different-databases:
    name: Test Weighted Edges with Different Graph Databases
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        database: ['kuzu', 'neo4j']
        include:
          - database: kuzu
            graph_db_provider: "kuzu"
          - database: neo4j
            graph_db_provider: "neo4j"
    env:
      LLM_PROVIDER: openai
      LLM_MODEL: gpt-5-mini
      LLM_ENDPOINT: https://api.openai.com/v1
      LLM_API_KEY: ${{ secrets.OPENAI_API_KEY  }}
      LLM_API_VERSION: "2024-02-01"
      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: '3.11'

      - name: Setup Neo4j with GDS
        uses: ./.github/actions/setup_neo4j
        id: neo4j

      - name: Dependencies already installed
        run: echo "Dependencies already installed in setup"

      - name: Run Weighted Edges Tests
        env:
          ENABLE_BACKEND_ACCESS_CONTROL: 'false'
          GRAPH_DATABASE_PROVIDER: ${{ matrix.graph_db_provider }}
          GRAPH_DATABASE_URL: ${{ matrix.graph_db_provider == 'neo4j' && steps.neo4j.outputs.neo4j-url || '' }}
          GRAPH_DATABASE_USERNAME: ${{ matrix.graph_db_provider == 'neo4j' && steps.neo4j.outputs.neo4j-username || '' }}
          GRAPH_DATABASE_PASSWORD: ${{ matrix.graph_db_provider == 'neo4j' && steps.neo4j.outputs.neo4j-password || '' }}
        run: |
          uv run pytest cognee/tests/unit/interfaces/graph/test_weighted_edges.py -v --tb=short

  test-examples:
    name: Test Weighted Edges Examples
    runs-on: ubuntu-22.04
    env:
      LLM_PROVIDER: openai
      LLM_MODEL: gpt-5-mini
      LLM_ENDPOINT: https://api.openai.com/v1
      LLM_API_KEY: ${{ secrets.OPENAI_API_KEY  }}
      LLM_API_VERSION: "2024-02-01"
      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: '3.11'

      - name: Test Weighted Edges Example
        run: |
          uv run python examples/python/weighted_edges_example.py

      - name: Verify Visualization File Created
        run: |
          if [ -f "examples/python/weighted_graph_visualization.html" ]; then
            echo "✅ Visualization file created successfully"
            ls -la examples/python/weighted_graph_visualization.html
          else
            echo "❌ Visualization file not found"
            exit 1
          fi



  code-quality:
    name: Code Quality for Weighted Edges
    runs-on: ubuntu-22.04
    steps:
      - name: Check out repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Cognee Setup
        uses: ./.github/actions/cognee_setup
        with:
          python-version: '3.11'

      - name: Run Linting on Weighted Edges Files
        uses: astral-sh/ruff-action@v2
        with:
          args: "check cognee/modules/graph/utils/get_graph_from_model.py cognee/tests/unit/interfaces/graph/test_weighted_edges.py examples/python/weighted_edges_example.py"

      - name: Run Formatting Check on Weighted Edges Files
        uses: astral-sh/ruff-action@v2
        with:
          args: "format --check cognee/modules/graph/utils/get_graph_from_model.py cognee/tests/unit/interfaces/graph/test_weighted_edges.py examples/python/weighted_edges_example.py"
