{
  "fixtures": [
    {
      "name": "duplicate_relative_imports",
      "description": "Same relative import repeated — hints at circular dependency",
      "source": "from . import utils\nfrom . import utils\n",
      "filename": "module_a.py",
      "expected_rule": "duplicate_import",
      "expected_passed": false,
      "expected_message_contains": "Duplicate relative imports",
      "expected_data_contains": {"filename": "module_a.py"}
    },
    {
      "name": "triple_relative_import_cycle",
      "description": "Three identical relative imports — strong cycle indicator",
      "source": "from . import core\nfrom . import core\nfrom . import core\n",
      "filename": "module_b.py",
      "expected_rule": "duplicate_import",
      "expected_passed": false,
      "expected_message_contains": "Duplicate relative imports",
      "expected_data_contains": {"filename": "module_b.py"}
    },
    {
      "name": "mixed_valid_imports",
      "description": "Mix of absolute and unique relative imports — no violations",
      "source": "import os\nimport sys\nfrom . import alpha\nfrom . import beta\n",
      "filename": "clean_module.py",
      "expected_rule": "duplicate_import",
      "expected_passed": true,
      "note": "All imports are unique"
    },
    {
      "name": "private_module_import",
      "description": "Import from a private underscore module not in stdlib",
      "source": "import _nonexistent_internal_module\n",
      "filename": "risky_import.py",
      "expected_rule": "missing_import",
      "expected_passed": false,
      "expected_message_contains": "suspicious import",
      "expected_data_contains": {"filename": "risky_import.py"}
    },
    {
      "name": "from_private_module_import",
      "description": "From-import from a private underscore module not in stdlib",
      "source": "from _nonexistent_private_lib import helper\n",
      "filename": "risky_from.py",
      "expected_rule": "missing_import",
      "expected_passed": false,
      "expected_message_contains": "suspicious import",
      "expected_data_contains": {"filename": "risky_from.py"}
    },
    {
      "name": "valid_stdlib_private_import",
      "description": "Private module that IS in stdlib — should pass",
      "source": "import _thread\n",
      "filename": "stdlib_private.py",
      "expected_rule": "missing_import",
      "expected_passed": true,
      "note": "_thread is a valid stdlib module"
    }
  ]
}
