Skip to content

Latest commit

 

History

History
279 lines (235 loc) · 5.99 KB

File metadata and controls

279 lines (235 loc) · 5.99 KB

Real-World GraphQL Test Scenarios

Scenario 1: Python Django Project (No Cycles - Valid)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"django\": [\"sqlparse\", \"asgiref\"], \"sqlparse\": [], \"asgiref\": [], \"requests\": [\"urllib3\", \"certifi\"], \"urllib3\": [], \"certifi\": []}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    topological {
      valid
      order
    }
    critical {
      name
      dependents
      rank
    }
  }
}

Expected: No cycles, valid topological order, certifi/urllib3/sqlparse/asgiref are critical


Scenario 2: Node.js Circular Dependency (Common Problem)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"express\": [\"body-parser\"], \"body-parser\": [\"express\"], \"morgan\": [\"express\"], \"cors\": []}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    cycles {
      nodes
      severity
    }
    components {
      nodes
      size
    }
  }
}

Expected: Cycle detected between express ↔ body-parser


Scenario 3: Microservices Dependencies (Complex Graph)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"api-gateway\": [\"auth-service\", \"user-service\"], \"auth-service\": [\"database\", \"cache\"], \"user-service\": [\"database\", \"email-service\"], \"email-service\": [\"queue\"], \"database\": [], \"cache\": [], \"queue\": []}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    topological {
      valid
      order
    }
    critical(limit: 3) {
      name
      dependents
      rank
    }
  }
}

Expected: No cycles, database should be most critical (3 dependents)


Scenario 4: Course Prerequisites (Educational)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"Advanced AI\": [\"Machine Learning\", \"Linear Algebra\"], \"Machine Learning\": [\"Statistics\", \"Python Programming\"], \"Deep Learning\": [\"Machine Learning\", \"Calculus\"], \"Statistics\": [\"Math 101\"], \"Linear Algebra\": [\"Math 101\"], \"Calculus\": [\"Math 101\"], \"Python Programming\": [], \"Math 101\": []}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    topological {
      valid
      order
    }
    critical {
      name
      dependents
    }
  }
}

Expected: Math 101 and Machine Learning are most critical


Scenario 5: Build System with Circular Dependency (Error Case)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"app\": [\"lib-a\", \"lib-b\"], \"lib-a\": [\"lib-c\"], \"lib-b\": [\"lib-c\"], \"lib-c\": [\"lib-a\"]}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    cycles {
      nodes
      severity
    }
    components {
      nodes
      size
    }
  }
}

Expected: Cycle between lib-a → lib-c → lib-a


Scenario 6: Team Skill Dependencies (HR Use Case)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"Senior Developer\": [\"Mid Developer\", \"Code Review Skills\"], \"Mid Developer\": [\"Junior Developer\", \"Testing Skills\"], \"Junior Developer\": [\"Programming Basics\"], \"Code Review Skills\": [\"Programming Basics\"], \"Testing Skills\": [\"Programming Basics\"], \"Programming Basics\": []}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    topological {
      valid
      order
    }
    critical {
      name
      dependents
      rank
    }
  }
}

Expected: Programming Basics is most critical, clear progression path


Scenario 7: Visualization Test - Complex Dependency Graph

Query:

query {
  visualize(input: {
    dependenciesJson: "{\"Frontend\": [\"React\", \"API Client\"], \"Backend\": [\"Database\", \"API Server\"], \"API Server\": [\"Business Logic\"], \"Business Logic\": [\"Database\"], \"React\": [\"API Client\"], \"API Client\": [\"API Server\"], \"Database\": []}"
    format: SVG
    highlightCycles: true
  }) {
    dot
    svg
    analysis {
      stats {
        totalNodes
        totalEdges
        hasCycles
      }
      topological {
        order
      }
    }
  }
}

Expected: SVG showing layered architecture, no cycles


Scenario 8: Self-Dependency (Warning Case)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"package-a\": [\"package-a\"], \"package-b\": [\"package-a\"]}") {
    cycles {
      nodes
      severity
    }
  }
}

Expected: WARNING severity for self-dependency


Scenario 9: Large Monorepo (Performance Test)

Query:

query {
  analyzeSimple(dependenciesJson: "{\"app1\": [\"shared-utils\", \"shared-ui\"], \"app2\": [\"shared-utils\", \"shared-ui\"], \"app3\": [\"shared-utils\"], \"shared-ui\": [\"shared-utils\", \"shared-components\"], \"shared-components\": [\"shared-utils\"], \"shared-utils\": [\"lodash\", \"axios\"], \"lodash\": [], \"axios\": [], \"app4\": [\"shared-utils\"], \"app5\": [\"shared-ui\", \"shared-utils\"]}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    critical(limit: 5) {
      name
      dependents
      rank
    }
    topological {
      order
    }
  }
}

Expected: shared-utils is most critical (7 dependents)


Scenario 10: Diamond Dependency Problem

Query:

query {
  analyzeSimple(dependenciesJson: "{\"app\": [\"lib-v1\", \"lib-v2\"], \"lib-v1\": [\"common@1.0\"], \"lib-v2\": [\"common@2.0\"], \"common@1.0\": [], \"common@2.0\": []}") {
    stats {
      totalNodes
      totalEdges
      hasCycles
    }
    topological {
      valid
      order
    }
  }
}

Expected: No cycles, but shows diamond dependency pattern


How to Test:

  1. Start server: npm run dev
  2. Open: http://localhost:8092/graphql
  3. Copy/paste each query
  4. Verify expected results
  5. Check the SVG visualization in Scenario 7

Expected Insights:

  • No cycles: Scenarios 1, 3, 4, 6, 7, 9, 10
  • Cycles detected: Scenarios 2, 5
  • Self-dependency warning: Scenario 8
  • Most critical packages: Database, shared-utils, Programming Basics, Math 101