Private
Public Access
test: migrate src.models bare imports + PROVIDERS/Metadata sub-imports to direct subsystems
Removed 18 unused 'from src import models' imports. Migrated the explicit sub-imports: - 'from src.models import PROVIDERS' -> 'from src.ai_client import PROVIDERS' (test_minimax_provider x2, test_deepseek_infra) - 'from src.models import Metadata' -> 'from src.type_aliases import Metadata' (test_project_manager_tracks, test_track_state_persistence, test_track_state_schema) Kept the 2 'import src.models as models' in test_provider_curation + test_providers_source_of_truth (they verify the backward-compat shim still re-exports PROVIDERS) and the 2 self-tests (test_models_no_top_level_pydantic + test_models_no_top_level_tomli_w) that exercise the shim's no-leak invariants.
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
import unittest.mock
|
import unittest.mock
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
from src.gui_2 import App, render_ast_inspector_modal
|
from src.gui_2 import App, render_ast_inspector_modal
|
||||||
from src import models
|
|
||||||
|
|
||||||
from src.project_files import FileItem
|
from src.project_files import FileItem
|
||||||
def test_ast_inspector_line_range_parsing():
|
def test_ast_inspector_line_range_parsing():
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from unittest.mock import MagicMock, patch, mock_open
|
from unittest.mock import MagicMock, patch, mock_open
|
||||||
from src.gui_2 import App
|
from src.gui_2 import App
|
||||||
from src import models
|
|
||||||
|
|
||||||
from src.project_files import FileItem
|
from src.project_files import FileItem
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ def test_gui_providers_list() -> None:
|
|||||||
|
|
||||||
Check if 'deepseek' is in the GUI's provider list.
|
Check if 'deepseek' is in the GUI's provider list.
|
||||||
"""
|
"""
|
||||||
from src.models import PROVIDERS
|
from src.ai_client import PROVIDERS
|
||||||
assert "deepseek" in PROVIDERS
|
assert "deepseek" in PROVIDERS
|
||||||
|
|
||||||
def test_deepseek_model_listing() -> None:
|
def test_deepseek_model_listing() -> None:
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
DIRECTIVES_DIR = Path("conductor/directives")
|
||||||
|
SKIP_DIRS = {"presets"}
|
||||||
|
|
||||||
|
|
||||||
|
def _iter_directive_subdirs() -> list[Path]:
|
||||||
|
if not DIRECTIVES_DIR.is_dir():
|
||||||
|
return []
|
||||||
|
return sorted(
|
||||||
|
p for p in DIRECTIVES_DIR.iterdir()
|
||||||
|
if p.is_dir() and p.name not in SKIP_DIRS
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_every_directive_has_v1_and_meta() -> None:
|
||||||
|
missing: list[tuple[str, str]] = []
|
||||||
|
for sub in _iter_directive_subdirs():
|
||||||
|
for fname in ("v1.md", "meta.md"):
|
||||||
|
if not (sub / fname).is_file():
|
||||||
|
missing.append((sub.name, fname))
|
||||||
|
assert not missing, f"Directives missing required files: {missing}"
|
||||||
|
|
||||||
|
|
||||||
|
def test_every_meta_md_references_directive_name() -> None:
|
||||||
|
mismatches: list[str] = []
|
||||||
|
for sub in _iter_directive_subdirs():
|
||||||
|
meta = sub / "meta.md"
|
||||||
|
if not meta.is_file():
|
||||||
|
continue
|
||||||
|
text = meta.read_text(encoding="utf-8")
|
||||||
|
if not re.search(rf"^#\s*{re.escape(sub.name)}\b", text, re.MULTILINE):
|
||||||
|
mismatches.append(sub.name)
|
||||||
|
assert not mismatches, f"meta.md headers mismatch directory name: {mismatches}"
|
||||||
|
|
||||||
|
|
||||||
|
def test_every_v1_md_starts_with_heading() -> None:
|
||||||
|
bad: list[str] = []
|
||||||
|
for sub in _iter_directive_subdirs():
|
||||||
|
v1 = sub / "v1.md"
|
||||||
|
if v1.is_file() and not re.match(r"^#\s+", v1.read_text(encoding="utf-8", errors="ignore")):
|
||||||
|
bad.append(sub.name)
|
||||||
|
assert not bad, f"v1.md missing top-level heading: {bad}"
|
||||||
@@ -3,7 +3,6 @@ import json
|
|||||||
import sys
|
import sys
|
||||||
import pytest
|
import pytest
|
||||||
from src import mcp_client
|
from src import mcp_client
|
||||||
from src import models
|
|
||||||
|
|
||||||
from src.mcp_client import MCPServerConfig
|
from src.mcp_client import MCPServerConfig
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import pytest
|
|||||||
from unittest.mock import MagicMock, patch, AsyncMock
|
from unittest.mock import MagicMock, patch, AsyncMock
|
||||||
from src import ai_client
|
from src import ai_client
|
||||||
from src import mcp_client
|
from src import mcp_client
|
||||||
from src import models
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_external_mcp_hitl_approval():
|
async def test_external_mcp_hitl_approval():
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
from unittest.mock import patch, MagicMock
|
from unittest.mock import patch, MagicMock
|
||||||
import os, tempfile
|
import os, tempfile
|
||||||
from src import models
|
|
||||||
from src.project_files import FileItem
|
from src.project_files import FileItem
|
||||||
from src.gui_2 import render_files_and_media
|
from src.gui_2 import render_files_and_media
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
from src import models
|
|
||||||
|
|
||||||
from src.mma import Ticket
|
from src.mma import Ticket
|
||||||
def test_gui_has_kill_button_method():
|
def test_gui_has_kill_button_method():
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import pytest
|
import pytest
|
||||||
from src import models
|
|
||||||
|
|
||||||
from src.mcp_client import MCPServerConfig, MCPConfiguration, load_mcp_config
|
from src.mcp_client import MCPServerConfig, MCPConfiguration, load_mcp_config
|
||||||
def test_mcp_server_config_to_from_dict():
|
def test_mcp_server_config_to_from_dict():
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ def test_minimax_list_models() -> None:
|
|||||||
assert "MiniMax-M2" in models
|
assert "MiniMax-M2" in models
|
||||||
|
|
||||||
def test_minimax_in_providers_list() -> None:
|
def test_minimax_in_providers_list() -> None:
|
||||||
from src.models import PROVIDERS
|
from src.ai_client import PROVIDERS
|
||||||
assert "minimax" in PROVIDERS
|
assert "minimax" in PROVIDERS
|
||||||
|
|
||||||
def test_minimax_in_app_controller_providers() -> None:
|
def test_minimax_in_app_controller_providers() -> None:
|
||||||
from src.models import PROVIDERS
|
from src.ai_client import PROVIDERS
|
||||||
assert "minimax" in PROVIDERS
|
assert "minimax" in PROVIDERS
|
||||||
|
|
||||||
def test_minimax_credentials_template() -> None:
|
def test_minimax_credentials_template() -> None:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from typing import Any
|
|||||||
import json
|
import json
|
||||||
from src.project_manager import get_all_tracks, save_track_state
|
from src.project_manager import get_all_tracks, save_track_state
|
||||||
from src.mma import TrackState, Ticket
|
from src.mma import TrackState, Ticket
|
||||||
from src.models import Metadata
|
from src.type_aliases import Metadata
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
def test_get_all_tracks_empty(tmp_path: Any) -> None:
|
def test_get_all_tracks_empty(tmp_path: Any) -> None:
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import unittest
|
|||||||
import tempfile
|
import tempfile
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from src import project_manager
|
from src import project_manager
|
||||||
from src import models
|
|
||||||
from src.project_files import FileItem
|
from src.project_files import FileItem
|
||||||
from src.app_controller import AppController
|
from src.app_controller import AppController
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import tempfile
|
|||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from src.app_controller import AppController
|
from src.app_controller import AppController
|
||||||
from src import models
|
|
||||||
from src.personas import PersonaManager
|
from src.personas import PersonaManager
|
||||||
from src import presets, tool_presets
|
from src import presets, tool_presets
|
||||||
from src import project_manager
|
from src import project_manager
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import pytest
|
import pytest
|
||||||
import os
|
import os
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
from src import models
|
|
||||||
from src.mcp_client import VectorStoreConfig, RAGConfig
|
from src.mcp_client import VectorStoreConfig, RAGConfig
|
||||||
from src import rag_engine
|
from src import rag_engine
|
||||||
from src.rag_engine import RAGEngine, BaseEmbeddingProvider, LocalEmbeddingProvider, GeminiEmbeddingProvider
|
from src.rag_engine import RAGEngine, BaseEmbeddingProvider, LocalEmbeddingProvider, GeminiEmbeddingProvider
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import pytest
|
|||||||
from src.app_controller import AppController
|
from src.app_controller import AppController
|
||||||
from src import ai_client
|
from src import ai_client
|
||||||
from src import events
|
from src import events
|
||||||
from src import models
|
|
||||||
from src.mcp_client import VectorStoreConfig, RAGConfig
|
from src.mcp_client import VectorStoreConfig, RAGConfig
|
||||||
from src.result_types import Result
|
from src.result_types import Result
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|||||||
|
|
||||||
from src import ai_client
|
from src import ai_client
|
||||||
from src.app_controller import AppController
|
from src.app_controller import AppController
|
||||||
from src import models
|
|
||||||
|
|
||||||
class TestSystemPromptExposure(unittest.TestCase):
|
class TestSystemPromptExposure(unittest.TestCase):
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import pytest
|
|||||||
import asyncio
|
import asyncio
|
||||||
from src import ai_client
|
from src import ai_client
|
||||||
from src import mcp_client
|
from src import mcp_client
|
||||||
from src import models
|
|
||||||
from src.tool_presets import ToolPreset, Tool, Tool, ToolPreset
|
from src.tool_presets import ToolPreset, Tool, Tool, ToolPreset
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from datetime import datetime
|
|||||||
|
|
||||||
# Import the real models
|
# Import the real models
|
||||||
from src.mma import TrackState, Ticket
|
from src.mma import TrackState, Ticket
|
||||||
from src.models import Metadata
|
from src.type_aliases import Metadata
|
||||||
# Import the persistence functions from project_manager
|
# Import the persistence functions from project_manager
|
||||||
from src.project_manager import save_track_state, load_track_state
|
from src.project_manager import save_track_state, load_track_state
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from datetime import datetime, timezone, timedelta
|
|||||||
|
|
||||||
# Import necessary classes from models.py
|
# Import necessary classes from models.py
|
||||||
from src.mma import TrackState, Ticket
|
from src.mma import TrackState, Ticket
|
||||||
from src.models import Metadata
|
from src.type_aliases import Metadata
|
||||||
|
|
||||||
# --- Pytest Tests ---
|
# --- Pytest Tests ---
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import pytest
|
import pytest
|
||||||
import inspect
|
import inspect
|
||||||
from src import models
|
|
||||||
|
|
||||||
|
|
||||||
from src.project_files import FileItem
|
from src.project_files import FileItem
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import pytest
|
import pytest
|
||||||
import copy
|
import copy
|
||||||
from src import models
|
|
||||||
from src.project_files import FileItem, NamedViewPreset
|
from src.project_files import FileItem, NamedViewPreset
|
||||||
from src.app_controller import AppController
|
from src.app_controller import AppController
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user