fix(test): make test-quick reliable as developer gate

Fixes for D-001验收问题:
1. test-quick.sh: use set -euo pipefail, uv run ruff, no tail pipe
2. Remove unused imports in factories (app.py, platform.py, provider.py)
3. Fix unused variable in smoke test
4. Add noqa: E402 to test_n8nsvapi.py lazy imports
5. Update smoke test docs: "minimal fake flow" not full pipeline

Now test-quick is a reliable gate: lint failures exit 1, test failures propagate.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
huanghuoguoguo
2026-05-08 14:52:21 +08:00
parent 25bf3ea0b3
commit 66a0a7c9c8
6 changed files with 30 additions and 28 deletions
+9 -10
View File
@@ -4,31 +4,30 @@
# Runs linting, unit tests, and smoke tests without requiring real provider keys # Runs linting, unit tests, and smoke tests without requiring real provider keys
# Suitable for local branch validation # Suitable for local branch validation
set -e set -euo pipefail
echo "=== LangBot Quick Self-Test ===" echo "=== LangBot Quick Self-Test ==="
echo "" echo ""
# 1. Ruff check # 1. Ruff check
echo "[1/3] Running ruff check..." echo "[1/3] Running ruff check..."
if command -v ruff &> /dev/null; then uv run ruff check src/langbot/ tests/ --output-format=concise || {
ruff check src/langbot/ tests/ --quiet || { echo ""
echo "⚠ Ruff check found issues. Run 'ruff check --fix' to auto-fix." echo "⚠ Ruff check found issues. Run 'uv run ruff check --fix' to auto-fix."
} exit 1
else }
echo "⚠ ruff not installed, skipping lint check" echo "✓ Ruff check passed"
fi
echo "" echo ""
# 2. Unit tests # 2. Unit tests
echo "[2/3] Running unit tests..." echo "[2/3] Running unit tests..."
uv run pytest tests/unit_tests/ -q --tb=short 2>&1 | tail -5 uv run pytest tests/unit_tests/ -q --tb=short
echo "" echo ""
# 3. Smoke tests (if exists) # 3. Smoke tests (if exists)
echo "[3/3] Running smoke tests..." echo "[3/3] Running smoke tests..."
if [ -d "tests/smoke" ]; then if [ -d "tests/smoke" ]; then
uv run pytest tests/smoke/ -q --tb=short 2>&1 | tail -5 uv run pytest tests/smoke/ -q --tb=short
else else
echo "No smoke tests found, skipping" echo "No smoke tests found, skipping"
fi fi
-2
View File
@@ -8,8 +8,6 @@ from __future__ import annotations
from unittest.mock import AsyncMock, Mock from unittest.mock import AsyncMock, Mock
import langbot_plugin.api.entities.builtin.provider.session as provider_session
class FakeApp: class FakeApp:
"""Mock Application object providing all basic dependencies needed by stages.""" """Mock Application object providing all basic dependencies needed by stages."""
-1
View File
@@ -13,7 +13,6 @@ import typing
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
import langbot_plugin.api.entities.builtin.provider.session as provider_session
class FakePlatform: class FakePlatform:
+1 -1
View File
@@ -6,7 +6,7 @@ Provides a deterministic fake provider that simulates LLM responses without real
from __future__ import annotations from __future__ import annotations
from unittest.mock import AsyncMock, Mock from unittest.mock import Mock
import typing import typing
import langbot_plugin.api.entities.builtin.provider.message as provider_message import langbot_plugin.api.entities.builtin.provider.message as provider_message
+17 -11
View File
@@ -1,8 +1,10 @@
""" """
Smoke tests for LangBot core message flow. Minimal fake flow smoke tests for LangBot.
These tests verify the basic message processing flow works correctly These tests verify basic component interactions using fake providers and platforms.
using fake providers and platforms. Not a full pipeline integration test - tests individual factory components.
For full pipeline tests, see tests/integration/ (planned).
""" """
from __future__ import annotations from __future__ import annotations
@@ -272,21 +274,25 @@ class TestFakeMessageFlow:
class TestMessageFlowIntegration: class TestMessageFlowIntegration:
"""Integration smoke tests for full message flow.""" """Minimal fake flow integration tests.
These tests verify component interactions but do NOT run full LangBot pipeline.
For real pipeline tests, integration tests are needed (planned).
"""
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_minimal_message_flow(self): async def test_minimal_message_flow(self):
"""Smoke test: message enters, fake provider responds, platform captures outbound. """Minimal fake flow test: fake query -> fake provider -> fake platform.
This test verifies: This test verifies:
1. Fake app is created 1. Fake text query is created
2. Fake text message enters 2. Fake provider returns LANGBOT_FAKE_PONG
3. Fake provider returns LANGBOT_FAKE_PONG 3. Fake platform captures outbound response
4. Fake platform captures outbound response 4. No unexpected exception
5. No unexpected exception
Note: This does NOT run actual LangBot pipeline stages.
""" """
# Setup # Setup
app = FakeApp()
platform = FakePlatform(bot_account_id="test-bot") platform = FakePlatform(bot_account_id="test-bot")
provider = fake_provider_pong() provider = fake_provider_pong()
model = fake_model(provider=provider) model = fake_model(provider=provider)
+3 -3
View File
@@ -23,9 +23,9 @@ sys.modules.setdefault('langbot.pkg.provider.runner', _mock_runner)
sys.modules.setdefault('langbot.pkg.core.app', MagicMock()) sys.modules.setdefault('langbot.pkg.core.app', MagicMock())
sys.modules.setdefault('langbot.pkg.utils.httpclient', MagicMock()) sys.modules.setdefault('langbot.pkg.utils.httpclient', MagicMock())
import pytest import pytest # noqa: E402
import langbot_plugin.api.entities.builtin.provider.message as provider_message import langbot_plugin.api.entities.builtin.provider.message as provider_message # noqa: E402
from langbot.pkg.provider.runners.n8nsvapi import N8nServiceAPIRunner from langbot.pkg.provider.runners.n8nsvapi import N8nServiceAPIRunner # noqa: E402
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------