huanghuoguoguo
cab5f99b97
Merge remote-tracking branch 'origin/fix/utils-pkgmgr-extra-params-none' into validation/test-build-with-fixes
...
# Conflicts:
# tests/unit_tests/utils/test_pkgmgr.py
2026-05-16 10:55:48 +08:00
huanghuoguoguo
560799cc33
Merge remote-tracking branch 'origin/fix/core-sigint-before-app' into validation/test-build-with-fixes
2026-05-16 10:55:07 +08:00
huanghuoguoguo
74f8a500b2
fix pkgmgr install requirements default
2026-05-16 10:52:36 +08:00
huanghuoguoguo
937110e193
fix(core): handle sigint before app startup
2026-05-16 10:51:47 +08:00
huanghuoguoguo
ca74fc1ba4
test(provider): align empty token rotation expectation
2026-05-16 10:45:14 +08:00
huanghuoguoguo
29a0041887
Merge remote-tracking branch 'origin/fix/utils-qq-image-preserve-scheme' into validation/test-build-with-fixes
...
# Conflicts:
# tests/unit_tests/utils/test_image.py
2026-05-16 10:44:23 +08:00
huanghuoguoguo
2484ddc44d
Merge remote-tracking branch 'origin/fix/telemetry-send-tasks-instance' into validation/test-build-with-fixes
2026-05-16 10:43:35 +08:00
huanghuoguoguo
d89356af65
Merge remote-tracking branch 'origin/fix/utils-funcschema-missing-doc' into validation/test-build-with-fixes
...
# Conflicts:
# tests/unit_tests/utils/test_funcschema.py
2026-05-16 10:43:22 +08:00
huanghuoguoguo
5a90b0e06b
Merge remote-tracking branch 'origin/fix/plugin-parse-plugin-id-validation' into validation/test-build-with-fixes
2026-05-16 10:42:45 +08:00
huanghuoguoguo
c2af8ff9c0
Merge remote-tracking branch 'origin/fix/provider-token-empty-next' into validation/test-build-with-fixes
2026-05-16 10:42:45 +08:00
huanghuoguoguo
93589ee381
fix(utils): preserve QQ image URL scheme
2026-05-16 10:37:12 +08:00
huanghuoguoguo
87c5aed9e7
fix telemetry send task isolation
2026-05-16 10:37:04 +08:00
huanghuoguoguo
aa4d46fd87
fix(utils): handle missing funcschema parameter docs
2026-05-16 10:37:01 +08:00
huanghuoguoguo
aa4b5d6732
fix(plugin): validate plugin id format
2026-05-16 10:36:58 +08:00
huanghuoguoguo
748cc68667
fix(provider): ignore empty token rotation
2026-05-16 10:34:11 +08:00
huanghuoguoguo
bb55cd7ba9
test: tighten phase 1 coverage contracts
2026-05-16 10:30:17 +08:00
huanghuoguoguo
3ba727f0e4
test: add 105 new unit tests for untested core functionality
...
Add comprehensive tests for B-class issues (core functionality untested):
Pipeline:
- test_pool.py: QueryPool ID generation, caching, async context (12 tests)
- test_ratelimit.py: Fixed timing-sensitive test tolerance
- test_pipelinemgr.py: Use real Pydantic StageProcessResult instead of Mock
Utils:
- test_version.py: Version comparison functions (20 tests)
- test_logcache.py: Log page management and retrieval (18 tests)
- test_httpclient.py: HTTP session pool management (10 tests)
- test_proxy.py: Proxy configuration from env and config (10 tests)
- test_image.py: URL parsing and base64 extraction (12 tests)
- test_pkgmgr.py: Pip command generation (8 tests)
Discover:
- test_engine.py: I18nString, Metadata, Component manifest (15 tests)
Test count: 1193 → 1298 (+105 tests)
Note: Some B-class issues cannot be tested due to circular import bugs
filed as GitHub issues #2175 (pipeline) and #2176 (persistence).
2026-05-16 10:13:15 +08:00
huanghuoguoguo
3eaadea3e0
docs(test): update coverage stats and test structure
...
- Update coverage from 22% to 30%
- Add new test files to structure:
- provider: session_manager, tool_manager
- storage: s3storage
- plugin: handler_actions
- rag: file_storage
- vector: vdb_filter_conversion
- telemetry: rewritten tests
- Update module coverage percentages
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
1a3c73bc05
test(quality): fix fake tests and add missing coverage
...
P0 fixes:
- telemetry: rewrite fake tests with real behavior verification (25 tests)
- config: delete copied-source tests, use proper imports (2 deleted)
- persistence: fix try-except pass to verify specific errors
P1 fixes:
- pipeline: add real FixedWindowAlgo tests instead of mocks (12 tests)
- provider: add SessionManager and ToolManager tests (25 tests)
- storage: add S3StorageProvider tests with moto mock (16 tests)
- plugin: add handler action tests for setting inheritance (15 tests)
- rag: add file storage and ZIP processing tests (21 tests)
- vector: add VDB filter conversion tests (30 tests)
P2 fixes:
- pipeline/msgtrun: strengthen assertions for exact message count
- api: add response structure validation in integration tests
New test files:
- provider/test_session_manager.py
- provider/test_tool_manager.py
- storage/test_s3storage.py
- plugin/test_handler_actions.py
- rag/test_file_storage.py
- vector/test_vdb_filter_conversion.py
Source code bugs documented:
- provider: TokenManager.next_token() ZeroDivisionError
- telemetry: send_tasks class variable shared state
- command: empty command IndexError, unused parameters
- utils: funcschema KeyError
- entity: vector.py independent declarative_base
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
adb4b29c94
test(e2e): add minimal startup E2E tests
...
Add E2E tests for LangBot startup flow:
- tests/e2e/utils/config_factory.py: minimal config generation
- tests/e2e/utils/process_manager.py: LangBot subprocess management
- tests/e2e/conftest.py: E2E fixtures (session-scoped process)
- tests/e2e/test_startup.py: 12 tests for startup verification
Tests verify:
- boot.py + stages execution
- database initialization (SQLite)
- API availability
- migrations applied
Uses embedded databases (SQLite, Chroma) - no external dependencies.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
af58c34c26
test(integration): add embed and monitoring endpoint tests
...
Add integration tests for embed widget and monitoring API endpoints:
- test_embed.py: 15 tests for widget.js, logo, turnstile, messages, reset, feedback
- test_monitoring.py: 15 tests for overview, messages, llm-calls, sessions, errors, export
Coverage improvements:
- embed.py: 17% → 56%
- monitoring.py: 17% → 93%
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
12c9d02145
test(integration): add knowledge, bots, and model endpoints tests
...
- Add test_knowledge.py (10 tests) covering knowledge base management
- CRUD operations on /api/v1/knowledge/bases
- Files management endpoints
- Retrieve endpoint with validation
- Coverage: knowledge/base.py 26% → 91%
- Add test_bots.py (9 tests) covering bot management
- CRUD operations on /api/v1/platform/bots
- Logs endpoint
- Send message endpoint with validation
- Coverage: platform/bots.py 24% → 87%
- Extend test_providers.py (+4 tests) for embedding/rerank models
- Embedding models CRUD
- Rerank models CRUD
- Coverage: provider/models.py 29% → 60%
Total integration tests: 53 (smoke 12 + pipelines 10 + providers 14 + knowledge 10 + bots 9)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
871c4525ca
test(integration): add API controller integration tests
...
- Add test_pipelines.py (10 tests) covering pipelines CRUD operations
- GET/POST/PUT/DELETE on /api/v1/pipelines
- Extensions endpoint
- Metadata endpoint
- Coverage: pipelines controller 27% → 80%
- Add test_providers.py (10 tests) covering provider/model management
- Provider CRUD with model counts
- LLM model CRUD
- Coverage: providers controller 23% → 81%, models 29% → 45%
Tests use Quart TestClient with mocked services for real HTTP behavior
without external dependencies.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
3872e3e1ac
test(phase2): add unit tests for core, persistence, plugin, utils
...
- Add test_handler_helpers.py for plugin handler helpers (7 tests)
- Add test_mgr_methods.py for persistence manager (5 tests)
- Add test_app_config_validation.py for core app config (12 tests)
- Add test_knowledge_service.py for API knowledge service (22 tests)
- Add test_kbmgr.py for RAG knowledge base manager (39 tests)
- Add test_survey_manager.py for survey manager (22 tests)
- Add test_connector_methods.py for plugin connector (24 tests)
- Add test_funcschema.py for utils function schema (9 tests)
- Add test_platform.py for utils platform detection (7 tests)
- Add test_extract_deps.py for plugin deps extraction (7 tests)
- Add test_database_decorator.py for persistence decorator (7 tests)
- Add test_load_config.py for core config loading (19 tests)
- Add COVERAGE_EXCLUSIONS.md documenting external adapter exclusions
- Fix test_chat_session_limit.py path for portability
Coverage: core 28% → 30%, persistence 24% → 24.4%, plugin 27% → 28%
Total: 1082 tests passed, core module coverage 45.5%
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:13:15 +08:00
huanghuoguoguo
ea6ed9b7fd
test(phase1): add unit tests for telemetry, plugin, rag, persistence
...
Add initial unit tests for Phase 1 of test coverage improvement:
- telemetry: test initialization, payload sanitization, early returns (14.3% → 62.9%)
- plugin: test _parse_plugin_id static method
- rag: test _to_i18n_name static method
- persistence: test serialize_model with datetime handling
Overall core coverage: 41.9% → 42.2%
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
70ec75f9a2
feat(test): Phase 1.5 coverage expansion - COV-001 to COV-013
...
Coverage baseline raised from 13.65% to 26% (+12.35%)
Gate raised from 12% to 18%
Tasks completed:
- COV-001: Command system unit tests (100% coverage)
- COV-002: API service unit tests batch 1 (user/apikey/model/provider)
- COV-003: Provider model manager unit tests
- COV-004: Pipeline remaining stage tests (aggregator/cntfilter/longtext/msgtrun)
- COV-005: Storage and utils coverage pass
- COV-006: Gate ratchet 12%→15%
- COV-007: Gate ratchet 15%→18%
- COV-008: API service batch 2 (bot/pipeline/webhook/space/maintenance/mcp)
- COV-009: Blocked - API controller circular import issue documented
- COV-010: Plugin runtime unit tests (+0.08%)
- COV-011: RAG and vector unit tests (+0.68%)
- COV-012: Core boot and migration unit tests
- COV-013: Provider requester logic unit tests (+0.62%)
Key additions:
- tests/utils/import_isolation.py: sys.modules isolation for circular imports
- Provider requester mock tests: proved HTTP-dependent code can be tested locally
- Vector filter utilities: 100% coverage on pure functions
- API services: fake persistence pattern for unit testing
Blocked issue COV-009 documented in langbot-test-plan/1.5/issues/
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
9e1ff7f85c
feat(test): add PostgreSQL migration slow integration tests (G-003)
...
- Add tests/integration/persistence/test_migrations_postgres.py
- All tests marked with @pytest.mark.slow
- Tests skip when TEST_POSTGRES_URL is not set (no local PostgreSQL)
- Database isolation via clean_tables and clean_alembic_version fixtures
- Update CI workflow to use pytest instead of inline Python script
- Remove TODO(G-003) comment
- Update tests/README.md with PostgreSQL test documentation
Covered scenarios:
- Baseline stamp sets revision
- Upgrade from baseline to head
- Upgrade idempotent
- Get current on unstamped DB returns None
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
91e99e2f46
feat(test): add developer quality gate consolidation (G-007)
...
- Add scripts/test-integration-fast.sh for fast integration tests
- Add scripts/test-coverage.sh with 12% baseline threshold
- Update Makefile with test-integration-fast, test-coverage, test-all-local
- Update CI workflow with integration and coverage jobs
- Add smoke marker to pytest.ini
- Update tests/README.md with quality gate layers documentation
- Add tests/integration/pipeline/ for pipeline stage-chain tests
Quality gate layers:
- Quick: ruff + unit + smoke (~2 min)
- Fast Integration: SQLite/API/Pipeline (~3 min)
- Coverage: 12% threshold gate (~8 min)
- Full Local: all three combined
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
59871c3118
refactor(test): consolidate FakeApp and add sys.modules isolation utility
...
- Extract tests/utils/import_isolation.py with isolated_sys_modules context manager
- Extend tests/factories/app.py FakeApp with handler-specific attributes
- Refactor test_chat_handler.py to use centralized FakeApp and cached imports
- Refactor test_command_handler.py with mock_execute_factory fixture
- Refactor test_smoke.py to move import-time sys.modules manipulation into fixture
- Add SQLite migration integration tests (G-002)
- Add HTTP API smoke integration tests (G-005)
- Update CI workflow to call pytest for SQLite migrations (G-004)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
3780a68dfa
test(unit): improve taskmgr tests to test real classes
...
U-004 improved: Tests now import and test actual classes:
- TaskContext: new(), trace(), to_dict(), placeholder()
- TaskWrapper: task creation, context, exception/result capture, cancel, to_dict
- AsyncTaskManager: create_task, create_user_task, cancel_task, cancel_by_scope
- Task pruning behavior
Uses pre-mocking technique:
- Mock langbot.pkg.core.app before import (breaks circular chain)
- Mock langbot.pkg.core.entities with proper Enum
All 24 tests now test real class behavior, not patterns.
taskmgr.py coverage should improve significantly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
9908dc7800
style: fix unused imports after ruff auto-fix
...
Remove unused imports in test files:
- test_config_loader.py: remove unused os
- test_taskmgr.py: remove unused Mock
- test_preproc.py: remove unused unsupported_query, image_chain
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
84afe8551d
test(unit): add chat and command handler pattern tests
...
U-002: Chat Handler tests (pattern-based)
- Normal message event emission pattern
- prevent_default handling
- User message alteration pattern
- Runner selection pattern
- Streaming/non-streaming response patterns
- Exception handling modes (show-error, show-hint, hide)
- Message history update pattern
- Telemetry payload pattern
U-003: Command Handler tests (pattern-based)
- Command parsing and text extraction
- Event creation pattern
- Privilege/admin check pattern
- Command result handling (text, error, image)
- prevent_default handling
- String truncation helper
Uses pattern-based testing to avoid circular import issues in source code.
Direct imports of handler modules trigger circular import chain.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
53747fc1f0
test(unit): add config loader unit tests
...
U-005: Config Loader tests
- Valid YAML config loading
- Valid JSON config loading
- Invalid YAML/JSON error behavior
- Missing config file creation from template
- Template completion for missing keys
- ConfigManager load/dump operations
- Exists check for both YAML and JSON
All tests use tmp_path fixture, no real project config.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
1f855c3e7f
test(unit): add preproc and taskmgr unit tests
...
U-001: Pipeline Preprocessor tests
- Normal text message processing
- Empty message handling
- Image segment with/without vision model
- Model selection and fallback
- Variable extraction
U-004: Core Task Manager tests (pattern-based)
- Task creation and tracking patterns
- Task cancellation patterns
- Scope-based cancellation
- Task type filtering
- Pruning completed tasks
- Wait all tasks
Taskmgr tests use pattern-based approach to avoid circular import
in source code (taskmgr → app → http_controller → migration → taskmgr).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
66a0a7c9c8
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 >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
25bf3ea0b3
feat(test): add developer test-quick command
...
Add scripts/test-quick.sh and Makefile with:
- test-quick: runs ruff check + unit tests + smoke tests
- No real provider keys or platform accounts required
- Suitable for local branch self-test
Update tests/README.md:
- Document test-quick command
- Document test factories package
- Add smoke tests and factories directory structure
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
d2c7a51e46
feat(test): add fake message flow smoke test
...
Create tests/smoke/test_fake_message_flow.py:
- TestFakeMessageFlow: factory verification tests
- TestMessageFlowIntegration: minimal flow smoke test
- Tests FakeApp, FakeProvider, FakePlatform, query factories
- Verifies LANGBOT_FAKE_PONG marker response
- Captures outbound messages for assertions
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
d38e3d9181
feat(test): add comprehensive message/query factories
...
Extend tests/factories/message.py with:
- file_query: file attachment query
- unsupported_query: unknown message segment
- voice_query: audio/voice query
- at_all_query: group @All mention
- query_with_session: query with session object
- query_with_config: query with custom pipeline config
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
77be87ed40
feat(test): add fake platform factory
...
Add tests/factories/platform.py with:
- FakePlatform: simulated platform adapter
- Inbound message construction: friend/group/image
- Mention-bot flag simulation
- Outbound message capture for assertions
- Streaming output support simulation
- Send failure simulation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
27227aa31f
feat(test): add fake provider factory
...
Add tests/factories/provider.py with:
- FakeProvider: deterministic fake LLM provider
- Error simulation: timeout, auth, rate-limit, malformed
- Request capture for assertions
- fake_model: mock model with attached provider
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
1af2cb5bc2
feat(test): add shared test factories package
...
Create tests/factories/ with reusable test factories:
- FakeApp: mock application with all dependencies
- Message chains: text_chain, mention_chain, image_chain
- Query factories: text_query, group_text_query, command_query, etc.
No test changes - maintains backward compatibility.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:48 +08:00
huanghuoguoguo
37641f05f2
docs(tests): update README to reflect current test layout
...
- Fix stale paths: tests/pipeline → tests/unit_tests/pipeline
- Update CI Python versions: 3.11, 3.12, 3.13
- Add test directory structure for box, config, platform, plugin, provider, storage
- Document pytest markers and uv commands
- Mention planned E2E tests
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:47 +08:00
huanghuoguoguo
4bb0b49907
fix(ci): update unit-test workflow paths to match current source layout
...
Replace stale pkg/** filter with src/langbot/** and add uv.lock.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 10:12:47 +08:00
RockChinQ
b251fc4b89
fix(plugin): resolve plugin page asset origin
2026-05-14 15:39:17 +08:00
Junyan Qin
075c85e2bc
chore: bump version 4.9.7
v4.9.7
2026-05-12 23:48:52 +08:00
Junyan Qin
62b63ca2ca
chore: bump langbot plugin to 0.3.11
2026-05-12 23:47:35 +08:00
fdc310
3680a80248
feat(lark): implement message sending functionality in LarkAdapter
2026-05-12 18:28:34 +08:00
fdc310
6713b57d01
feat: enhance API key normalization and improve Space OAuth callback handling
2026-05-11 15:03:30 +08:00
fdc310
ea13ef87f2
feat(provider): add API key normalization and update OpenAI requester initialization
2026-05-11 14:21:42 +08:00
fdc310
59bd581e88
feat(i18n): add 'recommend' and 'start' keys for Spanish, Russian, Thai, and Vietnamese locales
2026-05-11 10:31:32 +08:00