mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-10 15:56:03 +00:00
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:
@@ -4,31 +4,30 @@
|
||||
# Runs linting, unit tests, and smoke tests without requiring real provider keys
|
||||
# Suitable for local branch validation
|
||||
|
||||
set -e
|
||||
set -euo pipefail
|
||||
|
||||
echo "=== LangBot Quick Self-Test ==="
|
||||
echo ""
|
||||
|
||||
# 1. Ruff check
|
||||
echo "[1/3] Running ruff check..."
|
||||
if command -v ruff &> /dev/null; then
|
||||
ruff check src/langbot/ tests/ --quiet || {
|
||||
echo "⚠ Ruff check found issues. Run 'ruff check --fix' to auto-fix."
|
||||
}
|
||||
else
|
||||
echo "⚠ ruff not installed, skipping lint check"
|
||||
fi
|
||||
uv run ruff check src/langbot/ tests/ --output-format=concise || {
|
||||
echo ""
|
||||
echo "⚠ Ruff check found issues. Run 'uv run ruff check --fix' to auto-fix."
|
||||
exit 1
|
||||
}
|
||||
echo "✓ Ruff check passed"
|
||||
echo ""
|
||||
|
||||
# 2. 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 ""
|
||||
|
||||
# 3. Smoke tests (if exists)
|
||||
echo "[3/3] Running smoke tests..."
|
||||
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
|
||||
echo "No smoke tests found, skipping"
|
||||
fi
|
||||
|
||||
@@ -8,8 +8,6 @@ from __future__ import annotations
|
||||
|
||||
from unittest.mock import AsyncMock, Mock
|
||||
|
||||
import langbot_plugin.api.entities.builtin.provider.session as provider_session
|
||||
|
||||
|
||||
class FakeApp:
|
||||
"""Mock Application object providing all basic dependencies needed by stages."""
|
||||
|
||||
@@ -13,7 +13,6 @@ import typing
|
||||
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.entities as platform_entities
|
||||
import langbot_plugin.api.entities.builtin.provider.session as provider_session
|
||||
|
||||
|
||||
class FakePlatform:
|
||||
|
||||
@@ -6,7 +6,7 @@ Provides a deterministic fake provider that simulates LLM responses without real
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import AsyncMock, Mock
|
||||
from unittest.mock import Mock
|
||||
import typing
|
||||
|
||||
import langbot_plugin.api.entities.builtin.provider.message as provider_message
|
||||
|
||||
@@ -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
|
||||
using fake providers and platforms.
|
||||
These tests verify basic component interactions 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
|
||||
@@ -272,21 +274,25 @@ class TestFakeMessageFlow:
|
||||
|
||||
|
||||
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
|
||||
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:
|
||||
1. Fake app is created
|
||||
2. Fake text message enters
|
||||
3. Fake provider returns LANGBOT_FAKE_PONG
|
||||
4. Fake platform captures outbound response
|
||||
5. No unexpected exception
|
||||
1. Fake text query is created
|
||||
2. Fake provider returns LANGBOT_FAKE_PONG
|
||||
3. Fake platform captures outbound response
|
||||
4. No unexpected exception
|
||||
|
||||
Note: This does NOT run actual LangBot pipeline stages.
|
||||
"""
|
||||
# Setup
|
||||
app = FakeApp()
|
||||
platform = FakePlatform(bot_account_id="test-bot")
|
||||
provider = fake_provider_pong()
|
||||
model = fake_model(provider=provider)
|
||||
|
||||
@@ -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.utils.httpclient', MagicMock())
|
||||
|
||||
import pytest
|
||||
import langbot_plugin.api.entities.builtin.provider.message as provider_message
|
||||
from langbot.pkg.provider.runners.n8nsvapi import N8nServiceAPIRunner
|
||||
import pytest # noqa: E402
|
||||
import langbot_plugin.api.entities.builtin.provider.message as provider_message # noqa: E402
|
||||
from langbot.pkg.provider.runners.n8nsvapi import N8nServiceAPIRunner # noqa: E402
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user